[{"data":1,"prerenderedAt":173298},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch4-ming-ling-jiao-cheng-chang-qi-ji-lei":3,"wiki-doc-nav":428},{"id":4,"title":5,"body":6,"description":421,"extension":422,"meta":423,"navigation":140,"path":424,"seo":425,"stem":426,"__hash__":427},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":8,"toc":419},"minimark",[9,13,20,24,333,338,341,382,385,415],[10,11,5],"h1",{"id":12},"_4-命令教程长期积累",[14,15,16],"ol",{},[17,18,19],"li",{},"大多数命令",[21,22,23],"p",{},"常用 Linux 命令速查：",[25,26,31],"pre",{"className":27,"code":28,"language":29,"meta":30,"style":30},"language-Bash shiki shiki-themes github-light github-dark","# 文件与目录\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","Bash","",[32,33,34,43,53,63,72,81,90,99,108,117,126,135,142,148,157,166,175,180,186,195,204,213,222,231,236,242,251,260,269,278,287,292,298,311,322],"code",{"__ignoreMap":30},[35,36,39],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"sJ8bj","# 文件与目录\n",[35,44,46,50],{"class":37,"line":45},2,[35,47,49],{"class":48},"sScJk","ls",[35,51,52],{"class":41},"        # 列出目录内容\n",[35,54,56,60],{"class":37,"line":55},3,[35,57,59],{"class":58},"sj4cs","cd",[35,61,62],{"class":41},"        # 切换目录\n",[35,64,66,69],{"class":37,"line":65},4,[35,67,68],{"class":58},"pwd",[35,70,71],{"class":41},"       # 显示当前路径\n",[35,73,75,78],{"class":37,"line":74},5,[35,76,77],{"class":48},"mkdir",[35,79,80],{"class":41},"     # 创建目录\n",[35,82,84,87],{"class":37,"line":83},6,[35,85,86],{"class":48},"rm",[35,88,89],{"class":41},"        # 删除文件或目录\n",[35,91,93,96],{"class":37,"line":92},7,[35,94,95],{"class":48},"cp",[35,97,98],{"class":41},"        # 复制文件或目录\n",[35,100,102,105],{"class":37,"line":101},8,[35,103,104],{"class":48},"mv",[35,106,107],{"class":41},"        # 移动\u002F重命名文件或目录\n",[35,109,111,114],{"class":37,"line":110},9,[35,112,113],{"class":48},"touch",[35,115,116],{"class":41},"     # 创建空文件\n",[35,118,120,123],{"class":37,"line":119},10,[35,121,122],{"class":48},"cat",[35,124,125],{"class":41},"       # 查看文件内容\n",[35,127,129,132],{"class":37,"line":128},11,[35,130,131],{"class":48},"head\u002Ftail",[35,133,134],{"class":41}," # 查看文件头部\u002F尾部\n",[35,136,138],{"class":37,"line":137},12,[35,139,141],{"emptyLinePlaceholder":140},true,"\n",[35,143,145],{"class":37,"line":144},13,[35,146,147],{"class":41},"# 权限管理\n",[35,149,151,154],{"class":37,"line":150},14,[35,152,153],{"class":48},"chmod",[35,155,156],{"class":41},"     # 修改文件权限\n",[35,158,160,163],{"class":37,"line":159},15,[35,161,162],{"class":48},"chown",[35,164,165],{"class":41},"     # 修改文件所有者\n",[35,167,169,172],{"class":37,"line":168},16,[35,170,171],{"class":48},"sudo",[35,173,174],{"class":41},"      # 以管理员身份执行\n",[35,176,178],{"class":37,"line":177},17,[35,179,141],{"emptyLinePlaceholder":140},[35,181,183],{"class":37,"line":182},18,[35,184,185],{"class":41},"# 系统信息\n",[35,187,189,192],{"class":37,"line":188},19,[35,190,191],{"class":48},"uname",[35,193,194],{"class":41},"     # 系统信息\n",[35,196,198,201],{"class":37,"line":197},20,[35,199,200],{"class":48},"df",[35,202,203],{"class":41},"        # 磁盘使用情况\n",[35,205,207,210],{"class":37,"line":206},21,[35,208,209],{"class":48},"free",[35,211,212],{"class":41},"      # 内存使用情况\n",[35,214,216,219],{"class":37,"line":215},22,[35,217,218],{"class":48},"top\u002Fhtop",[35,220,221],{"class":41},"  # 进程监控\n",[35,223,225,228],{"class":37,"line":224},23,[35,226,227],{"class":48},"ps",[35,229,230],{"class":41},"        # 查看进程\n",[35,232,234],{"class":37,"line":233},24,[35,235,141],{"emptyLinePlaceholder":140},[35,237,239],{"class":37,"line":238},25,[35,240,241],{"class":41},"# 网络\n",[35,243,245,248],{"class":37,"line":244},26,[35,246,247],{"class":48},"ping",[35,249,250],{"class":41},"      # 测试网络连通性\n",[35,252,254,257],{"class":37,"line":253},27,[35,255,256],{"class":48},"curl",[35,258,259],{"class":41},"      # 发送 HTTP 请求\n",[35,261,263,266],{"class":37,"line":262},28,[35,264,265],{"class":48},"wget",[35,267,268],{"class":41},"      # 下载文件\n",[35,270,272,275],{"class":37,"line":271},29,[35,273,274],{"class":48},"ssh",[35,276,277],{"class":41},"       # 远程登录\n",[35,279,281,284],{"class":37,"line":280},30,[35,282,283],{"class":48},"scp",[35,285,286],{"class":41},"       # 远程文件传输\n",[35,288,290],{"class":37,"line":289},31,[35,291,141],{"emptyLinePlaceholder":140},[35,293,295],{"class":37,"line":294},32,[35,296,297],{"class":41},"# 包管理（Debian\u002FUbuntu）\n",[35,299,301,304,308],{"class":37,"line":300},33,[35,302,303],{"class":48},"apt",[35,305,307],{"class":306},"sZZnC"," update",[35,309,310],{"class":41},"   # 更新软件源\n",[35,312,314,316,319],{"class":37,"line":313},34,[35,315,303],{"class":48},[35,317,318],{"class":306}," install",[35,320,321],{"class":41},"  # 安装软件包\n",[35,323,325,327,330],{"class":37,"line":324},35,[35,326,303],{"class":48},[35,328,329],{"class":306}," remove",[35,331,332],{"class":41},"   # 卸载软件包\n",[14,334,335],{"start":45},[17,336,337],{},"KDE Dolphin 以root打开",[21,339,340],{},"kde5",[25,342,344],{"className":27,"code":343,"language":29,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[32,345,346],{"__ignoreMap":30},[35,347,348,351,354,357,361,364,367,370,373,376,379],{"class":37,"line":38},[35,349,350],{"class":48},"pkexec",[35,352,353],{"class":306}," env",[35,355,356],{"class":306}," DISPLAY=",[35,358,360],{"class":359},"sVt8B","$DISPLAY ",[35,362,363],{"class":306},"XAUTHORITY=",[35,365,366],{"class":359},"$XAUTHORITY ",[35,368,369],{"class":306},"KDE_SESSION_VERSION=",[35,371,372],{"class":58},"5",[35,374,375],{"class":306}," KDE_FULL_SESSION=",[35,377,378],{"class":58},"true",[35,380,381],{"class":306}," dolphin\n",[21,383,384],{},"kde6",[25,386,388],{"className":27,"code":387,"language":29,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[32,389,390],{"__ignoreMap":30},[35,391,392,394,396,398,400,402,404,406,409,411,413],{"class":37,"line":38},[35,393,350],{"class":48},[35,395,353],{"class":306},[35,397,356],{"class":306},[35,399,360],{"class":359},[35,401,363],{"class":306},[35,403,366],{"class":359},[35,405,369],{"class":306},[35,407,408],{"class":58},"6",[35,410,375],{"class":306},[35,412,378],{"class":58},[35,414,381],{"class":306},[416,417,418],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html 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":30,"searchDepth":45,"depth":45,"links":420},[],null,"md",{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":5,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",[429,5496,6604,8024,11013,12364,13853,14942,23705,23717,24315,24341,24465,24706,24771,24789,24802,24849,24971,25140,25339,25519,25723,25859,25954,25991,26004,26314,27054,27760,27781,28799,30430,30581,30594,30606,30907,50719,50734,50751,50784,53656,77003,93148,93169,93282,93403,94173,94836,95197,95235,95341,95441,95484,95510,95571,97225,97326,97351,97842,98342,99422,99705,100447,100949,100961,102974,104638,106141,107839,109756,111675,113697,117167,117599,118058,118807,121749,122032,122054,122410,125717,125729,126132,126155,126302,126469,126674,126975,127532,128189,130120,131718,132367,133861,135292,136527,138221,139973,142383,142499,143434,143645,144530,145765,145993,146006,147161,149573,151941,155262,157739,159383,161160,163173,166225,168405,170932,173126],{"id":430,"title":431,"body":432,"description":30,"extension":422,"meta":5491,"navigation":140,"path":5492,"seo":5493,"stem":5494,"__hash__":5495},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":433,"toc":5463},[434,437,442,445,449,460,464,469,472,475,478,481,484,513,517,520,523,526,529,580,584,602,604,618,621,629,632,1493,1500,1517,1521,1607,1611,1617,1703,1707,1744,1748,1812,1816,1820,1827,1838,1842,1847,1851,1856,1860,1865,1869,1873,1878,2129,2134,2272,2277,2533,2536,2544,2548,2553,2656,2659,2958,2967,3068,3071,3074,3077,3080,3340,3345,3485,3488,3667,3670,3798,3801,3953,3957,3962,3965,3976,3984,3987,4094,4098,4102,4107,4157,4162,4167,4191,4196,4249,4252,4257,4434,4439,4724,4729,5126,5130,5135,5192,5197,5205,5208,5348,5351,5460],[10,435,431],{"id":436},"_1基础入门",[438,439,441],"h2",{"id":440},"_11注释","1.1注释",[21,443,444],{},"\u002F\u002F或者\u002F* *\u002F",[438,446,448],{"id":447},"_12命名","1.2命名",[14,450,451,454,457],{},[17,452,453],{},"字母数字下划线",[17,455,456],{},"开头必须是字母或_",[17,458,459],{},"不能使用关键词",[438,461,463],{"id":462},"_13数据类型","1.3数据类型",[465,466,468],"h3",{"id":467},"_131整形","1.3.1整形",[21,470,471],{},"short 短整形 2",[21,473,474],{},"int 整形 4",[21,476,477],{},"long 长整形 win4 linux32位4 linux64位8",[21,479,480],{},"long long 长长整形 8",[21,482,483],{},"利用sizeof可以求数据类型占用的内存空间大小",[25,485,489],{"className":486,"code":487,"language":488,"meta":30,"style":30},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[32,490,491,506],{"__ignoreMap":30},[35,492,493,497,500,503],{"class":37,"line":38},[35,494,496],{"class":495},"szBVR","sizeof",[35,498,499],{"class":359},"(",[35,501,502],{"class":495},"int",[35,504,505],{"class":359},")\n",[35,507,508,510],{"class":37,"line":45},[35,509,496],{"class":495},[35,511,512],{"class":359},"(num)\n",[465,514,516],{"id":515},"_132浮点型","1.3.2浮点型",[21,518,519],{},"float 单精度 4节 7位有效数字",[21,521,522],{},"double 双精度 8节 15-16有效数字",[21,524,525],{},"默认情况下，输出一个小数，会显示6位有效数字",[21,527,528],{},"注意点：",[25,530,532],{"className":486,"code":531,"language":488,"meta":30,"style":30},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[32,533,534,557],{"__ignoreMap":30},[35,535,536,539,542,545,548,551,554],{"class":37,"line":38},[35,537,538],{"class":495},"float",[35,540,541],{"class":359}," f1",[35,543,544],{"class":495},"=",[35,546,547],{"class":58},"3.14",[35,549,550],{"class":495},"f",[35,552,553],{"class":359},";",[35,555,556],{"class":41}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[35,558,559,561,564,566,569,572,575,577],{"class":37,"line":45},[35,560,538],{"class":495},[35,562,563],{"class":359}," f2",[35,565,544],{"class":495},[35,567,568],{"class":58},"3",[35,570,571],{"class":495},"e",[35,573,574],{"class":58},"2",[35,576,553],{"class":359},[35,578,579],{"class":41}," \u002F\u002F科学记数法\n",[465,581,583],{"id":582},"_133字符型","1.3.3字符型",[25,585,587],{"className":486,"code":586,"language":488,"meta":30,"style":30},"char ch='a'\n",[32,588,589],{"__ignoreMap":30},[35,590,591,594,597,599],{"class":37,"line":38},[35,592,593],{"class":495},"char",[35,595,596],{"class":359}," ch",[35,598,544],{"class":495},[35,600,601],{"class":306},"'a'\n",[21,603,528],{},[14,605,606,609,612,615],{},[17,607,608],{},"在显示字符型变量时，只能单引号，双引号x",[17,610,611],{},"单引号内只能一个字符，不能字符串",[17,613,614],{},"c和c++字符型变量只占用一个字符",[17,616,617],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[21,619,620],{},"ASCII码大致由以下两部分组成：",[14,622,623,626],{},[17,624,625],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[17,627,628],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[21,630,631],{},"ASCII码表格：",[633,634,635,679],"table",{},[636,637,638],"thead",{},[639,640,641,649,654,658,663,667,671,675],"tr",{},[642,643,644,648],"th",{},[645,646,647],"strong",{},"ASCII","值",[642,650,651],{},[645,652,653],{},"控制字符",[642,655,656,648],{},[645,657,647],{},[642,659,660],{},[645,661,662],{},"字符",[642,664,665,648],{},[645,666,647],{},[642,668,669],{},[645,670,662],{},[642,672,673,648],{},[645,674,647],{},[642,676,677],{},[645,678,662],{},[680,681,682,709,735,760,785,811,835,859,885,910,936,962,988,1013,1039,1065,1091,1115,1140,1165,1190,1215,1240,1265,1290,1315,1340,1366,1391,1416,1441,1467],"tbody",{},[639,683,684,688,691,694,697,700,703,706],{},[685,686,687],"td",{},"0",[685,689,690],{},"NUT",[685,692,693],{},"32",[685,695,696],{},"(space)",[685,698,699],{},"64",[685,701,702],{},"@",[685,704,705],{},"96",[685,707,708],{},"、",[639,710,711,714,717,720,723,726,729,732],{},[685,712,713],{},"1",[685,715,716],{},"SOH",[685,718,719],{},"33",[685,721,722],{},"!",[685,724,725],{},"65",[685,727,728],{},"A",[685,730,731],{},"97",[685,733,734],{},"a",[639,736,737,739,742,745,748,751,754,757],{},[685,738,574],{},[685,740,741],{},"STX",[685,743,744],{},"34",[685,746,747],{},"\"",[685,749,750],{},"66",[685,752,753],{},"B",[685,755,756],{},"98",[685,758,759],{},"b",[639,761,762,764,767,770,773,776,779,782],{},[685,763,568],{},[685,765,766],{},"ETX",[685,768,769],{},"35",[685,771,772],{},"#",[685,774,775],{},"67",[685,777,778],{},"C",[685,780,781],{},"99",[685,783,784],{},"c",[639,786,787,790,793,796,799,802,805,808],{},[685,788,789],{},"4",[685,791,792],{},"EOT",[685,794,795],{},"36",[685,797,798],{},"$",[685,800,801],{},"68",[685,803,804],{},"D",[685,806,807],{},"100",[685,809,810],{},"d",[639,812,813,815,818,821,824,827,830,833],{},[685,814,372],{},[685,816,817],{},"ENQ",[685,819,820],{},"37",[685,822,823],{},"%",[685,825,826],{},"69",[685,828,829],{},"E",[685,831,832],{},"101",[685,834,571],{},[639,836,837,839,842,845,848,851,854,857],{},[685,838,408],{},[685,840,841],{},"ACK",[685,843,844],{},"38",[685,846,847],{},"&",[685,849,850],{},"70",[685,852,853],{},"F",[685,855,856],{},"102",[685,858,550],{},[639,860,861,864,867,870,873,876,879,882],{},[685,862,863],{},"7",[685,865,866],{},"BEL",[685,868,869],{},"39",[685,871,872],{},",",[685,874,875],{},"71",[685,877,878],{},"G",[685,880,881],{},"103",[685,883,884],{},"g",[639,886,887,890,893,896,898,901,904,907],{},[685,888,889],{},"8",[685,891,892],{},"BS",[685,894,895],{},"40",[685,897,499],{},[685,899,900],{},"72",[685,902,903],{},"H",[685,905,906],{},"104",[685,908,909],{},"h",[639,911,912,915,918,921,924,927,930,933],{},[685,913,914],{},"9",[685,916,917],{},"HT",[685,919,920],{},"41",[685,922,923],{},")",[685,925,926],{},"73",[685,928,929],{},"I",[685,931,932],{},"105",[685,934,935],{},"i",[639,937,938,941,944,947,950,953,956,959],{},[685,939,940],{},"10",[685,942,943],{},"LF",[685,945,946],{},"42",[685,948,949],{},"*",[685,951,952],{},"74",[685,954,955],{},"J",[685,957,958],{},"106",[685,960,961],{},"j",[639,963,964,967,970,973,976,979,982,985],{},[685,965,966],{},"11",[685,968,969],{},"VT",[685,971,972],{},"43",[685,974,975],{},"+",[685,977,978],{},"75",[685,980,981],{},"K",[685,983,984],{},"107",[685,986,987],{},"k",[639,989,990,993,996,999,1001,1004,1007,1010],{},[685,991,992],{},"12",[685,994,995],{},"FF",[685,997,998],{},"44",[685,1000,872],{},[685,1002,1003],{},"76",[685,1005,1006],{},"L",[685,1008,1009],{},"108",[685,1011,1012],{},"l",[639,1014,1015,1018,1021,1024,1027,1030,1033,1036],{},[685,1016,1017],{},"13",[685,1019,1020],{},"CR",[685,1022,1023],{},"45",[685,1025,1026],{},"-",[685,1028,1029],{},"77",[685,1031,1032],{},"M",[685,1034,1035],{},"109",[685,1037,1038],{},"m",[639,1040,1041,1044,1047,1050,1053,1056,1059,1062],{},[685,1042,1043],{},"14",[685,1045,1046],{},"SO",[685,1048,1049],{},"46",[685,1051,1052],{},".",[685,1054,1055],{},"78",[685,1057,1058],{},"N",[685,1060,1061],{},"110",[685,1063,1064],{},"n",[639,1066,1067,1070,1073,1076,1079,1082,1085,1088],{},[685,1068,1069],{},"15",[685,1071,1072],{},"SI",[685,1074,1075],{},"47",[685,1077,1078],{},"\u002F",[685,1080,1081],{},"79",[685,1083,1084],{},"O",[685,1086,1087],{},"111",[685,1089,1090],{},"o",[639,1092,1093,1096,1099,1102,1104,1107,1110,1113],{},[685,1094,1095],{},"16",[685,1097,1098],{},"DLE",[685,1100,1101],{},"48",[685,1103,687],{},[685,1105,1106],{},"80",[685,1108,1109],{},"P",[685,1111,1112],{},"112",[685,1114,21],{},[639,1116,1117,1120,1123,1126,1128,1131,1134,1137],{},[685,1118,1119],{},"17",[685,1121,1122],{},"DCI",[685,1124,1125],{},"49",[685,1127,713],{},[685,1129,1130],{},"81",[685,1132,1133],{},"Q",[685,1135,1136],{},"113",[685,1138,1139],{},"q",[639,1141,1142,1145,1148,1151,1153,1156,1159,1162],{},[685,1143,1144],{},"18",[685,1146,1147],{},"DC2",[685,1149,1150],{},"50",[685,1152,574],{},[685,1154,1155],{},"82",[685,1157,1158],{},"R",[685,1160,1161],{},"114",[685,1163,1164],{},"r",[639,1166,1167,1170,1173,1176,1178,1181,1184,1187],{},[685,1168,1169],{},"19",[685,1171,1172],{},"DC3",[685,1174,1175],{},"51",[685,1177,568],{},[685,1179,1180],{},"83",[685,1182,1183],{},"S",[685,1185,1186],{},"115",[685,1188,1189],{},"s",[639,1191,1192,1195,1198,1201,1203,1206,1209,1212],{},[685,1193,1194],{},"20",[685,1196,1197],{},"DC4",[685,1199,1200],{},"52",[685,1202,789],{},[685,1204,1205],{},"84",[685,1207,1208],{},"T",[685,1210,1211],{},"116",[685,1213,1214],{},"t",[639,1216,1217,1220,1223,1226,1228,1231,1234,1237],{},[685,1218,1219],{},"21",[685,1221,1222],{},"NAK",[685,1224,1225],{},"53",[685,1227,372],{},[685,1229,1230],{},"85",[685,1232,1233],{},"U",[685,1235,1236],{},"117",[685,1238,1239],{},"u",[639,1241,1242,1245,1248,1251,1253,1256,1259,1262],{},[685,1243,1244],{},"22",[685,1246,1247],{},"SYN",[685,1249,1250],{},"54",[685,1252,408],{},[685,1254,1255],{},"86",[685,1257,1258],{},"V",[685,1260,1261],{},"118",[685,1263,1264],{},"v",[639,1266,1267,1270,1273,1276,1278,1281,1284,1287],{},[685,1268,1269],{},"23",[685,1271,1272],{},"TB",[685,1274,1275],{},"55",[685,1277,863],{},[685,1279,1280],{},"87",[685,1282,1283],{},"W",[685,1285,1286],{},"119",[685,1288,1289],{},"w",[639,1291,1292,1295,1298,1301,1303,1306,1309,1312],{},[685,1293,1294],{},"24",[685,1296,1297],{},"CAN",[685,1299,1300],{},"56",[685,1302,889],{},[685,1304,1305],{},"88",[685,1307,1308],{},"X",[685,1310,1311],{},"120",[685,1313,1314],{},"x",[639,1316,1317,1320,1323,1326,1328,1331,1334,1337],{},[685,1318,1319],{},"25",[685,1321,1322],{},"EM",[685,1324,1325],{},"57",[685,1327,914],{},[685,1329,1330],{},"89",[685,1332,1333],{},"Y",[685,1335,1336],{},"121",[685,1338,1339],{},"y",[639,1341,1342,1345,1348,1351,1354,1357,1360,1363],{},[685,1343,1344],{},"26",[685,1346,1347],{},"SUB",[685,1349,1350],{},"58",[685,1352,1353],{},":",[685,1355,1356],{},"90",[685,1358,1359],{},"Z",[685,1361,1362],{},"122",[685,1364,1365],{},"z",[639,1367,1368,1371,1374,1377,1379,1382,1385,1388],{},[685,1369,1370],{},"27",[685,1372,1373],{},"ESC",[685,1375,1376],{},"59",[685,1378,553],{},[685,1380,1381],{},"91",[685,1383,1384],{},"[",[685,1386,1387],{},"123",[685,1389,1390],{},"{",[639,1392,1393,1396,1399,1402,1405,1408,1410,1413],{},[685,1394,1395],{},"28",[685,1397,1398],{},"FS",[685,1400,1401],{},"60",[685,1403,1404],{},"\u003C",[685,1406,1407],{},"92",[685,1409,1078],{},[685,1411,1412],{},"124",[685,1414,1415],{},"|",[639,1417,1418,1421,1424,1427,1429,1432,1435,1438],{},[685,1419,1420],{},"29",[685,1422,1423],{},"GS",[685,1425,1426],{},"61",[685,1428,544],{},[685,1430,1431],{},"93",[685,1433,1434],{},"]",[685,1436,1437],{},"125",[685,1439,1440],{},"}",[639,1442,1443,1446,1449,1452,1455,1458,1461,1464],{},[685,1444,1445],{},"30",[685,1447,1448],{},"RS",[685,1450,1451],{},"62",[685,1453,1454],{},">",[685,1456,1457],{},"94",[685,1459,1460],{},"^",[685,1462,1463],{},"126",[685,1465,1466],{},"`",[639,1468,1469,1472,1475,1478,1481,1484,1487,1490],{},[685,1470,1471],{},"31",[685,1473,1474],{},"US",[685,1476,1477],{},"63",[685,1479,1480],{},"?",[685,1482,1483],{},"95",[685,1485,1486],{},"_",[685,1488,1489],{},"127",[685,1491,1492],{},"DEL",[21,1494,1495,1496,1499],{},"ASCII 码大致由以下",[645,1497,1498],{},"两部分组","成：",[1501,1502,1503,1510],"ul",{},[17,1504,1505,1506,1509],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[645,1507,1508],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[17,1511,1512,1513,1516],{},"ASCII 打印字符：数字 ",[645,1514,1515],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[465,1518,1520],{"id":1519},"_134转义字符","1.3.4转义字符",[25,1522,1524],{"className":486,"code":1523,"language":488,"meta":30,"style":30},"\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",[32,1525,1526,1531,1547,1561,1566,1579,1584],{"__ignoreMap":30},[35,1527,1528],{"class":37,"line":38},[35,1529,1530],{"class":41},"\u002F\u002F换行符\n",[35,1532,1533,1536,1539,1542,1544],{"class":37,"line":45},[35,1534,1535],{"class":359},"cout ",[35,1537,1538],{"class":495},"\u003C\u003C",[35,1540,1541],{"class":306},"\"hello world\u002Fn\"",[35,1543,553],{"class":359},[35,1545,1546],{"class":41}," \u002F\u002F就等同于如下：\n",[35,1548,1549,1551,1553,1556,1558],{"class":37,"line":55},[35,1550,1535],{"class":359},[35,1552,1538],{"class":495},[35,1554,1555],{"class":306},"\"hello world\"",[35,1557,1538],{"class":495},[35,1559,1560],{"class":359},"endl;\n",[35,1562,1563],{"class":37,"line":65},[35,1564,1565],{"class":41},"\u002F\u002F反斜杠\n",[35,1567,1568,1570,1572,1575,1577],{"class":37,"line":74},[35,1569,1535],{"class":359},[35,1571,1538],{"class":495},[35,1573,1574],{"class":306},"\"\u002F\u002F\"",[35,1576,1538],{"class":495},[35,1578,1560],{"class":359},[35,1580,1581],{"class":37,"line":83},[35,1582,1583],{"class":41},"\u002F\u002F水平制表符\n",[35,1585,1586,1588,1590,1593,1596,1599,1601,1604],{"class":37,"line":92},[35,1587,1535],{"class":359},[35,1589,1538],{"class":495},[35,1591,1592],{"class":306},"\"aaaa",[35,1594,1595],{"class":58},"\\t",[35,1597,1598],{"class":306},"helloworld\"",[35,1600,1538],{"class":495},[35,1602,1603],{"class":359},"endl;",[35,1605,1606],{"class":41}," \u002F\u002F输出窗口时有对齐效果\n",[465,1608,1610],{"id":1609},"_135字符串型","1.3.5字符串型",[21,1612,1613,1614,1616],{},"char 变量名",[35,1615],{},"=\"字符串值\"",[25,1618,1620],{"className":486,"code":1619,"language":488,"meta":30,"style":30},"\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",[32,1621,1622,1627,1632,1637,1642,1656,1669,1674,1679,1690],{"__ignoreMap":30},[35,1623,1624],{"class":37,"line":38},[35,1625,1626],{"class":41},"\u002F\u002Fc风格字符串\n",[35,1628,1629],{"class":37,"line":45},[35,1630,1631],{"class":41},"\u002F\u002F注意事项：\n",[35,1633,1634],{"class":37,"line":55},[35,1635,1636],{"class":41},"\u002F\u002F1.char字符串名[]\n",[35,1638,1639],{"class":37,"line":65},[35,1640,1641],{"class":41},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[35,1643,1644,1646,1649,1651,1653],{"class":37,"line":74},[35,1645,593],{"class":495},[35,1647,1648],{"class":359}," str[]",[35,1650,544],{"class":495},[35,1652,1555],{"class":306},[35,1654,1655],{"class":359},";\n",[35,1657,1658,1660,1662,1665,1667],{"class":37,"line":83},[35,1659,1535],{"class":359},[35,1661,1538],{"class":495},[35,1663,1664],{"class":359},"str",[35,1666,1538],{"class":495},[35,1668,1560],{"class":359},[35,1670,1671],{"class":37,"line":92},[35,1672,1673],{"class":41},"\u002F\u002Fc++风格字符串\n",[35,1675,1676],{"class":37,"line":101},[35,1677,1678],{"class":41},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[35,1680,1681,1684,1686,1688],{"class":37,"line":110},[35,1682,1683],{"class":359},"string str2",[35,1685,544],{"class":495},[35,1687,1555],{"class":306},[35,1689,1655],{"class":359},[35,1691,1692,1694,1696,1699,1701],{"class":37,"line":119},[35,1693,1535],{"class":359},[35,1695,1538],{"class":495},[35,1697,1698],{"class":359},"str2",[35,1700,1538],{"class":495},[35,1702,1560],{"class":359},[465,1704,1706],{"id":1705},"_136布尔类型bool","1.3.6布尔类型bool",[25,1708,1710],{"className":486,"code":1709,"language":488,"meta":30,"style":30},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[32,1711,1712,1726],{"__ignoreMap":30},[35,1713,1714,1717,1720,1722,1724],{"class":37,"line":38},[35,1715,1716],{"class":495},"bool",[35,1718,1719],{"class":359}," flag",[35,1721,544],{"class":495},[35,1723,378],{"class":58},[35,1725,1655],{"class":359},[35,1727,1728,1731,1734,1737,1739,1741],{"class":37,"line":45},[35,1729,1730],{"class":359},"cout",[35,1732,1733],{"class":495},"\u003C\u003Csizeof",[35,1735,1736],{"class":359},"(flag)",[35,1738,1538],{"class":495},[35,1740,1603],{"class":359},[35,1742,1743],{"class":41}," \u002F\u002F查看布尔占内存空间\n",[438,1745,1747],{"id":1746},"_14键盘输入cin","1.4键盘输入cin",[25,1749,1751],{"className":486,"code":1750,"language":488,"meta":30,"style":30},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[32,1752,1753,1766,1783,1794],{"__ignoreMap":30},[35,1754,1755,1757,1760,1762,1764],{"class":37,"line":38},[35,1756,502],{"class":495},[35,1758,1759],{"class":359}," a",[35,1761,544],{"class":495},[35,1763,687],{"class":58},[35,1765,1655],{"class":359},[35,1767,1768,1770,1772,1775,1777,1779,1781],{"class":37,"line":45},[35,1769,1730],{"class":359},[35,1771,1538],{"class":495},[35,1773,1774],{"class":306},"\"请给整型变量a赋值\"",[35,1776,1538],{"class":495},[35,1778,734],{"class":359},[35,1780,1538],{"class":495},[35,1782,1560],{"class":359},[35,1784,1785,1788,1791],{"class":37,"line":55},[35,1786,1787],{"class":359},"cin ",[35,1789,1790],{"class":495},">>",[35,1792,1793],{"class":359}," a;\n",[35,1795,1796,1798,1800,1803,1806,1808,1810],{"class":37,"line":65},[35,1797,1535],{"class":359},[35,1799,1538],{"class":495},[35,1801,1802],{"class":306}," \"整型变量a=\"",[35,1804,1805],{"class":495}," \u003C\u003C",[35,1807,734],{"class":359},[35,1809,1538],{"class":495},[35,1811,1560],{"class":359},[438,1813,1815],{"id":1814},"_15运算符","1.5运算符",[465,1817,1819],{"id":1818},"_151算术运算符","1.5.1算术运算符",[21,1821,1822,1826],{},[1823,1824],"img",{"alt":30,"src":1825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[14,1828,1829,1832,1835],{},[17,1830,1831],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[17,1833,1834],{},"两个小数不可以做取模运算",[17,1836,1837],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[465,1839,1841],{"id":1840},"_152赋值运算符","1.5.2赋值运算符",[21,1843,1844],{},[1823,1845],{"alt":30,"src":1846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[465,1848,1850],{"id":1849},"_153比较运算符","1.5.3比较运算符",[21,1852,1853],{},[1823,1854],{"alt":30,"src":1855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[465,1857,1859],{"id":1858},"_154逻辑运算符","1.5.4逻辑运算符",[21,1861,1862],{},[1823,1863],{"alt":30,"src":1864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[438,1866,1868],{"id":1867},"_16程序流程结构","1.6程序流程结构",[465,1870,1872],{"id":1871},"_161选择结构","1.6.1选择结构",[14,1874,1875],{},[17,1876,1877],{},"if语句\n单行、多行、多条件if语句",[25,1879,1881],{"className":486,"code":1880,"language":488,"meta":30,"style":30},"\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",[32,1882,1883,1888,1903,1908,1922,1927,1932,1941,1954,1958,1971,1975,1980,1984,1997,2001,2006,2026,2030,2043,2047,2075,2079,2095,2099,2103,2107,2120,2124],{"__ignoreMap":30},[35,1884,1885],{"class":37,"line":38},[35,1886,1887],{"class":41},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[35,1889,1890,1893,1896,1898,1901],{"class":37,"line":45},[35,1891,1892],{"class":495},"if",[35,1894,1895],{"class":359},"(score",[35,1897,1454],{"class":495},[35,1899,1900],{"class":58},"600",[35,1902,505],{"class":359},[35,1904,1905],{"class":37,"line":55},[35,1906,1907],{"class":359},"{\n",[35,1909,1910,1913,1915,1918,1920],{"class":37,"line":65},[35,1911,1912],{"class":359},"    cout",[35,1914,1538],{"class":495},[35,1916,1917],{"class":306},"'这是单行if语句'",[35,1919,1538],{"class":495},[35,1921,1560],{"class":359},[35,1923,1924],{"class":37,"line":74},[35,1925,1926],{"class":359},"}\n",[35,1928,1929],{"class":37,"line":83},[35,1930,1931],{"class":41},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[35,1933,1934,1936,1938],{"class":37,"line":92},[35,1935,1787],{"class":359},[35,1937,1790],{"class":495},[35,1939,1940],{"class":359}," score\n",[35,1942,1943,1945,1947,1950,1952],{"class":37,"line":101},[35,1944,1892],{"class":495},[35,1946,1895],{"class":359},[35,1948,1949],{"class":495},"\u003C=",[35,1951,1900],{"class":58},[35,1953,505],{"class":359},[35,1955,1956],{"class":37,"line":110},[35,1957,1907],{"class":359},[35,1959,1960,1962,1964,1967,1969],{"class":37,"line":119},[35,1961,1912],{"class":359},[35,1963,1790],{"class":495},[35,1965,1966],{"class":306},"\"小于等于600\"",[35,1968,1538],{"class":495},[35,1970,1560],{"class":359},[35,1972,1973],{"class":37,"line":128},[35,1974,1926],{"class":359},[35,1976,1977],{"class":37,"line":137},[35,1978,1979],{"class":495},"else\n",[35,1981,1982],{"class":37,"line":144},[35,1983,1907],{"class":359},[35,1985,1986,1988,1990,1993,1995],{"class":37,"line":150},[35,1987,1912],{"class":359},[35,1989,1790],{"class":495},[35,1991,1992],{"class":306},"\"大于600\"",[35,1994,1790],{"class":495},[35,1996,1560],{"class":359},[35,1998,1999],{"class":37,"line":159},[35,2000,1926],{"class":359},[35,2002,2003],{"class":37,"line":168},[35,2004,2005],{"class":41},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[35,2007,2008,2010,2013,2015,2017,2020,2022,2024],{"class":37,"line":177},[35,2009,1892],{"class":495},[35,2011,2012],{"class":359}," (",[35,2014,687],{"class":58},[35,2016,1404],{"class":495},[35,2018,2019],{"class":359},"num",[35,2021,1404],{"class":495},[35,2023,807],{"class":58},[35,2025,505],{"class":359},[35,2027,2028],{"class":37,"line":182},[35,2029,1907],{"class":359},[35,2031,2032,2034,2036,2039,2041],{"class":37,"line":188},[35,2033,1912],{"class":359},[35,2035,1538],{"class":495},[35,2037,2038],{"class":306},"\"小于100\"",[35,2040,1538],{"class":495},[35,2042,1560],{"class":359},[35,2044,2045],{"class":37,"line":197},[35,2046,1926],{"class":359},[35,2048,2049,2052,2055,2058,2061,2063,2066,2068,2070,2073],{"class":37,"line":206},[35,2050,2051],{"class":495},"else",[35,2053,2054],{"class":495}," if",[35,2056,2057],{"class":359}," (nmu",[35,2059,2060],{"class":495},">=",[35,2062,807],{"class":58},[35,2064,2065],{"class":495},"&&",[35,2067,2019],{"class":359},[35,2069,1404],{"class":495},[35,2071,2072],{"class":58},"200",[35,2074,505],{"class":359},[35,2076,2077],{"class":37,"line":215},[35,2078,1907],{"class":359},[35,2080,2081,2083,2085,2088,2090,2092],{"class":37,"line":224},[35,2082,1912],{"class":359},[35,2084,1538],{"class":495},[35,2086,2087],{"class":306},"\"不小于100且小于200\"",[35,2089,1538],{"class":495},[35,2091,1603],{"class":359},[35,2093,2094],{"class":41}," \u002F\u002F可以无限else if,python中是elif：\n",[35,2096,2097],{"class":37,"line":233},[35,2098,1926],{"class":359},[35,2100,2101],{"class":37,"line":238},[35,2102,1979],{"class":495},[35,2104,2105],{"class":37,"line":244},[35,2106,1907],{"class":359},[35,2108,2109,2111,2113,2116,2118],{"class":37,"line":253},[35,2110,1912],{"class":359},[35,2112,1538],{"class":495},[35,2114,2115],{"class":306},"\"不小于200\"",[35,2117,1538],{"class":495},[35,2119,1560],{"class":359},[35,2121,2122],{"class":37,"line":262},[35,2123,1926],{"class":359},[35,2125,2126],{"class":37,"line":271},[35,2127,2128],{"class":41},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[14,2130,2131],{"start":45},[17,2132,2133],{},"三目运算符",[25,2135,2137],{"className":486,"code":2136,"language":488,"meta":30,"style":30},"\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",[32,2138,2139,2144,2149,2175,2197,2214,2219,2242,2257],{"__ignoreMap":30},[35,2140,2141],{"class":37,"line":38},[35,2142,2143],{"class":41},"\u002F\u002F创建三个变量a,b,c\n",[35,2145,2146],{"class":37,"line":45},[35,2147,2148],{"class":41},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[35,2150,2151,2153,2155,2157,2159,2162,2164,2166,2169,2171,2173],{"class":37,"line":55},[35,2152,502],{"class":495},[35,2154,1759],{"class":359},[35,2156,544],{"class":495},[35,2158,1194],{"class":58},[35,2160,2161],{"class":359},",b",[35,2163,544],{"class":495},[35,2165,940],{"class":58},[35,2167,2168],{"class":359},",c",[35,2170,544],{"class":495},[35,2172,687],{"class":58},[35,2174,1655],{"class":359},[35,2176,2177,2179,2181,2184,2186,2188,2190,2192,2194],{"class":37,"line":65},[35,2178,784],{"class":359},[35,2180,544],{"class":495},[35,2182,2183],{"class":359},"(a",[35,2185,1454],{"class":495},[35,2187,759],{"class":359},[35,2189,1480],{"class":495},[35,2191,734],{"class":359},[35,2193,1353],{"class":495},[35,2195,2196],{"class":359},"b)\n",[35,2198,2199,2201,2203,2206,2208,2210,2212],{"class":37,"line":74},[35,2200,1730],{"class":359},[35,2202,1538],{"class":495},[35,2204,2205],{"class":306},"\"c=\"",[35,2207,1538],{"class":495},[35,2209,784],{"class":359},[35,2211,1538],{"class":495},[35,2213,1560],{"class":359},[35,2215,2216],{"class":37,"line":83},[35,2217,2218],{"class":41},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[35,2220,2221,2223,2225,2227,2229,2231,2233,2236,2238,2240],{"class":37,"line":92},[35,2222,2183],{"class":359},[35,2224,1454],{"class":495},[35,2226,759],{"class":359},[35,2228,1480],{"class":495},[35,2230,734],{"class":359},[35,2232,1353],{"class":495},[35,2234,2235],{"class":359},"b)",[35,2237,544],{"class":495},[35,2239,807],{"class":58},[35,2241,1655],{"class":359},[35,2243,2244,2246,2248,2250,2252,2254],{"class":37,"line":101},[35,2245,1730],{"class":359},[35,2247,1538],{"class":495},[35,2249,734],{"class":359},[35,2251,1538],{"class":495},[35,2253,1603],{"class":359},[35,2255,2256],{"class":41}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[35,2258,2259,2261,2263,2265,2267,2269],{"class":37,"line":110},[35,2260,1730],{"class":359},[35,2262,1538],{"class":495},[35,2264,759],{"class":359},[35,2266,1538],{"class":495},[35,2268,1603],{"class":359},[35,2270,2271],{"class":41}," \u002F\u002F10   a>b,b还是原值\n",[14,2273,2274],{"start":55},[17,2275,2276],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[25,2278,2280],{"className":486,"code":2279,"language":488,"meta":30,"style":30},"\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",[32,2281,2282,2287,2295,2308,2318,2322,2336,2349,2359,2367,2372,2397,2418,2440,2461,2483,2504,2524,2529],{"__ignoreMap":30},[35,2283,2284],{"class":37,"line":38},[35,2285,2286],{"class":41},"\u002F\u002F案例-电影打分\n",[35,2288,2289,2292],{"class":37,"line":45},[35,2290,2291],{"class":495},"#include",[35,2293,2294],{"class":306},"\u003Ciostream>\n",[35,2296,2297,2300,2303,2306],{"class":37,"line":55},[35,2298,2299],{"class":495},"using",[35,2301,2302],{"class":495}," namespace",[35,2304,2305],{"class":48}," std",[35,2307,1655],{"class":359},[35,2309,2310,2312,2315],{"class":37,"line":65},[35,2311,502],{"class":495},[35,2313,2314],{"class":48}," main",[35,2316,2317],{"class":359},"()\n",[35,2319,2320],{"class":37,"line":74},[35,2321,1907],{"class":359},[35,2323,2324,2327,2330,2332,2334],{"class":37,"line":83},[35,2325,2326],{"class":495},"    int",[35,2328,2329],{"class":359}," score",[35,2331,544],{"class":495},[35,2333,687],{"class":58},[35,2335,1655],{"class":359},[35,2337,2338,2340,2342,2345,2347],{"class":37,"line":92},[35,2339,1912],{"class":359},[35,2341,1538],{"class":495},[35,2343,2344],{"class":306},"\"电影打分：\"",[35,2346,1538],{"class":495},[35,2348,1560],{"class":359},[35,2350,2351,2354,2356],{"class":37,"line":101},[35,2352,2353],{"class":359},"    cin",[35,2355,1790],{"class":495},[35,2357,2358],{"class":359},"score;\n",[35,2360,2361,2364],{"class":37,"line":110},[35,2362,2363],{"class":495},"    switch",[35,2365,2366],{"class":359},"(score)\n",[35,2368,2369],{"class":37,"line":119},[35,2370,2371],{"class":359},"    {\n",[35,2373,2374,2377,2380,2383,2385,2388,2390,2392,2395],{"class":37,"line":128},[35,2375,2376],{"class":495},"        case",[35,2378,2379],{"class":58}," 10",[35,2381,2382],{"class":359},":cout",[35,2384,1538],{"class":495},[35,2386,2387],{"class":306},"\"经典\"",[35,2389,1538],{"class":495},[35,2391,1603],{"class":359},[35,2393,2394],{"class":495},"break",[35,2396,1655],{"class":359},[35,2398,2399,2401,2404,2406,2408,2410,2412,2414,2416],{"class":37,"line":137},[35,2400,2376],{"class":495},[35,2402,2403],{"class":58}," 9",[35,2405,2382],{"class":359},[35,2407,1538],{"class":495},[35,2409,2387],{"class":306},[35,2411,1538],{"class":495},[35,2413,1603],{"class":359},[35,2415,2394],{"class":495},[35,2417,1655],{"class":359},[35,2419,2420,2422,2425,2427,2429,2432,2434,2436,2438],{"class":37,"line":144},[35,2421,2376],{"class":495},[35,2423,2424],{"class":58}," 8",[35,2426,2382],{"class":359},[35,2428,1538],{"class":495},[35,2430,2431],{"class":306},"\"非常好\"",[35,2433,1538],{"class":495},[35,2435,1603],{"class":359},[35,2437,2394],{"class":495},[35,2439,1655],{"class":359},[35,2441,2442,2444,2447,2449,2451,2453,2455,2457,2459],{"class":37,"line":150},[35,2443,2376],{"class":495},[35,2445,2446],{"class":58}," 7",[35,2448,2382],{"class":359},[35,2450,1538],{"class":495},[35,2452,2431],{"class":306},[35,2454,1538],{"class":495},[35,2456,1603],{"class":359},[35,2458,2394],{"class":495},[35,2460,1655],{"class":359},[35,2462,2463,2465,2468,2470,2472,2475,2477,2479,2481],{"class":37,"line":159},[35,2464,2376],{"class":495},[35,2466,2467],{"class":58}," 6",[35,2469,2382],{"class":359},[35,2471,1538],{"class":495},[35,2473,2474],{"class":306},"\"一般\"",[35,2476,1538],{"class":495},[35,2478,1603],{"class":359},[35,2480,2394],{"class":495},[35,2482,1655],{"class":359},[35,2484,2485,2487,2490,2492,2494,2496,2498,2500,2502],{"class":37,"line":168},[35,2486,2376],{"class":495},[35,2488,2489],{"class":58}," 5",[35,2491,2382],{"class":359},[35,2493,1538],{"class":495},[35,2495,2474],{"class":306},[35,2497,1538],{"class":495},[35,2499,1603],{"class":359},[35,2501,2394],{"class":495},[35,2503,1655],{"class":359},[35,2505,2506,2509,2511,2513,2516,2518,2520,2522],{"class":37,"line":177},[35,2507,2508],{"class":495},"        default",[35,2510,2382],{"class":359},[35,2512,1538],{"class":495},[35,2514,2515],{"class":306},"\"烂片\"",[35,2517,1538],{"class":495},[35,2519,1603],{"class":359},[35,2521,2394],{"class":495},[35,2523,1655],{"class":359},[35,2525,2526],{"class":37,"line":182},[35,2527,2528],{"class":359},"    }\n",[35,2530,2531],{"class":37,"line":188},[35,2532,1926],{"class":359},[21,2534,2535],{},"if和switch区别：",[1501,2537,2538,2541],{},[17,2539,2540],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[17,2542,2543],{},"switch优点：结构清晰，执行效率高",[465,2545,2547],{"id":2546},"_162循环结构","1.6.2循环结构",[14,2549,2550],{},[17,2551,2552],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[25,2554,2556],{"className":486,"code":2555,"language":488,"meta":30,"style":30},"\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",[32,2557,2558,2563,2571,2575,2588,2602,2606,2626,2636,2640,2652],{"__ignoreMap":30},[35,2559,2560],{"class":37,"line":38},[35,2561,2562],{"class":41},"\u002F\u002F打印0-9数字\n",[35,2564,2565,2567,2569],{"class":37,"line":45},[35,2566,502],{"class":495},[35,2568,2314],{"class":48},[35,2570,2317],{"class":359},[35,2572,2573],{"class":37,"line":55},[35,2574,1907],{"class":359},[35,2576,2577,2579,2582,2584,2586],{"class":37,"line":65},[35,2578,2326],{"class":495},[35,2580,2581],{"class":359}," num",[35,2583,544],{"class":495},[35,2585,687],{"class":58},[35,2587,1655],{"class":359},[35,2589,2590,2593,2596,2598,2600],{"class":37,"line":74},[35,2591,2592],{"class":495},"    while",[35,2594,2595],{"class":359},"(num",[35,2597,1404],{"class":495},[35,2599,940],{"class":58},[35,2601,505],{"class":359},[35,2603,2604],{"class":37,"line":83},[35,2605,2371],{"class":359},[35,2607,2608,2611,2614,2616,2618,2620,2623],{"class":37,"line":92},[35,2609,2610],{"class":48},"       std",[35,2612,2613],{"class":359},"::cout",[35,2615,1538],{"class":495},[35,2617,2019],{"class":359},[35,2619,1538],{"class":495},[35,2621,2622],{"class":48},"std",[35,2624,2625],{"class":359},"::endl;\n",[35,2627,2628,2631,2634],{"class":37,"line":101},[35,2629,2630],{"class":359},"        num",[35,2632,2633],{"class":495},"++",[35,2635,1655],{"class":359},[35,2637,2638],{"class":37,"line":110},[35,2639,2528],{"class":359},[35,2641,2642,2645,2647,2650],{"class":37,"line":119},[35,2643,2644],{"class":48},"    system",[35,2646,499],{"class":359},[35,2648,2649],{"class":306},"\"pause\"",[35,2651,505],{"class":359},[35,2653,2654],{"class":37,"line":128},[35,2655,1926],{"class":359},[21,2657,2658],{},"注意：写好循环条件，避免死循环情况",[25,2660,2662],{"className":486,"code":2661,"language":488,"meta":30,"style":30},"\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",[32,2663,2664,2669,2676,2683,2693,2701,2705,2710,2737,2741,2746,2754,2781,2786,2791,2804,2814,2818,2828,2833,2846,2851,2865,2870,2885,2889,2902,2906,2911,2915,2928,2935,2939,2944,2949,2953],{"__ignoreMap":30},[35,2665,2666],{"class":37,"line":38},[35,2667,2668],{"class":41},"\u002F\u002F循环结构-猜数字\n",[35,2670,2671,2673],{"class":37,"line":45},[35,2672,2291],{"class":495},[35,2674,2675],{"class":306}," \u003Ciostream>\n",[35,2677,2678,2680],{"class":37,"line":55},[35,2679,2291],{"class":495},[35,2681,2682],{"class":306}," \u003Cctime>\n",[35,2684,2685,2687,2689,2691],{"class":37,"line":65},[35,2686,2299],{"class":495},[35,2688,2302],{"class":495},[35,2690,2305],{"class":48},[35,2692,1655],{"class":359},[35,2694,2695,2697,2699],{"class":37,"line":74},[35,2696,502],{"class":495},[35,2698,2314],{"class":48},[35,2700,2317],{"class":359},[35,2702,2703],{"class":37,"line":83},[35,2704,1907],{"class":359},[35,2706,2707],{"class":37,"line":92},[35,2708,2709],{"class":41},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[35,2711,2712,2715,2718,2721,2724,2726,2729,2731,2734],{"class":37,"line":101},[35,2713,2714],{"class":48},"    srand",[35,2716,2717],{"class":359},"((",[35,2719,2720],{"class":495},"unsigned",[35,2722,2723],{"class":495}," int",[35,2725,923],{"class":359},[35,2727,2728],{"class":48},"time",[35,2730,499],{"class":359},[35,2732,2733],{"class":58},"NULL",[35,2735,2736],{"class":359},"));\n",[35,2738,2739],{"class":37,"line":110},[35,2740,141],{"emptyLinePlaceholder":140},[35,2742,2743],{"class":37,"line":119},[35,2744,2745],{"class":41},"    \u002F\u002F1.系统生成随机数\n",[35,2747,2748,2751],{"class":37,"line":128},[35,2749,2750],{"class":41},"    \u002F\u002Frand()%100",[35,2752,2753],{"class":41}," \u002F\u002F生成0-99的随机数\n",[35,2755,2756,2758,2760,2762,2765,2768,2770,2772,2774,2776,2778],{"class":37,"line":137},[35,2757,2326],{"class":495},[35,2759,2581],{"class":359},[35,2761,544],{"class":495},[35,2763,2764],{"class":48},"rand",[35,2766,2767],{"class":359},"()",[35,2769,823],{"class":495},[35,2771,807],{"class":58},[35,2773,975],{"class":495},[35,2775,713],{"class":58},[35,2777,553],{"class":359},[35,2779,2780],{"class":41}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[35,2782,2783],{"class":37,"line":144},[35,2784,2785],{"class":41},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[35,2787,2788],{"class":37,"line":150},[35,2789,2790],{"class":41},"    \u002F\u002F2.玩家猜测\n",[35,2792,2793,2795,2798,2800,2802],{"class":37,"line":159},[35,2794,2326],{"class":495},[35,2796,2797],{"class":359}," val",[35,2799,544],{"class":495},[35,2801,687],{"class":58},[35,2803,1655],{"class":359},[35,2805,2806,2808,2810,2812],{"class":37,"line":168},[35,2807,2592],{"class":495},[35,2809,2012],{"class":359},[35,2811,713],{"class":58},[35,2813,505],{"class":359},[35,2815,2816],{"class":37,"line":177},[35,2817,2371],{"class":359},[35,2819,2820,2823,2825],{"class":37,"line":182},[35,2821,2822],{"class":359},"        cin",[35,2824,1790],{"class":495},[35,2826,2827],{"class":359},"val;\n",[35,2829,2830],{"class":37,"line":188},[35,2831,2832],{"class":41},"        \u002F\u002F3.判断玩家猜测\n",[35,2834,2835,2838,2841,2843],{"class":37,"line":197},[35,2836,2837],{"class":495},"        if",[35,2839,2840],{"class":359},"(val",[35,2842,1404],{"class":495},[35,2844,2845],{"class":359},"num) \n",[35,2847,2848],{"class":37,"line":206},[35,2849,2850],{"class":359},"        {\n",[35,2852,2853,2856,2858,2861,2863],{"class":37,"line":215},[35,2854,2855],{"class":359},"            cout",[35,2857,1538],{"class":495},[35,2859,2860],{"class":306},"\"猜小了！\"",[35,2862,1538],{"class":495},[35,2864,1560],{"class":359},[35,2866,2867],{"class":37,"line":224},[35,2868,2869],{"class":359},"        }\n",[35,2871,2872,2875,2877,2880,2882],{"class":37,"line":233},[35,2873,2874],{"class":495},"        else",[35,2876,2054],{"class":495},[35,2878,2879],{"class":359}," (val",[35,2881,1454],{"class":495},[35,2883,2884],{"class":359},"num)\n",[35,2886,2887],{"class":37,"line":238},[35,2888,2850],{"class":359},[35,2890,2891,2893,2895,2898,2900],{"class":37,"line":244},[35,2892,2855],{"class":359},[35,2894,1538],{"class":495},[35,2896,2897],{"class":306},"\"猜大了！\"",[35,2899,1538],{"class":495},[35,2901,1560],{"class":359},[35,2903,2904],{"class":37,"line":253},[35,2905,2869],{"class":359},[35,2907,2908],{"class":37,"line":262},[35,2909,2910],{"class":495},"        else\n",[35,2912,2913],{"class":37,"line":271},[35,2914,2850],{"class":359},[35,2916,2917,2919,2921,2924,2926],{"class":37,"line":280},[35,2918,2855],{"class":359},[35,2920,1538],{"class":495},[35,2922,2923],{"class":306},"\"猜对了！\"",[35,2925,1538],{"class":495},[35,2927,1560],{"class":359},[35,2929,2930,2933],{"class":37,"line":289},[35,2931,2932],{"class":495},"            break",[35,2934,1655],{"class":359},[35,2936,2937],{"class":37,"line":294},[35,2938,2869],{"class":359},[35,2940,2941],{"class":37,"line":300},[35,2942,2943],{"class":41},"        \u002F\u002F猜对 退出游戏\n",[35,2945,2946],{"class":37,"line":313},[35,2947,2948],{"class":41},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[35,2950,2951],{"class":37,"line":324},[35,2952,2528],{"class":359},[35,2954,2956],{"class":37,"line":2955},36,[35,2957,1926],{"class":359},[14,2959,2960],{"start":45},[17,2961,2962,2963,2966],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[645,2964,2965],{},"do...while会先执行一次循环语句","，在判断循环语句",[25,2968,2970],{"className":486,"code":2969,"language":488,"meta":30,"style":30},"\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",[32,2971,2972,2977,2985,2989,3001,3009,3013,3030,3037,3041,3054,3064],{"__ignoreMap":30},[35,2973,2974],{"class":37,"line":38},[35,2975,2976],{"class":41},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[35,2978,2979,2981,2983],{"class":37,"line":45},[35,2980,502],{"class":495},[35,2982,2314],{"class":48},[35,2984,2317],{"class":359},[35,2986,2987],{"class":37,"line":55},[35,2988,1907],{"class":359},[35,2990,2991,2993,2995,2997,2999],{"class":37,"line":65},[35,2992,2326],{"class":495},[35,2994,2581],{"class":359},[35,2996,544],{"class":495},[35,2998,687],{"class":58},[35,3000,1655],{"class":359},[35,3002,3003,3006],{"class":37,"line":74},[35,3004,3005],{"class":495},"    do",[35,3007,3008],{"class":359}," \n",[35,3010,3011],{"class":37,"line":83},[35,3012,2371],{"class":359},[35,3014,3015,3018,3020,3022,3024,3026,3028],{"class":37,"line":92},[35,3016,3017],{"class":48},"        std",[35,3019,2613],{"class":359},[35,3021,1538],{"class":495},[35,3023,2019],{"class":359},[35,3025,1538],{"class":495},[35,3027,2622],{"class":48},[35,3029,2625],{"class":359},[35,3031,3032,3034],{"class":37,"line":101},[35,3033,2630],{"class":359},[35,3035,3036],{"class":495},"++\n",[35,3038,3039],{"class":37,"line":110},[35,3040,2528],{"class":359},[35,3042,3043,3045,3047,3049,3051],{"class":37,"line":119},[35,3044,2592],{"class":495},[35,3046,2595],{"class":359},[35,3048,1404],{"class":495},[35,3050,940],{"class":58},[35,3052,3053],{"class":359},");\n",[35,3055,3056,3058,3060,3062],{"class":37,"line":128},[35,3057,2644],{"class":48},[35,3059,499],{"class":359},[35,3061,2649],{"class":306},[35,3063,3053],{"class":359},[35,3065,3066],{"class":37,"line":137},[35,3067,1926],{"class":359},[21,3069,3070],{},"案例-水仙花数",[21,3072,3073],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[21,3075,3076],{},"例如：1^3+5^3+3^3=153",[21,3078,3079],{},"请用do...while语句，求出所有3位数的水仙花数",[25,3081,3083],{"className":486,"code":3082,"language":488,"meta":30,"style":30},"#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",[32,3084,3085,3091,3101,3109,3113,3118,3130,3136,3140,3145,3161,3177,3193,3208,3227,3242,3290,3294,3306,3310,3318,3322,3336],{"__ignoreMap":30},[35,3086,3087,3089],{"class":37,"line":38},[35,3088,2291],{"class":495},[35,3090,2675],{"class":306},[35,3092,3093,3095,3097,3099],{"class":37,"line":45},[35,3094,2299],{"class":495},[35,3096,2302],{"class":495},[35,3098,2305],{"class":48},[35,3100,1655],{"class":359},[35,3102,3103,3105,3107],{"class":37,"line":55},[35,3104,502],{"class":495},[35,3106,2314],{"class":48},[35,3108,2317],{"class":359},[35,3110,3111],{"class":37,"line":65},[35,3112,1907],{"class":359},[35,3114,3115],{"class":37,"line":74},[35,3116,3117],{"class":41},"    \u002F\u002F1.先打印所有三位数字\n",[35,3119,3120,3122,3124,3126,3128],{"class":37,"line":83},[35,3121,2326],{"class":495},[35,3123,2581],{"class":359},[35,3125,544],{"class":495},[35,3127,807],{"class":58},[35,3129,1655],{"class":359},[35,3131,3132,3134],{"class":37,"line":92},[35,3133,3005],{"class":495},[35,3135,3008],{"class":359},[35,3137,3138],{"class":37,"line":101},[35,3139,2371],{"class":359},[35,3141,3142],{"class":37,"line":110},[35,3143,3144],{"class":41},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[35,3146,3147,3150,3152,3154,3156,3158],{"class":37,"line":119},[35,3148,3149],{"class":495},"        int",[35,3151,1759],{"class":359},[35,3153,544],{"class":495},[35,3155,687],{"class":58},[35,3157,553],{"class":359},[35,3159,3160],{"class":41}," \u002F\u002F个位\n",[35,3162,3163,3165,3168,3170,3172,3174],{"class":37,"line":128},[35,3164,3149],{"class":495},[35,3166,3167],{"class":359}," b",[35,3169,544],{"class":495},[35,3171,687],{"class":58},[35,3173,553],{"class":359},[35,3175,3176],{"class":41}," \u002F\u002F十位\n",[35,3178,3179,3181,3184,3186,3188,3190],{"class":37,"line":137},[35,3180,3149],{"class":495},[35,3182,3183],{"class":359}," c",[35,3185,544],{"class":495},[35,3187,687],{"class":58},[35,3189,553],{"class":359},[35,3191,3192],{"class":41}," \u002F\u002F百位\n",[35,3194,3195,3198,3200,3202,3204,3206],{"class":37,"line":144},[35,3196,3197],{"class":359},"        a",[35,3199,544],{"class":495},[35,3201,2019],{"class":359},[35,3203,823],{"class":495},[35,3205,940],{"class":58},[35,3207,1655],{"class":359},[35,3209,3210,3213,3215,3217,3219,3221,3223,3225],{"class":37,"line":150},[35,3211,3212],{"class":359},"        b",[35,3214,544],{"class":495},[35,3216,2019],{"class":359},[35,3218,1078],{"class":495},[35,3220,940],{"class":58},[35,3222,823],{"class":495},[35,3224,940],{"class":58},[35,3226,1655],{"class":359},[35,3228,3229,3232,3234,3236,3238,3240],{"class":37,"line":159},[35,3230,3231],{"class":359},"        c",[35,3233,544],{"class":495},[35,3235,2019],{"class":359},[35,3237,1078],{"class":495},[35,3239,807],{"class":58},[35,3241,1655],{"class":359},[35,3243,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3281,3284,3287],{"class":37,"line":168},[35,3245,2837],{"class":495},[35,3247,2183],{"class":359},[35,3249,949],{"class":495},[35,3251,734],{"class":359},[35,3253,949],{"class":495},[35,3255,734],{"class":359},[35,3257,975],{"class":495},[35,3259,759],{"class":359},[35,3261,949],{"class":495},[35,3263,759],{"class":359},[35,3265,949],{"class":495},[35,3267,759],{"class":359},[35,3269,975],{"class":495},[35,3271,784],{"class":359},[35,3273,949],{"class":495},[35,3275,784],{"class":359},[35,3277,949],{"class":495},[35,3279,3280],{"class":359},"c ",[35,3282,3283],{"class":495},"==",[35,3285,3286],{"class":359}," num)",[35,3288,3289],{"class":41}," \u002F\u002F如果是水仙花数，才打印\n",[35,3291,3292],{"class":37,"line":177},[35,3293,2850],{"class":359},[35,3295,3296,3298,3300,3302,3304],{"class":37,"line":182},[35,3297,2855],{"class":359},[35,3299,1538],{"class":495},[35,3301,2019],{"class":359},[35,3303,1538],{"class":495},[35,3305,1560],{"class":359},[35,3307,3308],{"class":37,"line":188},[35,3309,2869],{"class":359},[35,3311,3312,3314,3316],{"class":37,"line":197},[35,3313,2630],{"class":359},[35,3315,2633],{"class":495},[35,3317,1655],{"class":359},[35,3319,3320],{"class":37,"line":206},[35,3321,2528],{"class":359},[35,3323,3324,3326,3329,3331,3334],{"class":37,"line":215},[35,3325,2592],{"class":495},[35,3327,3328],{"class":359}," (num ",[35,3330,1404],{"class":495},[35,3332,3333],{"class":58}," 1000",[35,3335,3053],{"class":359},[35,3337,3338],{"class":37,"line":224},[35,3339,1926],{"class":359},[14,3341,3342],{"start":55},[17,3343,3344],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[25,3346,3348],{"className":486,"code":3347,"language":488,"meta":30,"style":30},"\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",[32,3349,3350,3355,3384,3388,3400,3404,3409,3420,3427,3431,3445,3449,3456,3460,3472,3481],{"__ignoreMap":30},[35,3351,3352],{"class":37,"line":38},[35,3353,3354],{"class":41},"\u002F\u002F从数字0-9打印\n",[35,3356,3357,3360,3362,3364,3367,3369,3371,3374,3376,3378,3380,3382],{"class":37,"line":45},[35,3358,3359],{"class":495},"for",[35,3361,499],{"class":359},[35,3363,502],{"class":495},[35,3365,3366],{"class":359}," i",[35,3368,544],{"class":495},[35,3370,687],{"class":58},[35,3372,3373],{"class":359},";i",[35,3375,1404],{"class":495},[35,3377,940],{"class":58},[35,3379,3373],{"class":359},[35,3381,2633],{"class":495},[35,3383,505],{"class":359},[35,3385,3386],{"class":37,"line":55},[35,3387,1907],{"class":359},[35,3389,3390,3392,3394,3396,3398],{"class":37,"line":65},[35,3391,1912],{"class":359},[35,3393,1538],{"class":495},[35,3395,935],{"class":359},[35,3397,1538],{"class":495},[35,3399,1560],{"class":359},[35,3401,3402],{"class":37,"line":74},[35,3403,1926],{"class":359},[35,3405,3406],{"class":37,"line":83},[35,3407,3408],{"class":41},"\u002F\u002F上式可以进行拆分\n",[35,3410,3411,3413,3415,3417],{"class":37,"line":92},[35,3412,502],{"class":495},[35,3414,3366],{"class":359},[35,3416,544],{"class":495},[35,3418,3419],{"class":58},"0\n",[35,3421,3422,3424],{"class":37,"line":101},[35,3423,3359],{"class":495},[35,3425,3426],{"class":359},"(;;;)\n",[35,3428,3429],{"class":37,"line":110},[35,3430,1907],{"class":359},[35,3432,3433,3436,3439,3441,3443],{"class":37,"line":119},[35,3434,3435],{"class":495},"    if",[35,3437,3438],{"class":359},"(i",[35,3440,2060],{"class":495},[35,3442,940],{"class":58},[35,3444,505],{"class":359},[35,3446,3447],{"class":37,"line":128},[35,3448,2371],{"class":359},[35,3450,3451,3454],{"class":37,"line":137},[35,3452,3453],{"class":495},"        break",[35,3455,1655],{"class":359},[35,3457,3458],{"class":37,"line":144},[35,3459,2528],{"class":359},[35,3461,3462,3464,3466,3468,3470],{"class":37,"line":150},[35,3463,1912],{"class":359},[35,3465,1538],{"class":495},[35,3467,935],{"class":359},[35,3469,1538],{"class":495},[35,3471,1560],{"class":359},[35,3473,3474,3477,3479],{"class":37,"line":159},[35,3475,3476],{"class":359},"    i",[35,3478,2633],{"class":495},[35,3480,1655],{"class":359},[35,3482,3483],{"class":37,"line":168},[35,3484,1926],{"class":359},[21,3486,3487],{},"小练习",[25,3489,3491],{"className":486,"code":3490,"language":488,"meta":30,"style":30},"#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",[32,3492,3493,3499,3509,3517,3521,3526,3531,3559,3563,3568,3573,3614,3618,3631,3635,3639,3643,3655,3659,3663],{"__ignoreMap":30},[35,3494,3495,3497],{"class":37,"line":38},[35,3496,2291],{"class":495},[35,3498,2294],{"class":306},[35,3500,3501,3503,3505,3507],{"class":37,"line":45},[35,3502,2299],{"class":495},[35,3504,2302],{"class":495},[35,3506,2305],{"class":48},[35,3508,1655],{"class":359},[35,3510,3511,3513,3515],{"class":37,"line":55},[35,3512,502],{"class":495},[35,3514,2314],{"class":48},[35,3516,2317],{"class":359},[35,3518,3519],{"class":37,"line":65},[35,3520,1907],{"class":359},[35,3522,3523],{"class":37,"line":74},[35,3524,3525],{"class":41},"    \u002F\u002F敲桌子案例\n",[35,3527,3528],{"class":37,"line":83},[35,3529,3530],{"class":41},"    \u002F\u002F1.先输出1-100的数字\n",[35,3532,3533,3536,3538,3540,3542,3544,3546,3549,3551,3553,3555,3557],{"class":37,"line":92},[35,3534,3535],{"class":495},"    for",[35,3537,499],{"class":359},[35,3539,502],{"class":495},[35,3541,3366],{"class":359},[35,3543,544],{"class":495},[35,3545,713],{"class":58},[35,3547,3548],{"class":359},"; i",[35,3550,1949],{"class":495},[35,3552,807],{"class":58},[35,3554,3548],{"class":359},[35,3556,2633],{"class":495},[35,3558,505],{"class":359},[35,3560,3561],{"class":37,"line":101},[35,3562,2371],{"class":359},[35,3564,3565],{"class":37,"line":110},[35,3566,3567],{"class":41},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[35,3569,3570],{"class":37,"line":119},[35,3571,3572],{"class":41},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[35,3574,3575,3577,3579,3581,3583,3585,3587,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612],{"class":37,"line":128},[35,3576,2837],{"class":495},[35,3578,3438],{"class":359},[35,3580,823],{"class":495},[35,3582,863],{"class":58},[35,3584,3283],{"class":495},[35,3586,687],{"class":58},[35,3588,3589],{"class":495}," ||",[35,3591,3366],{"class":359},[35,3593,823],{"class":495},[35,3595,940],{"class":58},[35,3597,3283],{"class":495},[35,3599,863],{"class":58},[35,3601,3589],{"class":495},[35,3603,3366],{"class":359},[35,3605,1078],{"class":495},[35,3607,940],{"class":58},[35,3609,3283],{"class":495},[35,3611,863],{"class":58},[35,3613,505],{"class":359},[35,3615,3616],{"class":37,"line":137},[35,3617,2850],{"class":359},[35,3619,3620,3622,3624,3627,3629],{"class":37,"line":144},[35,3621,2855],{"class":359},[35,3623,1538],{"class":495},[35,3625,3626],{"class":306},"\"敲桌子\"",[35,3628,1538],{"class":495},[35,3630,1560],{"class":359},[35,3632,3633],{"class":37,"line":150},[35,3634,2869],{"class":359},[35,3636,3637],{"class":37,"line":159},[35,3638,2910],{"class":495},[35,3640,3641],{"class":37,"line":168},[35,3642,2850],{"class":359},[35,3644,3645,3647,3649,3651,3653],{"class":37,"line":177},[35,3646,2855],{"class":359},[35,3648,1538],{"class":495},[35,3650,935],{"class":359},[35,3652,1538],{"class":495},[35,3654,1560],{"class":359},[35,3656,3657],{"class":37,"line":182},[35,3658,2869],{"class":359},[35,3660,3661],{"class":37,"line":188},[35,3662,2528],{"class":359},[35,3664,3665],{"class":37,"line":197},[35,3666,1926],{"class":359},[21,3668,3669],{},"嵌套实现星图",[25,3671,3673],{"className":486,"code":3672,"language":488,"meta":30,"style":30},"#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",[32,3674,3675,3681,3691,3699,3703,3729,3733,3762,3766,3777,3781,3790,3794],{"__ignoreMap":30},[35,3676,3677,3679],{"class":37,"line":38},[35,3678,2291],{"class":495},[35,3680,2294],{"class":306},[35,3682,3683,3685,3687,3689],{"class":37,"line":45},[35,3684,2299],{"class":495},[35,3686,2302],{"class":495},[35,3688,2305],{"class":48},[35,3690,1655],{"class":359},[35,3692,3693,3695,3697],{"class":37,"line":55},[35,3694,502],{"class":495},[35,3696,2314],{"class":48},[35,3698,2317],{"class":359},[35,3700,3701],{"class":37,"line":65},[35,3702,1907],{"class":359},[35,3704,3705,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727],{"class":37,"line":74},[35,3706,3535],{"class":495},[35,3708,2012],{"class":359},[35,3710,502],{"class":495},[35,3712,3366],{"class":359},[35,3714,544],{"class":495},[35,3716,687],{"class":58},[35,3718,3373],{"class":359},[35,3720,1404],{"class":495},[35,3722,940],{"class":58},[35,3724,3373],{"class":359},[35,3726,2633],{"class":495},[35,3728,505],{"class":359},[35,3730,3731],{"class":37,"line":83},[35,3732,2371],{"class":359},[35,3734,3735,3738,3740,3742,3745,3747,3749,3752,3754,3756,3758,3760],{"class":37,"line":92},[35,3736,3737],{"class":495},"        for",[35,3739,2012],{"class":359},[35,3741,502],{"class":495},[35,3743,3744],{"class":359}," j",[35,3746,544],{"class":495},[35,3748,687],{"class":58},[35,3750,3751],{"class":359},";j",[35,3753,1404],{"class":495},[35,3755,940],{"class":58},[35,3757,3751],{"class":359},[35,3759,2633],{"class":495},[35,3761,505],{"class":359},[35,3763,3764],{"class":37,"line":101},[35,3765,2850],{"class":359},[35,3767,3768,3770,3772,3775],{"class":37,"line":110},[35,3769,2855],{"class":359},[35,3771,1538],{"class":495},[35,3773,3774],{"class":306},"\"*\"",[35,3776,1655],{"class":359},[35,3778,3779],{"class":37,"line":119},[35,3780,2869],{"class":359},[35,3782,3783,3786,3788],{"class":37,"line":128},[35,3784,3785],{"class":359},"        cout",[35,3787,1538],{"class":495},[35,3789,1560],{"class":359},[35,3791,3792],{"class":37,"line":137},[35,3793,2528],{"class":359},[35,3795,3796],{"class":37,"line":144},[35,3797,1926],{"class":359},[21,3799,3800],{},"乘法口诀表",[25,3802,3804],{"className":486,"code":3803,"language":488,"meta":30,"style":30},"#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",[32,3805,3806,3812,3822,3830,3834,3860,3864,3889,3893,3933,3937,3945,3949],{"__ignoreMap":30},[35,3807,3808,3810],{"class":37,"line":38},[35,3809,2291],{"class":495},[35,3811,2675],{"class":306},[35,3813,3814,3816,3818,3820],{"class":37,"line":45},[35,3815,2299],{"class":495},[35,3817,2302],{"class":495},[35,3819,2305],{"class":48},[35,3821,1655],{"class":359},[35,3823,3824,3826,3828],{"class":37,"line":55},[35,3825,502],{"class":495},[35,3827,2314],{"class":48},[35,3829,2317],{"class":359},[35,3831,3832],{"class":37,"line":65},[35,3833,1907],{"class":359},[35,3835,3836,3838,3840,3842,3844,3846,3848,3850,3852,3854,3856,3858],{"class":37,"line":74},[35,3837,3535],{"class":495},[35,3839,499],{"class":359},[35,3841,502],{"class":495},[35,3843,3366],{"class":359},[35,3845,544],{"class":495},[35,3847,713],{"class":58},[35,3849,3373],{"class":359},[35,3851,1404],{"class":495},[35,3853,940],{"class":58},[35,3855,3373],{"class":359},[35,3857,2633],{"class":495},[35,3859,505],{"class":359},[35,3861,3862],{"class":37,"line":83},[35,3863,2371],{"class":359},[35,3865,3866,3868,3870,3872,3874,3876,3878,3880,3882,3885,3887],{"class":37,"line":92},[35,3867,3737],{"class":495},[35,3869,499],{"class":359},[35,3871,502],{"class":495},[35,3873,3744],{"class":359},[35,3875,544],{"class":495},[35,3877,713],{"class":58},[35,3879,3751],{"class":359},[35,3881,1949],{"class":495},[35,3883,3884],{"class":359},"i;j",[35,3886,2633],{"class":495},[35,3888,505],{"class":359},[35,3890,3891],{"class":37,"line":101},[35,3892,2850],{"class":359},[35,3894,3895,3897,3899,3901,3903,3905,3907,3909,3911,3914,3916,3918,3920,3922,3924,3927,3929,3931],{"class":37,"line":110},[35,3896,2855],{"class":359},[35,3898,1538],{"class":495},[35,3900,961],{"class":359},[35,3902,1538],{"class":495},[35,3904,3774],{"class":306},[35,3906,1538],{"class":495},[35,3908,935],{"class":359},[35,3910,1538],{"class":495},[35,3912,3913],{"class":306},"\"=\"",[35,3915,1538],{"class":495},[35,3917,935],{"class":359},[35,3919,949],{"class":495},[35,3921,961],{"class":359},[35,3923,1538],{"class":495},[35,3925,3926],{"class":306},"'",[35,3928,1595],{"class":58},[35,3930,3926],{"class":306},[35,3932,1655],{"class":359},[35,3934,3935],{"class":37,"line":119},[35,3936,2869],{"class":359},[35,3938,3939,3941,3943],{"class":37,"line":128},[35,3940,3785],{"class":359},[35,3942,1538],{"class":495},[35,3944,1560],{"class":359},[35,3946,3947],{"class":37,"line":137},[35,3948,2528],{"class":359},[35,3950,3951],{"class":37,"line":144},[35,3952,1926],{"class":359},[465,3954,3956],{"id":3955},"_163跳出语句","1.6.3跳出语句",[14,3958,3959],{},[17,3960,3961],{},"break语句\n作用：用于跳出选择结构或者循环结构",[21,3963,3964],{},"break使用时机：",[1501,3966,3967,3970,3973],{},[17,3968,3969],{},"出现在switch条件语句中，作用是终止case并跳出switch",[17,3971,3972],{},"出现在循环结构中，作用是跳出当前的循环结构",[17,3974,3975],{},"出现在嵌套循环中，跳出最近的内层循环语句",[14,3977,3978,3981],{"start":45},[17,3979,3980],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[17,3982,3983],{},"goto语句\n语法：goto 标记;",[21,3985,3986],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[25,3988,3990],{"className":486,"code":3989,"language":488,"meta":30,"style":30},"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",[32,3991,3992,4000,4004,4017,4027,4040,4053,4066,4074,4090],{"__ignoreMap":30},[35,3993,3994,3996,3998],{"class":37,"line":38},[35,3995,502],{"class":495},[35,3997,2314],{"class":48},[35,3999,2317],{"class":359},[35,4001,4002],{"class":37,"line":45},[35,4003,1907],{"class":359},[35,4005,4006,4008,4010,4013,4015],{"class":37,"line":55},[35,4007,1912],{"class":359},[35,4009,1538],{"class":495},[35,4011,4012],{"class":306},"\"1\"",[35,4014,1538],{"class":495},[35,4016,1560],{"class":359},[35,4018,4019,4022,4025],{"class":37,"line":65},[35,4020,4021],{"class":495},"    goto",[35,4023,4024],{"class":48}," FLAG",[35,4026,1655],{"class":359},[35,4028,4029,4031,4033,4036,4038],{"class":37,"line":74},[35,4030,1912],{"class":359},[35,4032,1538],{"class":495},[35,4034,4035],{"class":306},"\"2\"",[35,4037,1538],{"class":495},[35,4039,1560],{"class":359},[35,4041,4042,4044,4046,4049,4051],{"class":37,"line":83},[35,4043,1912],{"class":359},[35,4045,1538],{"class":495},[35,4047,4048],{"class":306},"\"3\"",[35,4050,1538],{"class":495},[35,4052,1560],{"class":359},[35,4054,4055,4057,4059,4062,4064],{"class":37,"line":92},[35,4056,1912],{"class":359},[35,4058,1538],{"class":495},[35,4060,4061],{"class":306},"\"4\"",[35,4063,1538],{"class":495},[35,4065,1560],{"class":359},[35,4067,4068,4071],{"class":37,"line":101},[35,4069,4070],{"class":48},"    FLAG",[35,4072,4073],{"class":359},":\n",[35,4075,4076,4078,4080,4083,4085,4087],{"class":37,"line":110},[35,4077,1912],{"class":359},[35,4079,1538],{"class":495},[35,4081,4082],{"class":306},"\"5\"",[35,4084,1538],{"class":495},[35,4086,1603],{"class":359},[35,4088,4089],{"class":41},"\u002F\u002F跳过了2,3,4,直接到5\n",[35,4091,4092],{"class":37,"line":119},[35,4093,1926],{"class":359},[438,4095,4097],{"id":4096},"_17数组","1.7数组",[465,4099,4101],{"id":4100},"_171一维数组","1.7.1一维数组",[14,4103,4104],{},[17,4105,4106],{},"一维数组定义方式",[633,4108,4109,4119],{},[636,4110,4111],{},[639,4112,4113,4116],{},[642,4114,4115],{},"方式",[642,4117,4118],{},"注意事项",[680,4120,4121,4135,4145],{},[639,4122,4123,4129],{},[685,4124,4125,4126,553],{},"数据类型 数组名",[35,4127,4128],{},"数组长度",[685,4130,4131,4132,4134],{},"这种方式是先定义再arr",[35,4133,935],{},"赋值",[639,4136,4137,4142],{},[685,4138,4125,4139,4141],{},[35,4140,4128],{},"={值1,值2....};",[685,4143,4144],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[639,4146,4147,4151],{},[685,4148,4125,4149,4141],{},[35,4150],{},[685,4152,4153,4154,4156],{},"int arr",[35,4155],{},";这是不正确的，按照这样的方式定义必须有初始长度",[14,4158,4159],{"start":45},[17,4160,4161],{},"一维数组数组名\n用途：",[1501,4163,4164],{},[17,4165,4166],{},"1.可以统计整个数组在内存中的长度：",[25,4168,4170],{"className":486,"code":4169,"language":488,"meta":30,"style":30},"sizeof(arr);\nsizeof(arr[0]);\n",[32,4171,4172,4179],{"__ignoreMap":30},[35,4173,4174,4176],{"class":37,"line":38},[35,4175,496],{"class":495},[35,4177,4178],{"class":359},"(arr);\n",[35,4180,4181,4183,4186,4188],{"class":37,"line":45},[35,4182,496],{"class":495},[35,4184,4185],{"class":359},"(arr[",[35,4187,687],{"class":58},[35,4189,4190],{"class":359},"]);\n",[1501,4192,4193],{},[17,4194,4195],{},"2.可以获取数组在内存中的首地址:",[25,4197,4199],{"className":486,"code":4198,"language":488,"meta":30,"style":30},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[32,4200,4201,4206,4219,4224],{"__ignoreMap":30},[35,4202,4203],{"class":37,"line":38},[35,4204,4205],{"class":41},"\u002F\u002F查看16进制的首地址\n",[35,4207,4208,4210,4212,4215,4217],{"class":37,"line":45},[35,4209,1730],{"class":359},[35,4211,1538],{"class":495},[35,4213,4214],{"class":359},"arr",[35,4216,1538],{"class":495},[35,4218,1560],{"class":359},[35,4220,4221],{"class":37,"line":55},[35,4222,4223],{"class":41},"\u002F\u002F看10进制数\n",[35,4225,4226,4228,4230,4232,4234,4236,4238,4241,4243,4245,4247],{"class":37,"line":65},[35,4227,1730],{"class":359},[35,4229,1538],{"class":495},[35,4231,499],{"class":359},[35,4233,502],{"class":495},[35,4235,923],{"class":359},[35,4237,847],{"class":495},[35,4239,4240],{"class":359},"arr[",[35,4242,687],{"class":58},[35,4244,1434],{"class":359},[35,4246,1538],{"class":495},[35,4248,1560],{"class":359},[21,4250,4251],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1501,4253,4254],{},[17,4255,4256],{},"1️⃣五只小猪称体重",[25,4258,4260],{"className":486,"code":4259,"language":488,"meta":30,"style":30},"#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",[32,4261,4262,4268,4278,4286,4290,4330,4343,4369,4373,4385,4389,4399,4403,4407,4420,4430],{"__ignoreMap":30},[35,4263,4264,4266],{"class":37,"line":38},[35,4265,2291],{"class":495},[35,4267,2294],{"class":306},[35,4269,4270,4272,4274,4276],{"class":37,"line":45},[35,4271,2299],{"class":495},[35,4273,2302],{"class":495},[35,4275,2305],{"class":48},[35,4277,1655],{"class":359},[35,4279,4280,4282,4284],{"class":37,"line":55},[35,4281,502],{"class":495},[35,4283,2314],{"class":48},[35,4285,2317],{"class":359},[35,4287,4288],{"class":37,"line":65},[35,4289,1907],{"class":359},[35,4291,4292,4294,4297,4299,4301,4303,4305,4308,4310,4313,4315,4317,4319,4322,4324,4327],{"class":37,"line":74},[35,4293,2326],{"class":495},[35,4295,4296],{"class":359}," arr[",[35,4298,372],{"class":58},[35,4300,1434],{"class":359},[35,4302,544],{"class":495},[35,4304,1390],{"class":359},[35,4306,4307],{"class":58},"300",[35,4309,872],{"class":359},[35,4311,4312],{"class":58},"350",[35,4314,872],{"class":359},[35,4316,2072],{"class":58},[35,4318,872],{"class":359},[35,4320,4321],{"class":58},"400",[35,4323,872],{"class":359},[35,4325,4326],{"class":58},"250",[35,4328,4329],{"class":359},"};\n",[35,4331,4332,4334,4337,4339,4341],{"class":37,"line":83},[35,4333,2326],{"class":495},[35,4335,4336],{"class":359}," tmp",[35,4338,544],{"class":495},[35,4340,687],{"class":58},[35,4342,1655],{"class":359},[35,4344,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367],{"class":37,"line":92},[35,4346,3535],{"class":495},[35,4348,2012],{"class":359},[35,4350,502],{"class":495},[35,4352,3366],{"class":359},[35,4354,544],{"class":495},[35,4356,687],{"class":58},[35,4358,3373],{"class":359},[35,4360,1404],{"class":495},[35,4362,372],{"class":58},[35,4364,3373],{"class":359},[35,4366,2633],{"class":495},[35,4368,505],{"class":359},[35,4370,4371],{"class":37,"line":101},[35,4372,2371],{"class":359},[35,4374,4375,4377,4380,4382],{"class":37,"line":110},[35,4376,2837],{"class":495},[35,4378,4379],{"class":359},"(tmp",[35,4381,1404],{"class":495},[35,4383,4384],{"class":359},"arr[i])\n",[35,4386,4387],{"class":37,"line":119},[35,4388,2850],{"class":359},[35,4390,4391,4394,4396],{"class":37,"line":128},[35,4392,4393],{"class":359},"            tmp",[35,4395,544],{"class":495},[35,4397,4398],{"class":359},"arr[i];\n",[35,4400,4401],{"class":37,"line":137},[35,4402,2869],{"class":359},[35,4404,4405],{"class":37,"line":144},[35,4406,2528],{"class":359},[35,4408,4409,4411,4413,4416,4418],{"class":37,"line":150},[35,4410,1912],{"class":359},[35,4412,1538],{"class":495},[35,4414,4415],{"class":359},"tmp",[35,4417,1538],{"class":495},[35,4419,1560],{"class":359},[35,4421,4422,4425,4428],{"class":37,"line":159},[35,4423,4424],{"class":495},"    return",[35,4426,4427],{"class":58}," 0",[35,4429,1655],{"class":359},[35,4431,4432],{"class":37,"line":168},[35,4433,1926],{"class":359},[1501,4435,4436],{},[17,4437,4438],{},"2️⃣数组元素逆置",[25,4440,4442],{"className":486,"code":4441,"language":488,"meta":30,"style":30},"\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",[32,4443,4444,4449,4455,4465,4473,4477,4512,4528,4560,4573,4578,4583,4595,4605,4615,4620,4629,4639,4644,4649,4676,4680,4696,4700,4711,4720],{"__ignoreMap":30},[35,4445,4446],{"class":37,"line":38},[35,4447,4448],{"class":41},"\u002F\u002F元素逆置\n",[35,4450,4451,4453],{"class":37,"line":45},[35,4452,2291],{"class":495},[35,4454,2294],{"class":306},[35,4456,4457,4459,4461,4463],{"class":37,"line":55},[35,4458,2299],{"class":495},[35,4460,2302],{"class":495},[35,4462,2305],{"class":48},[35,4464,1655],{"class":359},[35,4466,4467,4469,4471],{"class":37,"line":65},[35,4468,502],{"class":495},[35,4470,2314],{"class":48},[35,4472,2317],{"class":359},[35,4474,4475],{"class":37,"line":74},[35,4476,1907],{"class":359},[35,4478,4479,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510],{"class":37,"line":83},[35,4480,4481],{"class":495},"   int",[35,4483,4296],{"class":359},[35,4485,372],{"class":58},[35,4487,1434],{"class":359},[35,4489,544],{"class":495},[35,4491,1390],{"class":359},[35,4493,713],{"class":58},[35,4495,872],{"class":359},[35,4497,574],{"class":58},[35,4499,872],{"class":359},[35,4501,568],{"class":58},[35,4503,872],{"class":359},[35,4505,789],{"class":58},[35,4507,872],{"class":359},[35,4509,372],{"class":58},[35,4511,4329],{"class":359},[35,4513,4514,4516,4519,4521,4523,4525],{"class":37,"line":92},[35,4515,4481],{"class":495},[35,4517,4518],{"class":359}," start",[35,4520,544],{"class":495},[35,4522,687],{"class":58},[35,4524,553],{"class":359},[35,4526,4527],{"class":41},"\u002F\u002F起始下标\n",[35,4529,4530,4532,4535,4538,4541,4544,4546,4548,4551,4553,4555,4557],{"class":37,"line":101},[35,4531,4481],{"class":495},[35,4533,4534],{"class":359}," end",[35,4536,4537],{"class":495},"=sizeof",[35,4539,4540],{"class":359},"(arr)",[35,4542,4543],{"class":495},"\u002Fsizeof",[35,4545,4185],{"class":359},[35,4547,687],{"class":58},[35,4549,4550],{"class":359},"])",[35,4552,1026],{"class":495},[35,4554,713],{"class":58},[35,4556,553],{"class":359},[35,4558,4559],{"class":41},"\u002F\u002F结束下标\n",[35,4561,4562,4565,4568,4570],{"class":37,"line":110},[35,4563,4564],{"class":495},"   while",[35,4566,4567],{"class":359}," (start",[35,4569,1404],{"class":495},[35,4571,4572],{"class":359},"end)\n",[35,4574,4575],{"class":37,"line":119},[35,4576,4577],{"class":359},"   {\n",[35,4579,4580],{"class":37,"line":128},[35,4581,4582],{"class":41},"    \u002F\u002F实现元素互换代码\n",[35,4584,4585,4587,4590,4592],{"class":37,"line":137},[35,4586,2326],{"class":495},[35,4588,4589],{"class":359}," temp",[35,4591,544],{"class":495},[35,4593,4594],{"class":359},"arr[start];\n",[35,4596,4597,4600,4602],{"class":37,"line":144},[35,4598,4599],{"class":359},"    arr[start]",[35,4601,544],{"class":495},[35,4603,4604],{"class":359},"arr[end];\n",[35,4606,4607,4610,4612],{"class":37,"line":150},[35,4608,4609],{"class":359},"    arr[end]",[35,4611,544],{"class":495},[35,4613,4614],{"class":359},"temp;\n",[35,4616,4617],{"class":37,"line":159},[35,4618,4619],{"class":41},"    \u002F\u002F下标更新\n",[35,4621,4622,4625,4627],{"class":37,"line":168},[35,4623,4624],{"class":359},"    start",[35,4626,2633],{"class":495},[35,4628,1655],{"class":359},[35,4630,4631,4634,4637],{"class":37,"line":177},[35,4632,4633],{"class":359},"    end",[35,4635,4636],{"class":495},"--",[35,4638,1655],{"class":359},[35,4640,4641],{"class":37,"line":182},[35,4642,4643],{"class":359},"   }\n",[35,4645,4646],{"class":37,"line":188},[35,4647,4648],{"class":41},"   \u002F\u002F输出逆置后的数组\n",[35,4650,4651,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674],{"class":37,"line":197},[35,4652,4653],{"class":495},"   for",[35,4655,2012],{"class":359},[35,4657,502],{"class":495},[35,4659,3366],{"class":359},[35,4661,544],{"class":495},[35,4663,687],{"class":58},[35,4665,3373],{"class":359},[35,4667,1404],{"class":495},[35,4669,372],{"class":58},[35,4671,3373],{"class":359},[35,4673,2633],{"class":495},[35,4675,505],{"class":359},[35,4677,4678],{"class":37,"line":206},[35,4679,4577],{"class":359},[35,4681,4682,4684,4686,4689,4691,4694],{"class":37,"line":215},[35,4683,1912],{"class":359},[35,4685,1538],{"class":495},[35,4687,4688],{"class":359},"arr[i]",[35,4690,1538],{"class":495},[35,4692,4693],{"class":306},"\" \"",[35,4695,1655],{"class":359},[35,4697,4698],{"class":37,"line":224},[35,4699,4643],{"class":359},[35,4701,4702,4705,4707,4709],{"class":37,"line":233},[35,4703,4704],{"class":48},"   system",[35,4706,499],{"class":359},[35,4708,2649],{"class":306},[35,4710,3053],{"class":359},[35,4712,4713,4716,4718],{"class":37,"line":238},[35,4714,4715],{"class":495},"   return",[35,4717,4427],{"class":58},[35,4719,1655],{"class":359},[35,4721,4722],{"class":37,"line":244},[35,4723,1926],{"class":359},[1501,4725,4726],{},[17,4727,4728],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[25,4730,4732],{"className":486,"code":4731,"language":488,"meta":30,"style":30},"\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",[32,4733,4734,4739,4745,4755,4763,4767,4819,4832,4858,4862,4876,4880,4885,4890,4920,4924,4929,4963,4967,4972,4992,4997,5009,5025,5040,5045,5049,5053,5066,5092,5096,5110,5114,5122],{"__ignoreMap":30},[35,4735,4736],{"class":37,"line":38},[35,4737,4738],{"class":41},"\u002F\u002F冒泡排序,升序\n",[35,4740,4741,4743],{"class":37,"line":45},[35,4742,2291],{"class":495},[35,4744,2294],{"class":306},[35,4746,4747,4749,4751,4753],{"class":37,"line":55},[35,4748,2299],{"class":495},[35,4750,2302],{"class":495},[35,4752,2305],{"class":48},[35,4754,1655],{"class":359},[35,4756,4757,4759,4761],{"class":37,"line":65},[35,4758,502],{"class":495},[35,4760,2314],{"class":48},[35,4762,2317],{"class":359},[35,4764,4765],{"class":37,"line":74},[35,4766,1907],{"class":359},[35,4768,4769,4771,4773,4775,4778,4780,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817],{"class":37,"line":83},[35,4770,2326],{"class":495},[35,4772,4296],{"class":359},[35,4774,914],{"class":58},[35,4776,4777],{"class":359},"] ",[35,4779,544],{"class":495},[35,4781,4782],{"class":359}," {",[35,4784,789],{"class":58},[35,4786,872],{"class":359},[35,4788,574],{"class":58},[35,4790,872],{"class":359},[35,4792,889],{"class":58},[35,4794,872],{"class":359},[35,4796,687],{"class":58},[35,4798,872],{"class":359},[35,4800,372],{"class":58},[35,4802,872],{"class":359},[35,4804,863],{"class":58},[35,4806,872],{"class":359},[35,4808,713],{"class":58},[35,4810,872],{"class":359},[35,4812,568],{"class":58},[35,4814,872],{"class":359},[35,4816,914],{"class":58},[35,4818,4329],{"class":359},[35,4820,4821,4823,4825,4828,4830],{"class":37,"line":92},[35,4822,1912],{"class":359},[35,4824,1538],{"class":495},[35,4826,4827],{"class":306},"\"排序前：\"",[35,4829,1538],{"class":495},[35,4831,1560],{"class":359},[35,4833,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856],{"class":37,"line":101},[35,4835,3535],{"class":495},[35,4837,2012],{"class":359},[35,4839,502],{"class":495},[35,4841,3366],{"class":359},[35,4843,544],{"class":495},[35,4845,687],{"class":58},[35,4847,3373],{"class":359},[35,4849,1404],{"class":495},[35,4851,914],{"class":58},[35,4853,3373],{"class":359},[35,4855,2633],{"class":495},[35,4857,505],{"class":359},[35,4859,4860],{"class":37,"line":110},[35,4861,2371],{"class":359},[35,4863,4864,4866,4868,4870,4872,4874],{"class":37,"line":119},[35,4865,3785],{"class":359},[35,4867,1538],{"class":495},[35,4869,4688],{"class":359},[35,4871,1538],{"class":495},[35,4873,4693],{"class":306},[35,4875,1655],{"class":359},[35,4877,4878],{"class":37,"line":128},[35,4879,2528],{"class":359},[35,4881,4882],{"class":37,"line":137},[35,4883,4884],{"class":41},"    \u002F\u002F开始冒泡排序\n",[35,4886,4887],{"class":37,"line":144},[35,4888,4889],{"class":41},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[35,4891,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918],{"class":37,"line":150},[35,4893,3535],{"class":495},[35,4895,2012],{"class":359},[35,4897,502],{"class":495},[35,4899,3366],{"class":359},[35,4901,544],{"class":495},[35,4903,687],{"class":58},[35,4905,3373],{"class":359},[35,4907,1404],{"class":495},[35,4909,914],{"class":58},[35,4911,1026],{"class":495},[35,4913,713],{"class":58},[35,4915,3373],{"class":359},[35,4917,2633],{"class":495},[35,4919,505],{"class":359},[35,4921,4922],{"class":37,"line":159},[35,4923,2371],{"class":359},[35,4925,4926],{"class":37,"line":168},[35,4927,4928],{"class":41},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[35,4930,4931,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961],{"class":37,"line":177},[35,4932,3737],{"class":495},[35,4934,2012],{"class":359},[35,4936,502],{"class":495},[35,4938,3744],{"class":359},[35,4940,544],{"class":495},[35,4942,687],{"class":58},[35,4944,3751],{"class":359},[35,4946,1404],{"class":495},[35,4948,914],{"class":58},[35,4950,1026],{"class":495},[35,4952,935],{"class":359},[35,4954,1026],{"class":495},[35,4956,713],{"class":58},[35,4958,3751],{"class":359},[35,4960,2633],{"class":495},[35,4962,505],{"class":359},[35,4964,4965],{"class":37,"line":182},[35,4966,2850],{"class":359},[35,4968,4969],{"class":37,"line":188},[35,4970,4971],{"class":41},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[35,4973,4974,4977,4980,4982,4985,4987,4989],{"class":37,"line":197},[35,4975,4976],{"class":495},"            if",[35,4978,4979],{"class":359},"(arr[j]",[35,4981,1454],{"class":495},[35,4983,4984],{"class":359},"arr[j",[35,4986,975],{"class":495},[35,4988,713],{"class":58},[35,4990,4991],{"class":359},"])\n",[35,4993,4994],{"class":37,"line":206},[35,4995,4996],{"class":359},"            {\n",[35,4998,4999,5002,5004,5006],{"class":37,"line":215},[35,5000,5001],{"class":495},"                int",[35,5003,4589],{"class":359},[35,5005,544],{"class":495},[35,5007,5008],{"class":359},"arr[j];\n",[35,5010,5011,5014,5016,5018,5020,5022],{"class":37,"line":224},[35,5012,5013],{"class":359},"                arr[j]",[35,5015,544],{"class":495},[35,5017,4984],{"class":359},[35,5019,975],{"class":495},[35,5021,713],{"class":58},[35,5023,5024],{"class":359},"];\n",[35,5026,5027,5030,5032,5034,5036,5038],{"class":37,"line":233},[35,5028,5029],{"class":359},"                arr[j",[35,5031,975],{"class":495},[35,5033,713],{"class":58},[35,5035,1434],{"class":359},[35,5037,544],{"class":495},[35,5039,4614],{"class":359},[35,5041,5042],{"class":37,"line":238},[35,5043,5044],{"class":359},"            }\n",[35,5046,5047],{"class":37,"line":244},[35,5048,2869],{"class":359},[35,5050,5051],{"class":37,"line":253},[35,5052,2528],{"class":359},[35,5054,5055,5057,5059,5062,5064],{"class":37,"line":262},[35,5056,1912],{"class":359},[35,5058,1538],{"class":495},[35,5060,5061],{"class":306},"\"排序后：\"",[35,5063,1538],{"class":495},[35,5065,1560],{"class":359},[35,5067,5068,5070,5072,5074,5076,5078,5080,5082,5084,5086,5088,5090],{"class":37,"line":271},[35,5069,3535],{"class":495},[35,5071,2012],{"class":359},[35,5073,502],{"class":495},[35,5075,3366],{"class":359},[35,5077,544],{"class":495},[35,5079,687],{"class":58},[35,5081,3373],{"class":359},[35,5083,1404],{"class":495},[35,5085,914],{"class":58},[35,5087,3373],{"class":359},[35,5089,2633],{"class":495},[35,5091,505],{"class":359},[35,5093,5094],{"class":37,"line":280},[35,5095,2371],{"class":359},[35,5097,5098,5100,5102,5104,5106,5108],{"class":37,"line":289},[35,5099,3785],{"class":359},[35,5101,1538],{"class":495},[35,5103,4688],{"class":359},[35,5105,1538],{"class":495},[35,5107,4693],{"class":306},[35,5109,1655],{"class":359},[35,5111,5112],{"class":37,"line":294},[35,5113,2528],{"class":359},[35,5115,5116,5118,5120],{"class":37,"line":300},[35,5117,4424],{"class":495},[35,5119,4427],{"class":58},[35,5121,1655],{"class":359},[35,5123,5124],{"class":37,"line":313},[35,5125,1926],{"class":359},[465,5127,5129],{"id":5128},"_172二维数组","1.7.2二维数组",[14,5131,5132],{},[17,5133,5134],{},"二维数组的四种定义方式",[633,5136,5137,5146],{},[636,5138,5139],{},[639,5140,5141,5144],{},[642,5142,5143],{},"序号",[642,5145,4115],{},[680,5147,5148,5158,5167,5176,5185],{},[639,5149,5150,5152],{},[685,5151,713],{},[685,5153,5154,5155,553],{},"数据类型 数组名[行数]",[35,5156,5157],{},"列数",[639,5159,5160,5162],{},[685,5161,574],{},[685,5163,5154,5164,5166],{},[35,5165,5157],{},"={ {数据1,数据2}，{数据3，数据4}... }",[639,5168,5169,5171],{},[685,5170,568],{},[685,5172,5154,5173,5175],{},[35,5174,5157],{},"={数据1,数据2,数据3...}",[639,5177,5178,5180],{},[685,5179,789],{},[685,5181,5182,5183,5175],{},"数据类型 数组名[]",[35,5184,5157],{},[639,5186,5187,5190],{},[685,5188,5189],{},"注意：不能只省略列数",[685,5191],{},[14,5193,5194],{"start":45},[17,5195,5196],{},"二维数组数组名",[1501,5198,5199,5202],{},[17,5200,5201],{},"1.查看二维数组所占内存空间",[17,5203,5204],{},"2.获取二维数组首地址",[21,5206,5207],{},"已知二维数组，求二维数组的行数与列数",[25,5209,5211],{"className":486,"code":5210,"language":488,"meta":30,"style":30},"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",[32,5212,5213,5221,5225,5243,5247,5265,5281,5286,5311,5344],{"__ignoreMap":30},[35,5214,5215,5217,5219],{"class":37,"line":38},[35,5216,502],{"class":495},[35,5218,2314],{"class":48},[35,5220,2317],{"class":359},[35,5222,5223],{"class":37,"line":45},[35,5224,1907],{"class":359},[35,5226,5227,5229,5231,5233,5236,5238,5240],{"class":37,"line":55},[35,5228,2326],{"class":495},[35,5230,4296],{"class":359},[35,5232,574],{"class":58},[35,5234,5235],{"class":359},"][",[35,5237,568],{"class":58},[35,5239,1434],{"class":359},[35,5241,5242],{"class":495},"=\n",[35,5244,5245],{"class":37,"line":65},[35,5246,2371],{"class":359},[35,5248,5249,5252,5254,5256,5258,5260,5262],{"class":37,"line":74},[35,5250,5251],{"class":359},"        {",[35,5253,713],{"class":58},[35,5255,872],{"class":359},[35,5257,574],{"class":58},[35,5259,872],{"class":359},[35,5261,568],{"class":58},[35,5263,5264],{"class":359},"},\n",[35,5266,5267,5269,5271,5273,5275,5277,5279],{"class":37,"line":83},[35,5268,5251],{"class":359},[35,5270,789],{"class":58},[35,5272,872],{"class":359},[35,5274,372],{"class":58},[35,5276,872],{"class":359},[35,5278,408],{"class":58},[35,5280,1926],{"class":359},[35,5282,5283],{"class":37,"line":92},[35,5284,5285],{"class":359},"    };\n",[35,5287,5288,5290,5292,5295,5297,5299,5301,5303,5305,5307,5309],{"class":37,"line":101},[35,5289,1912],{"class":359},[35,5291,1538],{"class":495},[35,5293,5294],{"class":306},"\"二维数组的行数\"",[35,5296,1733],{"class":495},[35,5298,4540],{"class":359},[35,5300,4543],{"class":495},[35,5302,4185],{"class":359},[35,5304,687],{"class":58},[35,5306,4550],{"class":359},[35,5308,1538],{"class":495},[35,5310,1560],{"class":359},[35,5312,5313,5315,5317,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342],{"class":37,"line":110},[35,5314,1912],{"class":359},[35,5316,1538],{"class":495},[35,5318,5319],{"class":306},"\"二维数组的列数\"",[35,5321,1733],{"class":495},[35,5323,4185],{"class":359},[35,5325,687],{"class":58},[35,5327,4550],{"class":359},[35,5329,4543],{"class":495},[35,5331,4185],{"class":359},[35,5333,687],{"class":58},[35,5335,5235],{"class":359},[35,5337,687],{"class":58},[35,5339,4550],{"class":359},[35,5341,1538],{"class":495},[35,5343,1560],{"class":359},[35,5345,5346],{"class":37,"line":119},[35,5347,1926],{"class":359},[21,5349,5350],{},"查看二维数组首地址",[25,5352,5354],{"className":486,"code":5353,"language":488,"meta":30,"style":30},"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",[32,5355,5356,5373,5399,5424],{"__ignoreMap":30},[35,5357,5358,5360,5362,5365,5367,5369,5371],{"class":37,"line":38},[35,5359,1730],{"class":359},[35,5361,1538],{"class":495},[35,5363,5364],{"class":306},"\"二维数组首地址：\"",[35,5366,1538],{"class":495},[35,5368,4214],{"class":359},[35,5370,1538],{"class":495},[35,5372,1560],{"class":359},[35,5374,5375,5377,5379,5382,5384,5386,5388,5391,5393,5395,5397],{"class":37,"line":45},[35,5376,1730],{"class":359},[35,5378,1538],{"class":495},[35,5380,5381],{"class":306},"\"二维数组第一行的首地址：\"",[35,5383,1538],{"class":495},[35,5385,499],{"class":359},[35,5387,502],{"class":495},[35,5389,5390],{"class":359},")arr[",[35,5392,687],{"class":58},[35,5394,1434],{"class":359},[35,5396,1538],{"class":495},[35,5398,1560],{"class":359},[35,5400,5401,5403,5405,5408,5410,5412,5414,5416,5418,5420,5422],{"class":37,"line":55},[35,5402,1730],{"class":359},[35,5404,1538],{"class":495},[35,5406,5407],{"class":306},"\"二维数组第二行的首地址：\"",[35,5409,1538],{"class":495},[35,5411,499],{"class":359},[35,5413,502],{"class":495},[35,5415,5390],{"class":359},[35,5417,713],{"class":58},[35,5419,1434],{"class":359},[35,5421,1538],{"class":495},[35,5423,1560],{"class":359},[35,5425,5426,5428,5430,5433,5435,5437,5439,5441,5443,5445,5447,5449,5451,5453,5455,5457],{"class":37,"line":65},[35,5427,1730],{"class":359},[35,5429,1538],{"class":495},[35,5431,5432],{"class":306},"\"二维数组第一个元素的首地址:\"",[35,5434,1538],{"class":495},[35,5436,499],{"class":359},[35,5438,502],{"class":495},[35,5440,923],{"class":359},[35,5442,847],{"class":495},[35,5444,4240],{"class":359},[35,5446,687],{"class":58},[35,5448,5235],{"class":359},[35,5450,687],{"class":58},[35,5452,1434],{"class":359},[35,5454,1538],{"class":495},[35,5456,1603],{"class":359},[35,5458,5459],{"class":41},"\u002F\u002F对于数，要加取址符\n",[416,5461,5462],{},"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":30,"searchDepth":45,"depth":45,"links":5464},[5465,5466,5467,5475,5476,5482,5487],{"id":440,"depth":45,"text":441},{"id":447,"depth":45,"text":448},{"id":462,"depth":45,"text":463,"children":5468},[5469,5470,5471,5472,5473,5474],{"id":467,"depth":55,"text":468},{"id":515,"depth":55,"text":516},{"id":582,"depth":55,"text":583},{"id":1519,"depth":55,"text":1520},{"id":1609,"depth":55,"text":1610},{"id":1705,"depth":55,"text":1706},{"id":1746,"depth":45,"text":1747},{"id":1814,"depth":45,"text":1815,"children":5477},[5478,5479,5480,5481],{"id":1818,"depth":55,"text":1819},{"id":1840,"depth":55,"text":1841},{"id":1849,"depth":55,"text":1850},{"id":1858,"depth":55,"text":1859},{"id":1867,"depth":45,"text":1868,"children":5483},[5484,5485,5486],{"id":1871,"depth":55,"text":1872},{"id":2546,"depth":55,"text":2547},{"id":3955,"depth":55,"text":3956},{"id":4096,"depth":45,"text":4097,"children":5488},[5489,5490],{"id":4100,"depth":55,"text":4101},{"id":5128,"depth":55,"text":5129},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":431,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5497,"title":5498,"body":5499,"description":30,"extension":422,"meta":6599,"navigation":140,"path":6600,"seo":6601,"stem":6602,"__hash__":6603},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5500,"toc":6591},[5501,5504,5508,5516,5524,5527,5593,5597,5600,5676,5680,5683,5686,5689,5902,5906,5911,5975,5980,6047,6052,6143,6146,6251,6255,6258,6264,6408,6412,6415,6429,6432,6477,6480,6588],[10,5502,5498],{"id":5503},"_2函数",[438,5505,5507],{"id":5506},"_21函数概述","2.1函数概述",[14,5509,5510,5513],{},[17,5511,5512],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[17,5514,5515],{},"语法：",[25,5517,5522],{"className":5518,"code":5520,"language":5521,"meta":30},[5519],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[32,5523,5520],{"__ignoreMap":30},[21,5525,5526],{},"小案例",[25,5528,5530],{"className":486,"code":5529,"language":488,"meta":30,"style":30},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[32,5531,5532,5537,5561,5565,5582,5589],{"__ignoreMap":30},[35,5533,5534],{"class":37,"line":38},[35,5535,5536],{"class":41},"\u002F\u002Fnum1,num2形参\n",[35,5538,5539,5541,5544,5546,5548,5552,5554,5556,5559],{"class":37,"line":45},[35,5540,502],{"class":495},[35,5542,5543],{"class":48}," add",[35,5545,499],{"class":359},[35,5547,502],{"class":495},[35,5549,5551],{"class":5550},"s4XuR"," num1",[35,5553,872],{"class":359},[35,5555,502],{"class":495},[35,5557,5558],{"class":5550}," num2",[35,5560,505],{"class":359},[35,5562,5563],{"class":37,"line":55},[35,5564,1907],{"class":359},[35,5566,5567,5569,5572,5574,5577,5579],{"class":37,"line":65},[35,5568,2326],{"class":495},[35,5570,5571],{"class":359}," sum",[35,5573,544],{"class":495},[35,5575,5576],{"class":359},"num1",[35,5578,975],{"class":495},[35,5580,5581],{"class":359},"num2;\n",[35,5583,5584,5586],{"class":37,"line":74},[35,5585,4424],{"class":495},[35,5587,5588],{"class":359}," sum;\n",[35,5590,5591],{"class":37,"line":83},[35,5592,1926],{"class":359},[438,5594,5596],{"id":5595},"_22函数调用","2.2函数调用",[21,5598,5599],{},"调用刚刚写的求和函数",[25,5601,5603],{"className":486,"code":5602,"language":488,"meta":30,"style":30},"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",[32,5604,5605,5613,5617,5622,5634,5646,5655,5660,5672],{"__ignoreMap":30},[35,5606,5607,5609,5611],{"class":37,"line":38},[35,5608,502],{"class":495},[35,5610,2314],{"class":48},[35,5612,2317],{"class":359},[35,5614,5615],{"class":37,"line":45},[35,5616,1907],{"class":359},[35,5618,5619],{"class":37,"line":55},[35,5620,5621],{"class":41},"    \u002F\u002Fa,b实参\n",[35,5623,5624,5626,5628,5630,5632],{"class":37,"line":65},[35,5625,2326],{"class":495},[35,5627,1759],{"class":359},[35,5629,544],{"class":495},[35,5631,687],{"class":58},[35,5633,1655],{"class":359},[35,5635,5636,5638,5640,5642,5644],{"class":37,"line":74},[35,5637,2326],{"class":495},[35,5639,3167],{"class":359},[35,5641,544],{"class":495},[35,5643,687],{"class":58},[35,5645,1655],{"class":359},[35,5647,5648,5650,5652],{"class":37,"line":83},[35,5649,2353],{"class":359},[35,5651,1790],{"class":495},[35,5653,5654],{"class":359},"a,b;\n",[35,5656,5657],{"class":37,"line":92},[35,5658,5659],{"class":41},"    \u002F\u002F调用函数时，实参值传给了形参\n",[35,5661,5662,5664,5666,5669],{"class":37,"line":101},[35,5663,1912],{"class":359},[35,5665,1538],{"class":495},[35,5667,5668],{"class":48},"add",[35,5670,5671],{"class":359},"(a,b);\n",[35,5673,5674],{"class":37,"line":110},[35,5675,1926],{"class":359},[438,5677,5679],{"id":5678},"_23值传递","2.3值传递",[21,5681,5682],{},"值传递就是函数调用时实参将数值传给形参",[21,5684,5685],{},"值传递时，如果形参发生任何改变，不会影响实参",[21,5687,5688],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[25,5690,5692],{"className":486,"code":5691,"language":488,"meta":30,"style":30},"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",[32,5693,5694,5716,5720,5733,5750,5768,5779,5788,5797,5810,5826,5842,5851,5855,5863,5867,5879,5891,5898],{"__ignoreMap":30},[35,5695,5696,5699,5702,5704,5706,5708,5710,5712,5714],{"class":37,"line":38},[35,5697,5698],{"class":495},"void",[35,5700,5701],{"class":48}," swap",[35,5703,499],{"class":359},[35,5705,502],{"class":495},[35,5707,5551],{"class":5550},[35,5709,872],{"class":359},[35,5711,502],{"class":495},[35,5713,5558],{"class":5550},[35,5715,505],{"class":359},[35,5717,5718],{"class":37,"line":45},[35,5719,1907],{"class":359},[35,5721,5722,5724,5726,5729,5731],{"class":37,"line":55},[35,5723,1912],{"class":359},[35,5725,1538],{"class":495},[35,5727,5728],{"class":306},"\"交换前：\"",[35,5730,1538],{"class":495},[35,5732,1560],{"class":359},[35,5734,5735,5737,5739,5742,5744,5746,5748],{"class":37,"line":65},[35,5736,1912],{"class":359},[35,5738,1538],{"class":495},[35,5740,5741],{"class":306},"\"num1=\"",[35,5743,1538],{"class":495},[35,5745,5576],{"class":359},[35,5747,1538],{"class":495},[35,5749,1560],{"class":359},[35,5751,5752,5754,5756,5759,5761,5764,5766],{"class":37,"line":74},[35,5753,1912],{"class":359},[35,5755,1538],{"class":495},[35,5757,5758],{"class":306},"\"num2=\"",[35,5760,1538],{"class":495},[35,5762,5763],{"class":359},"num2",[35,5765,1538],{"class":495},[35,5767,1560],{"class":359},[35,5769,5770,5772,5774,5776],{"class":37,"line":83},[35,5771,2326],{"class":495},[35,5773,4589],{"class":359},[35,5775,544],{"class":495},[35,5777,5778],{"class":359},"num1;\n",[35,5780,5781,5784,5786],{"class":37,"line":92},[35,5782,5783],{"class":359},"    num1",[35,5785,544],{"class":495},[35,5787,5581],{"class":359},[35,5789,5790,5793,5795],{"class":37,"line":101},[35,5791,5792],{"class":359},"    num2",[35,5794,544],{"class":495},[35,5796,4614],{"class":359},[35,5798,5799,5801,5803,5806,5808],{"class":37,"line":110},[35,5800,1912],{"class":359},[35,5802,1538],{"class":495},[35,5804,5805],{"class":306},"\"交换后：\"",[35,5807,1538],{"class":495},[35,5809,1560],{"class":359},[35,5811,5812,5814,5816,5818,5820,5822,5824],{"class":37,"line":119},[35,5813,1912],{"class":359},[35,5815,1538],{"class":495},[35,5817,5741],{"class":306},[35,5819,1538],{"class":495},[35,5821,5576],{"class":359},[35,5823,1538],{"class":495},[35,5825,1560],{"class":359},[35,5827,5828,5830,5832,5834,5836,5838,5840],{"class":37,"line":128},[35,5829,1912],{"class":359},[35,5831,1538],{"class":495},[35,5833,5758],{"class":306},[35,5835,1538],{"class":495},[35,5837,5763],{"class":359},[35,5839,1538],{"class":495},[35,5841,1560],{"class":359},[35,5843,5844,5846,5848],{"class":37,"line":137},[35,5845,4424],{"class":495},[35,5847,553],{"class":359},[35,5849,5850],{"class":41},"\u002F\u002F或者不写\n",[35,5852,5853],{"class":37,"line":144},[35,5854,1926],{"class":359},[35,5856,5857,5859,5861],{"class":37,"line":150},[35,5858,502],{"class":495},[35,5860,2314],{"class":48},[35,5862,2317],{"class":359},[35,5864,5865],{"class":37,"line":159},[35,5866,1907],{"class":359},[35,5868,5869,5871,5873,5875,5877],{"class":37,"line":168},[35,5870,2326],{"class":495},[35,5872,1759],{"class":359},[35,5874,544],{"class":495},[35,5876,940],{"class":58},[35,5878,1655],{"class":359},[35,5880,5881,5883,5885,5887,5889],{"class":37,"line":177},[35,5882,2326],{"class":495},[35,5884,3167],{"class":359},[35,5886,544],{"class":495},[35,5888,1194],{"class":58},[35,5890,1655],{"class":359},[35,5892,5893,5896],{"class":37,"line":182},[35,5894,5895],{"class":48},"    swap",[35,5897,5671],{"class":359},[35,5899,5900],{"class":37,"line":188},[35,5901,1926],{"class":359},[438,5903,5905],{"id":5904},"_24函数的常见形式","2.4函数的常见形式",[14,5907,5908],{},[17,5909,5910],{},"无参无返",[25,5912,5914],{"className":486,"code":5913,"language":488,"meta":30,"style":30},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[32,5915,5916,5925,5929,5942,5946,5954,5958,5963,5971],{"__ignoreMap":30},[35,5917,5918,5920,5923],{"class":37,"line":38},[35,5919,5698],{"class":495},[35,5921,5922],{"class":48}," test01",[35,5924,2317],{"class":359},[35,5926,5927],{"class":37,"line":45},[35,5928,1907],{"class":359},[35,5930,5931,5933,5935,5938,5940],{"class":37,"line":55},[35,5932,1912],{"class":359},[35,5934,1538],{"class":495},[35,5936,5937],{"class":306},"\"你好\"",[35,5939,1538],{"class":495},[35,5941,1560],{"class":359},[35,5943,5944],{"class":37,"line":65},[35,5945,1926],{"class":359},[35,5947,5948,5950,5952],{"class":37,"line":74},[35,5949,502],{"class":495},[35,5951,2314],{"class":48},[35,5953,2317],{"class":359},[35,5955,5956],{"class":37,"line":83},[35,5957,1907],{"class":359},[35,5959,5960],{"class":37,"line":92},[35,5961,5962],{"class":41},"    \u002F\u002F函数调用\n",[35,5964,5965,5968],{"class":37,"line":101},[35,5966,5967],{"class":48},"    test01",[35,5969,5970],{"class":359},"();\n",[35,5972,5973],{"class":37,"line":110},[35,5974,1926],{"class":359},[14,5976,5977],{"start":45},[17,5978,5979],{},"有参无返",[25,5981,5983],{"className":486,"code":5982,"language":488,"meta":30,"style":30},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[32,5984,5985,6000,6004,6016,6020,6028,6032,6043],{"__ignoreMap":30},[35,5986,5987,5989,5992,5994,5996,5998],{"class":37,"line":38},[35,5988,5698],{"class":495},[35,5990,5991],{"class":48}," test02",[35,5993,499],{"class":359},[35,5995,502],{"class":495},[35,5997,1759],{"class":5550},[35,5999,505],{"class":359},[35,6001,6002],{"class":37,"line":45},[35,6003,1907],{"class":359},[35,6005,6006,6008,6010,6012,6014],{"class":37,"line":55},[35,6007,1912],{"class":359},[35,6009,1538],{"class":495},[35,6011,5937],{"class":306},[35,6013,1538],{"class":495},[35,6015,1560],{"class":359},[35,6017,6018],{"class":37,"line":65},[35,6019,1926],{"class":359},[35,6021,6022,6024,6026],{"class":37,"line":74},[35,6023,502],{"class":495},[35,6025,2314],{"class":48},[35,6027,2317],{"class":359},[35,6029,6030],{"class":37,"line":83},[35,6031,1907],{"class":359},[35,6033,6034,6037,6039,6041],{"class":37,"line":92},[35,6035,6036],{"class":48},"    test02",[35,6038,499],{"class":359},[35,6040,807],{"class":58},[35,6042,3053],{"class":359},[35,6044,6045],{"class":37,"line":101},[35,6046,1926],{"class":359},[14,6048,6049],{"start":55},[17,6050,6051],{},"无参有返",[25,6053,6055],{"className":486,"code":6054,"language":488,"meta":30,"style":30},"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",[32,6056,6057,6066,6070,6082,6091,6095,6103,6107,6120,6139],{"__ignoreMap":30},[35,6058,6059,6061,6064],{"class":37,"line":38},[35,6060,502],{"class":495},[35,6062,6063],{"class":48}," test03",[35,6065,2317],{"class":359},[35,6067,6068],{"class":37,"line":45},[35,6069,1907],{"class":359},[35,6071,6072,6074,6076,6078,6080],{"class":37,"line":55},[35,6073,1912],{"class":359},[35,6075,1538],{"class":495},[35,6077,5937],{"class":306},[35,6079,1538],{"class":495},[35,6081,1560],{"class":359},[35,6083,6084,6086,6089],{"class":37,"line":65},[35,6085,4424],{"class":495},[35,6087,6088],{"class":58}," 100",[35,6090,1655],{"class":359},[35,6092,6093],{"class":37,"line":74},[35,6094,1926],{"class":359},[35,6096,6097,6099,6101],{"class":37,"line":83},[35,6098,502],{"class":495},[35,6100,2314],{"class":48},[35,6102,2317],{"class":359},[35,6104,6105],{"class":37,"line":92},[35,6106,1907],{"class":359},[35,6108,6109,6111,6113,6115,6118],{"class":37,"line":101},[35,6110,2326],{"class":495},[35,6112,5551],{"class":359},[35,6114,544],{"class":495},[35,6116,6117],{"class":48},"test03",[35,6119,5970],{"class":359},[35,6121,6122,6124,6126,6128,6130,6132,6134,6136],{"class":37,"line":110},[35,6123,1912],{"class":359},[35,6125,1538],{"class":495},[35,6127,5741],{"class":306},[35,6129,1538],{"class":495},[35,6131,5576],{"class":359},[35,6133,1538],{"class":495},[35,6135,1603],{"class":359},[35,6137,6138],{"class":41}," \u002F\u002F100\n",[35,6140,6141],{"class":37,"line":119},[35,6142,1926],{"class":359},[21,6144,6145],{},"4.有参有返",[25,6147,6149],{"className":486,"code":6148,"language":488,"meta":30,"style":30},"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",[32,6150,6151,6166,6170,6183,6189,6193,6202,6206,6218,6232,6247],{"__ignoreMap":30},[35,6152,6153,6155,6158,6160,6162,6164],{"class":37,"line":38},[35,6154,502],{"class":495},[35,6156,6157],{"class":48}," test04",[35,6159,499],{"class":359},[35,6161,502],{"class":495},[35,6163,1759],{"class":5550},[35,6165,505],{"class":359},[35,6167,6168],{"class":37,"line":45},[35,6169,1907],{"class":359},[35,6171,6172,6174,6176,6179,6181],{"class":37,"line":55},[35,6173,1912],{"class":359},[35,6175,1538],{"class":495},[35,6177,6178],{"class":306},"\"hello\"",[35,6180,1538],{"class":495},[35,6182,1560],{"class":359},[35,6184,6185,6187],{"class":37,"line":65},[35,6186,4424],{"class":495},[35,6188,1793],{"class":359},[35,6190,6191],{"class":37,"line":74},[35,6192,1926],{"class":359},[35,6194,6195,6197,6200],{"class":37,"line":83},[35,6196,502],{"class":495},[35,6198,6199],{"class":48}," mian",[35,6201,2317],{"class":359},[35,6203,6204],{"class":37,"line":92},[35,6205,1907],{"class":359},[35,6207,6208,6210,6212,6214,6216],{"class":37,"line":101},[35,6209,2326],{"class":495},[35,6211,3167],{"class":359},[35,6213,544],{"class":495},[35,6215,713],{"class":58},[35,6217,1655],{"class":359},[35,6219,6220,6222,6224,6226,6229],{"class":37,"line":110},[35,6221,2326],{"class":495},[35,6223,3183],{"class":359},[35,6225,544],{"class":495},[35,6227,6228],{"class":48},"test04",[35,6230,6231],{"class":359},"(b);\n",[35,6233,6234,6236,6238,6240,6242,6244],{"class":37,"line":119},[35,6235,1912],{"class":359},[35,6237,1538],{"class":495},[35,6239,784],{"class":359},[35,6241,1538],{"class":495},[35,6243,1603],{"class":359},[35,6245,6246],{"class":41}," \u002F\u002F1\n",[35,6248,6249],{"class":37,"line":128},[35,6250,1926],{"class":359},[438,6252,6254],{"id":6253},"_25函数的声明","2.5函数的声明",[21,6256,6257],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[21,6259,6260,6261],{},"函数的",[645,6262,6263],{},"声明可以多次，但是函数的定义只能有一次",[25,6265,6267],{"className":486,"code":6266,"language":488,"meta":30,"style":30},"\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",[32,6268,6269,6274,6279,6304,6313,6317,6329,6341,6357,6361,6381,6385,6404],{"__ignoreMap":30},[35,6270,6271],{"class":37,"line":38},[35,6272,6273],{"class":41},"\u002F\u002F函数声明\n",[35,6275,6276],{"class":37,"line":45},[35,6277,6278],{"class":41},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[35,6280,6281,6283,6286,6288,6290,6292,6294,6296,6298,6301],{"class":37,"line":55},[35,6282,502],{"class":495},[35,6284,6285],{"class":48}," max",[35,6287,499],{"class":359},[35,6289,502],{"class":495},[35,6291,1759],{"class":5550},[35,6293,872],{"class":359},[35,6295,502],{"class":495},[35,6297,3167],{"class":5550},[35,6299,6300],{"class":359},");",[35,6302,6303],{"class":41},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[35,6305,6306,6308,6310],{"class":37,"line":65},[35,6307,502],{"class":495},[35,6309,2314],{"class":48},[35,6311,6312],{"class":359},"() \n",[35,6314,6315],{"class":37,"line":74},[35,6316,1907],{"class":359},[35,6318,6319,6321,6323,6325,6327],{"class":37,"line":83},[35,6320,2326],{"class":495},[35,6322,1759],{"class":359},[35,6324,544],{"class":495},[35,6326,940],{"class":58},[35,6328,1655],{"class":359},[35,6330,6331,6333,6335,6337,6339],{"class":37,"line":92},[35,6332,2326],{"class":495},[35,6334,3167],{"class":359},[35,6336,544],{"class":495},[35,6338,1194],{"class":58},[35,6340,1655],{"class":359},[35,6342,6343,6345,6347,6350,6353,6355],{"class":37,"line":101},[35,6344,1912],{"class":359},[35,6346,1538],{"class":495},[35,6348,6349],{"class":48},"max",[35,6351,6352],{"class":359},"(a,b)",[35,6354,1538],{"class":495},[35,6356,1560],{"class":359},[35,6358,6359],{"class":37,"line":110},[35,6360,1926],{"class":359},[35,6362,6363,6365,6367,6369,6371,6373,6375,6377,6379],{"class":37,"line":119},[35,6364,502],{"class":495},[35,6366,6285],{"class":48},[35,6368,499],{"class":359},[35,6370,502],{"class":495},[35,6372,1759],{"class":5550},[35,6374,872],{"class":359},[35,6376,502],{"class":495},[35,6378,3167],{"class":5550},[35,6380,505],{"class":359},[35,6382,6383],{"class":37,"line":128},[35,6384,1907],{"class":359},[35,6386,6387,6389,6391,6393,6395,6397,6399,6401],{"class":37,"line":137},[35,6388,4424],{"class":495},[35,6390,1759],{"class":359},[35,6392,1454],{"class":495},[35,6394,759],{"class":359},[35,6396,1480],{"class":495},[35,6398,734],{"class":359},[35,6400,1353],{"class":495},[35,6402,6403],{"class":359},"b;\n",[35,6405,6406],{"class":37,"line":144},[35,6407,1926],{"class":359},[438,6409,6411],{"id":6410},"_26函数的分文件编写","2.6函数的分文件编写",[21,6413,6414],{},"4个步骤：",[1501,6416,6417,6420,6423,6426],{},[17,6418,6419],{},"1.创建后缀名为.h的头文件",[17,6421,6422],{},"2.创建后缀名为.cpp的源文件",[17,6424,6425],{},"3.在头文件中写函数的定义",[17,6427,6428],{},"4.在源文件中写函数的定义\n示例：",[21,6430,6431],{},"头文件：swap.h",[25,6433,6435],{"className":486,"code":6434,"language":488,"meta":30,"style":30},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[32,6436,6437,6443,6453,6457],{"__ignoreMap":30},[35,6438,6439,6441],{"class":37,"line":38},[35,6440,2291],{"class":495},[35,6442,2294],{"class":306},[35,6444,6445,6447,6449,6451],{"class":37,"line":45},[35,6446,2299],{"class":495},[35,6448,2302],{"class":495},[35,6450,2305],{"class":48},[35,6452,1655],{"class":359},[35,6454,6455],{"class":37,"line":55},[35,6456,6273],{"class":41},[35,6458,6459,6461,6463,6465,6467,6469,6471,6473,6475],{"class":37,"line":65},[35,6460,5698],{"class":495},[35,6462,5701],{"class":48},[35,6464,499],{"class":359},[35,6466,502],{"class":495},[35,6468,1759],{"class":5550},[35,6470,872],{"class":359},[35,6472,502],{"class":495},[35,6474,3167],{"class":5550},[35,6476,3053],{"class":359},[21,6478,6479],{},"源文件：swap.cpp",[25,6481,6483],{"className":486,"code":6482,"language":488,"meta":30,"style":30},"#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",[32,6484,6485,6492,6497,6517,6521,6532,6541,6550,6567,6584],{"__ignoreMap":30},[35,6486,6487,6489],{"class":37,"line":38},[35,6488,2291],{"class":495},[35,6490,6491],{"class":306}," \"swap.h\"\n",[35,6493,6494],{"class":37,"line":45},[35,6495,6496],{"class":41},"\u002F\u002F函数的定义\n",[35,6498,6499,6501,6503,6505,6507,6509,6511,6513,6515],{"class":37,"line":55},[35,6500,5698],{"class":495},[35,6502,5701],{"class":48},[35,6504,499],{"class":359},[35,6506,502],{"class":495},[35,6508,1759],{"class":5550},[35,6510,872],{"class":359},[35,6512,502],{"class":495},[35,6514,3167],{"class":5550},[35,6516,505],{"class":359},[35,6518,6519],{"class":37,"line":65},[35,6520,1907],{"class":359},[35,6522,6523,6525,6527,6529],{"class":37,"line":74},[35,6524,2326],{"class":495},[35,6526,4589],{"class":359},[35,6528,544],{"class":495},[35,6530,6531],{"class":359},"a;\n",[35,6533,6534,6537,6539],{"class":37,"line":83},[35,6535,6536],{"class":359},"    a",[35,6538,544],{"class":495},[35,6540,6403],{"class":359},[35,6542,6543,6546,6548],{"class":37,"line":92},[35,6544,6545],{"class":359},"    b",[35,6547,544],{"class":495},[35,6549,4614],{"class":359},[35,6551,6552,6554,6556,6559,6561,6563,6565],{"class":37,"line":101},[35,6553,1912],{"class":359},[35,6555,1538],{"class":495},[35,6557,6558],{"class":306},"\"a=\"",[35,6560,1538],{"class":495},[35,6562,734],{"class":359},[35,6564,1538],{"class":495},[35,6566,1560],{"class":359},[35,6568,6569,6571,6573,6576,6578,6580,6582],{"class":37,"line":110},[35,6570,1912],{"class":359},[35,6572,1538],{"class":495},[35,6574,6575],{"class":306},"\"b=\"",[35,6577,1538],{"class":495},[35,6579,759],{"class":359},[35,6581,1538],{"class":495},[35,6583,1560],{"class":359},[35,6585,6586],{"class":37,"line":119},[35,6587,1926],{"class":359},[416,6589,6590],{},"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":30,"searchDepth":45,"depth":45,"links":6592},[6593,6594,6595,6596,6597,6598],{"id":5506,"depth":45,"text":5507},{"id":5595,"depth":45,"text":5596},{"id":5678,"depth":45,"text":5679},{"id":5904,"depth":45,"text":5905},{"id":6253,"depth":45,"text":6254},{"id":6410,"depth":45,"text":6411},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5498,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6605,"title":6606,"body":6607,"description":6614,"extension":422,"meta":8019,"navigation":140,"path":8020,"seo":8021,"stem":8022,"__hash__":8023},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6608,"toc":8009},[6609,6612,6615,6619,6781,6785,6788,6791,6794,6797,6937,6941,6944,6947,6950,7015,7019,7024,7091,7094,7098,7101,7112,7117,7137,7140,7145,7164,7167,7171,7190,7193,7197,7432,7436,7439,7442,7445,7607,7610,7614,7617,7623,8006],[10,6610,6606],{"id":6611},"_3指针",[21,6613,6614],{},"通过指针保存一个地址，指针就是个地址",[438,6616,6618],{"id":6617},"_31定义指针","3.1定义指针",[25,6620,6622],{"className":486,"code":6621,"language":488,"meta":30,"style":30},"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",[32,6623,6624,6632,6636,6641,6653,6658,6666,6676,6694,6714,6718,6723,6728,6733,6747,6763,6777],{"__ignoreMap":30},[35,6625,6626,6628,6630],{"class":37,"line":38},[35,6627,502],{"class":495},[35,6629,2314],{"class":48},[35,6631,2317],{"class":359},[35,6633,6634],{"class":37,"line":45},[35,6635,1907],{"class":359},[35,6637,6638],{"class":37,"line":55},[35,6639,6640],{"class":41},"    \u002F\u002F1.定义指针\n",[35,6642,6643,6645,6647,6649,6651],{"class":37,"line":65},[35,6644,2326],{"class":495},[35,6646,1759],{"class":359},[35,6648,544],{"class":495},[35,6650,940],{"class":58},[35,6652,1655],{"class":359},[35,6654,6655],{"class":37,"line":74},[35,6656,6657],{"class":41},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[35,6659,6660,6663],{"class":37,"line":83},[35,6661,6662],{"class":495},"    int*",[35,6664,6665],{"class":359},"p;\n",[35,6667,6668,6671,6674],{"class":37,"line":92},[35,6669,6670],{"class":359},"    p",[35,6672,6673],{"class":495},"=&",[35,6675,6531],{"class":359},[35,6677,6678,6680,6682,6685,6688,6690,6692],{"class":37,"line":101},[35,6679,1912],{"class":359},[35,6681,1538],{"class":495},[35,6683,6684],{"class":306},"\"a的地址为：\"",[35,6686,6687],{"class":495},"\u003C\u003C&",[35,6689,734],{"class":359},[35,6691,1538],{"class":495},[35,6693,1560],{"class":359},[35,6695,6696,6698,6700,6703,6705,6707,6709,6711],{"class":37,"line":110},[35,6697,1912],{"class":359},[35,6699,1538],{"class":495},[35,6701,6702],{"class":306},"\"指针p为：\"",[35,6704,1538],{"class":495},[35,6706,21],{"class":359},[35,6708,1538],{"class":495},[35,6710,1603],{"class":359},[35,6712,6713],{"class":41},"\u002F\u002F指针p表示的就是a的地址\n",[35,6715,6716],{"class":37,"line":119},[35,6717,141],{"emptyLinePlaceholder":140},[35,6719,6720],{"class":37,"line":128},[35,6721,6722],{"class":41},"    \u002F\u002F2.使用指针\n",[35,6724,6725],{"class":37,"line":137},[35,6726,6727],{"class":41},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[35,6729,6730],{"class":37,"line":144},[35,6731,6732],{"class":41},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[35,6734,6735,6738,6740,6742,6745],{"class":37,"line":150},[35,6736,6737],{"class":495},"    *",[35,6739,21],{"class":359},[35,6741,544],{"class":495},[35,6743,6744],{"class":58},"1000",[35,6746,1655],{"class":359},[35,6748,6749,6751,6754,6756,6758,6760],{"class":37,"line":159},[35,6750,1912],{"class":359},[35,6752,6753],{"class":495},"\u003C\u003C*",[35,6755,21],{"class":359},[35,6757,1538],{"class":495},[35,6759,1603],{"class":359},[35,6761,6762],{"class":41},"\u002F\u002F1000\n",[35,6764,6765,6767,6769,6771,6773,6775],{"class":37,"line":168},[35,6766,1912],{"class":359},[35,6768,1538],{"class":495},[35,6770,734],{"class":359},[35,6772,1538],{"class":495},[35,6774,1603],{"class":359},[35,6776,6762],{"class":41},[35,6778,6779],{"class":37,"line":177},[35,6780,1926],{"class":359},[438,6782,6784],{"id":6783},"_32指针所占的内存空间","3.2指针所占的内存空间",[21,6786,6787],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[21,6789,6790],{},"在32位操作系统下：占用4个字节空间",[21,6792,6793],{},"在64位操作系统下：占用8个字节空间",[21,6795,6796],{},"上方是不管啥数据类型的",[25,6798,6800],{"className":486,"code":6799,"language":488,"meta":30,"style":30},"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",[32,6801,6802,6810,6814,6819,6831,6836,6841,6846,6859,6881,6907,6933],{"__ignoreMap":30},[35,6803,6804,6806,6808],{"class":37,"line":38},[35,6805,502],{"class":495},[35,6807,2314],{"class":48},[35,6809,2317],{"class":359},[35,6811,6812],{"class":37,"line":45},[35,6813,1907],{"class":359},[35,6815,6816],{"class":37,"line":55},[35,6817,6818],{"class":41},"    \u002F\u002F指针所占内存空间\n",[35,6820,6821,6823,6825,6827,6829],{"class":37,"line":65},[35,6822,2326],{"class":495},[35,6824,1759],{"class":359},[35,6826,544],{"class":495},[35,6828,940],{"class":58},[35,6830,1655],{"class":359},[35,6832,6833],{"class":37,"line":74},[35,6834,6835],{"class":41},"    \u002F\u002Fint *p;\n",[35,6837,6838],{"class":37,"line":83},[35,6839,6840],{"class":41},"    \u002F\u002Fp=&a;\n",[35,6842,6843],{"class":37,"line":92},[35,6844,6845],{"class":41},"    \u002F\u002F上述可以写为以下：\n",[35,6847,6848,6850,6853,6855,6857],{"class":37,"line":101},[35,6849,2326],{"class":495},[35,6851,6852],{"class":495}," *",[35,6854,21],{"class":359},[35,6856,6673],{"class":495},[35,6858,6531],{"class":359},[35,6860,6861,6864,6866,6869,6871,6874,6876,6878],{"class":37,"line":110},[35,6862,6863],{"class":359},"    cout ",[35,6865,1538],{"class":495},[35,6867,6868],{"class":306},"\"sizeof(int *)\"",[35,6870,1733],{"class":495},[35,6872,6873],{"class":359},"(p)",[35,6875,1538],{"class":495},[35,6877,1603],{"class":359},[35,6879,6880],{"class":41},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[35,6882,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6904],{"class":37,"line":119},[35,6884,6863],{"class":359},[35,6886,1538],{"class":495},[35,6888,6868],{"class":306},[35,6890,1733],{"class":495},[35,6892,499],{"class":359},[35,6894,502],{"class":495},[35,6896,6852],{"class":495},[35,6898,923],{"class":359},[35,6900,1538],{"class":495},[35,6902,6903],{"class":359},"endl",[35,6905,6906],{"class":41},"  \u002F\u002F4字节(32位的话)\n",[35,6908,6909,6911,6913,6916,6918,6920,6922,6924,6926,6928,6930],{"class":37,"line":128},[35,6910,6863],{"class":359},[35,6912,1538],{"class":495},[35,6914,6915],{"class":306},"\"sizeof(char *)\"",[35,6917,1733],{"class":495},[35,6919,499],{"class":359},[35,6921,593],{"class":495},[35,6923,6852],{"class":495},[35,6925,923],{"class":359},[35,6927,1538],{"class":495},[35,6929,1603],{"class":359},[35,6931,6932],{"class":41}," \u002F\u002F4字节(32位的话)\n",[35,6934,6935],{"class":37,"line":137},[35,6936,1926],{"class":359},[438,6938,6940],{"id":6939},"_33空指针","3.3空指针",[21,6942,6943],{},"空指针：指针变量指向内存中编号为0的空间",[21,6945,6946],{},"用途：初始化指针变量",[21,6948,6949],{},"注意：空指针指向的内存是不可以访问的",[25,6951,6953],{"className":486,"code":6952,"language":488,"meta":30,"style":30},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[32,6954,6955,6963,6967,6972,6986,6991,7006,7011],{"__ignoreMap":30},[35,6956,6957,6959,6961],{"class":37,"line":38},[35,6958,502],{"class":495},[35,6960,2314],{"class":48},[35,6962,2317],{"class":359},[35,6964,6965],{"class":37,"line":45},[35,6966,1907],{"class":359},[35,6968,6969],{"class":37,"line":55},[35,6970,6971],{"class":41},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[35,6973,6974,6976,6978,6980,6982,6984],{"class":37,"line":65},[35,6975,2326],{"class":495},[35,6977,6852],{"class":495},[35,6979,21],{"class":359},[35,6981,544],{"class":495},[35,6983,2733],{"class":58},[35,6985,1655],{"class":359},[35,6987,6988],{"class":37,"line":74},[35,6989,6990],{"class":41},"    \u002F\u002F2.空指针不能进行访问\n",[35,6992,6993,6995,6997,6999,7001,7003],{"class":37,"line":83},[35,6994,6737],{"class":495},[35,6996,21],{"class":359},[35,6998,544],{"class":495},[35,7000,807],{"class":58},[35,7002,553],{"class":359},[35,7004,7005],{"class":41},"\u002F\u002F直接报错，压根不能访问\n",[35,7007,7008],{"class":37,"line":92},[35,7009,7010],{"class":41},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[35,7012,7013],{"class":37,"line":101},[35,7014,1926],{"class":359},[438,7016,7018],{"id":7017},"_34野指针","3.4野指针",[21,7020,7021],{},[645,7022,7023],{},"指针变量指向非法的内存空间",[25,7025,7027],{"className":486,"code":7026,"language":488,"meta":30,"style":30},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[32,7028,7029,7037,7041,7070,7075,7087],{"__ignoreMap":30},[35,7030,7031,7033,7035],{"class":37,"line":38},[35,7032,502],{"class":495},[35,7034,2314],{"class":48},[35,7036,2317],{"class":359},[35,7038,7039],{"class":37,"line":45},[35,7040,1907],{"class":359},[35,7042,7043,7045,7047,7049,7051,7053,7055,7057,7059,7062,7065,7067],{"class":37,"line":55},[35,7044,2326],{"class":495},[35,7046,6852],{"class":495},[35,7048,21],{"class":359},[35,7050,544],{"class":495},[35,7052,499],{"class":359},[35,7054,502],{"class":495},[35,7056,6852],{"class":495},[35,7058,923],{"class":359},[35,7060,7061],{"class":495},"0x",[35,7063,7064],{"class":58},"1100",[35,7066,553],{"class":359},[35,7068,7069],{"class":41}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[35,7071,7072],{"class":37,"line":65},[35,7073,7074],{"class":41},"    \u002F\u002F访问野指针报错\n",[35,7076,7077,7079,7081,7083,7085],{"class":37,"line":74},[35,7078,1912],{"class":359},[35,7080,6753],{"class":495},[35,7082,21],{"class":359},[35,7084,1538],{"class":495},[35,7086,1560],{"class":359},[35,7088,7089],{"class":37,"line":83},[35,7090,1926],{"class":359},[21,7092,7093],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[438,7095,7097],{"id":7096},"_35const修饰指针","3.5const修饰指针",[21,7099,7100],{},"三种情况：",[1501,7102,7103,7106,7109],{},[17,7104,7105],{},"const修饰指针 常量指针",[17,7107,7108],{},"const修饰常量 指针常量",[17,7110,7111],{},"const即修饰指针，又修饰常量",[14,7113,7114],{},[17,7115,7116],{},"常量指针",[25,7118,7120],{"className":486,"code":7119,"language":488,"meta":30,"style":30},"const int *p=&a;\n",[32,7121,7122],{"__ignoreMap":30},[35,7123,7124,7127,7129,7131,7133,7135],{"class":37,"line":38},[35,7125,7126],{"class":495},"const",[35,7128,2723],{"class":495},[35,7130,6852],{"class":495},[35,7132,21],{"class":359},[35,7134,6673],{"class":495},[35,7136,6531],{"class":359},[21,7138,7139],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[14,7141,7142],{"start":45},[17,7143,7144],{},"指针常量",[25,7146,7148],{"className":486,"code":7147,"language":488,"meta":30,"style":30},"int *const p=&a;\n",[32,7149,7150],{"__ignoreMap":30},[35,7151,7152,7154,7157,7160,7162],{"class":37,"line":38},[35,7153,502],{"class":495},[35,7155,7156],{"class":495}," *const",[35,7158,7159],{"class":359}," p",[35,7161,6673],{"class":495},[35,7163,6531],{"class":359},[21,7165,7166],{},"指针的指向不可以改，指针指向的值可以改",[14,7168,7169],{"start":55},[17,7170,7111],{},[25,7172,7174],{"className":486,"code":7173,"language":488,"meta":30,"style":30},"const int *const p=&a;\n",[32,7175,7176],{"__ignoreMap":30},[35,7177,7178,7180,7182,7184,7186,7188],{"class":37,"line":38},[35,7179,7126],{"class":495},[35,7181,2723],{"class":495},[35,7183,7156],{"class":495},[35,7185,7159],{"class":359},[35,7187,6673],{"class":495},[35,7189,6531],{"class":359},[21,7191,7192],{},"指针的指向和指针指向的值都不可以改变",[438,7194,7196],{"id":7195},"_36指针和数组","3.6指针和数组",[25,7198,7200],{"className":486,"code":7199,"language":488,"meta":30,"style":30},"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",[32,7201,7202,7210,7214,7219,7273,7294,7310,7326,7337,7354,7359,7373,7399,7403,7415,7424,7428],{"__ignoreMap":30},[35,7203,7204,7206,7208],{"class":37,"line":38},[35,7205,502],{"class":495},[35,7207,2314],{"class":48},[35,7209,2317],{"class":359},[35,7211,7212],{"class":37,"line":45},[35,7213,1907],{"class":359},[35,7215,7216],{"class":37,"line":55},[35,7217,7218],{"class":41},"    \u002F\u002F利用指针访问数组中的元素\n",[35,7220,7221,7223,7225,7227,7229,7231,7233,7235,7237,7239,7241,7243,7245,7247,7249,7251,7253,7255,7257,7259,7261,7263,7265,7267,7269,7271],{"class":37,"line":65},[35,7222,2326],{"class":495},[35,7224,4296],{"class":359},[35,7226,940],{"class":58},[35,7228,1434],{"class":359},[35,7230,544],{"class":495},[35,7232,1390],{"class":359},[35,7234,713],{"class":58},[35,7236,872],{"class":359},[35,7238,574],{"class":58},[35,7240,872],{"class":359},[35,7242,568],{"class":58},[35,7244,872],{"class":359},[35,7246,789],{"class":58},[35,7248,872],{"class":359},[35,7250,372],{"class":58},[35,7252,872],{"class":359},[35,7254,408],{"class":58},[35,7256,872],{"class":359},[35,7258,863],{"class":58},[35,7260,872],{"class":359},[35,7262,889],{"class":58},[35,7264,872],{"class":359},[35,7266,914],{"class":58},[35,7268,872],{"class":359},[35,7270,940],{"class":58},[35,7272,4329],{"class":359},[35,7274,7275,7277,7279,7282,7284,7286,7288,7290,7292],{"class":37,"line":74},[35,7276,1912],{"class":359},[35,7278,1538],{"class":495},[35,7280,7281],{"class":306},"\"数组的第一个元素为：\"",[35,7283,1538],{"class":495},[35,7285,4240],{"class":359},[35,7287,687],{"class":58},[35,7289,1434],{"class":359},[35,7291,1538],{"class":495},[35,7293,1560],{"class":359},[35,7295,7296,7298,7300,7302,7304,7307],{"class":37,"line":83},[35,7297,2326],{"class":495},[35,7299,6852],{"class":495},[35,7301,21],{"class":359},[35,7303,544],{"class":495},[35,7305,7306],{"class":359},"arr;",[35,7308,7309],{"class":41},"\u002F\u002F注意数才要加取地址符号&\n",[35,7311,7312,7314,7316,7318,7320,7322,7324],{"class":37,"line":92},[35,7313,1912],{"class":359},[35,7315,1538],{"class":495},[35,7317,7281],{"class":306},[35,7319,6753],{"class":495},[35,7321,21],{"class":359},[35,7323,1538],{"class":495},[35,7325,1560],{"class":359},[35,7327,7328,7330,7332,7334],{"class":37,"line":101},[35,7329,6670],{"class":359},[35,7331,2633],{"class":495},[35,7333,553],{"class":359},[35,7335,7336],{"class":41}," \u002F\u002F让指针向后偏移4个字节\n",[35,7338,7339,7341,7343,7346,7348,7350,7352],{"class":37,"line":110},[35,7340,1912],{"class":359},[35,7342,1538],{"class":495},[35,7344,7345],{"class":306},"\"数组的第二个元素为：\"",[35,7347,6753],{"class":495},[35,7349,21],{"class":359},[35,7351,1538],{"class":495},[35,7353,1560],{"class":359},[35,7355,7356],{"class":37,"line":119},[35,7357,7358],{"class":41},"    \u002F\u002F利用指针遍历数组\n",[35,7360,7361,7363,7365,7368,7370],{"class":37,"line":128},[35,7362,2326],{"class":495},[35,7364,6852],{"class":495},[35,7366,7367],{"class":359},"p2",[35,7369,544],{"class":495},[35,7371,7372],{"class":359},"arr;\n",[35,7374,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397],{"class":37,"line":137},[35,7376,3535],{"class":495},[35,7378,2012],{"class":359},[35,7380,502],{"class":495},[35,7382,3366],{"class":359},[35,7384,544],{"class":495},[35,7386,687],{"class":58},[35,7388,3373],{"class":359},[35,7390,1404],{"class":495},[35,7392,940],{"class":58},[35,7394,3373],{"class":359},[35,7396,2633],{"class":495},[35,7398,505],{"class":359},[35,7400,7401],{"class":37,"line":144},[35,7402,2371],{"class":359},[35,7404,7405,7407,7409,7411,7413],{"class":37,"line":150},[35,7406,3785],{"class":359},[35,7408,6753],{"class":495},[35,7410,7367],{"class":359},[35,7412,1538],{"class":495},[35,7414,1560],{"class":359},[35,7416,7417,7420,7422],{"class":37,"line":159},[35,7418,7419],{"class":359},"        p2",[35,7421,2633],{"class":495},[35,7423,1655],{"class":359},[35,7425,7426],{"class":37,"line":168},[35,7427,2528],{"class":359},[35,7429,7430],{"class":37,"line":177},[35,7431,1926],{"class":359},[438,7433,7435],{"id":7434},"_37指针和函数","3.7指针和函数",[21,7437,7438],{},"利用指针做函数参数，可以修改实参的值",[21,7440,7441],{},"值传递：只改变形参，不改变实参",[21,7443,7444],{},"地址传递：",[25,7446,7448],{"className":486,"code":7447,"language":488,"meta":30,"style":30},"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",[32,7449,7450,7475,7479,7491,7502,7512,7516,7524,7528,7540,7552,7557,7573,7588,7603],{"__ignoreMap":30},[35,7451,7452,7454,7456,7458,7460,7462,7465,7467,7469,7471,7473],{"class":37,"line":38},[35,7453,5698],{"class":495},[35,7455,5701],{"class":48},[35,7457,499],{"class":359},[35,7459,502],{"class":495},[35,7461,6852],{"class":495},[35,7463,7464],{"class":5550},"p1",[35,7466,872],{"class":359},[35,7468,502],{"class":495},[35,7470,6852],{"class":495},[35,7472,7367],{"class":5550},[35,7474,505],{"class":359},[35,7476,7477],{"class":37,"line":45},[35,7478,1907],{"class":359},[35,7480,7481,7483,7485,7488],{"class":37,"line":55},[35,7482,2326],{"class":495},[35,7484,4589],{"class":359},[35,7486,7487],{"class":495},"=*",[35,7489,7490],{"class":359},"p1;\n",[35,7492,7493,7495,7497,7499],{"class":37,"line":65},[35,7494,6737],{"class":495},[35,7496,7464],{"class":359},[35,7498,7487],{"class":495},[35,7500,7501],{"class":359},"p2;\n",[35,7503,7504,7506,7508,7510],{"class":37,"line":74},[35,7505,6737],{"class":495},[35,7507,7367],{"class":359},[35,7509,544],{"class":495},[35,7511,4614],{"class":359},[35,7513,7514],{"class":37,"line":83},[35,7515,1926],{"class":359},[35,7517,7518,7520,7522],{"class":37,"line":92},[35,7519,502],{"class":495},[35,7521,2314],{"class":48},[35,7523,2317],{"class":359},[35,7525,7526],{"class":37,"line":101},[35,7527,1907],{"class":359},[35,7529,7530,7532,7534,7536,7538],{"class":37,"line":110},[35,7531,2326],{"class":495},[35,7533,1759],{"class":359},[35,7535,544],{"class":495},[35,7537,940],{"class":58},[35,7539,1655],{"class":359},[35,7541,7542,7544,7546,7548,7550],{"class":37,"line":119},[35,7543,2326],{"class":495},[35,7545,3167],{"class":359},[35,7547,544],{"class":495},[35,7549,1194],{"class":58},[35,7551,1655],{"class":359},[35,7553,7554],{"class":37,"line":128},[35,7555,7556],{"class":41},"    \u002F\u002F地址传递\n",[35,7558,7559,7561,7563,7565,7568,7570],{"class":37,"line":137},[35,7560,5895],{"class":48},[35,7562,499],{"class":359},[35,7564,847],{"class":495},[35,7566,7567],{"class":359},"a,",[35,7569,847],{"class":495},[35,7571,7572],{"class":359},"b);\n",[35,7574,7575,7577,7579,7581,7583,7585],{"class":37,"line":144},[35,7576,1912],{"class":359},[35,7578,1538],{"class":495},[35,7580,734],{"class":359},[35,7582,1538],{"class":495},[35,7584,1603],{"class":359},[35,7586,7587],{"class":41},"\u002F\u002F20\n",[35,7589,7590,7592,7594,7596,7598,7600],{"class":37,"line":150},[35,7591,1912],{"class":359},[35,7593,1538],{"class":495},[35,7595,759],{"class":359},[35,7597,1538],{"class":495},[35,7599,1603],{"class":359},[35,7601,7602],{"class":41},"\u002F\u002F10\n",[35,7604,7605],{"class":37,"line":159},[35,7606,1926],{"class":359},[21,7608,7609],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[438,7611,7613],{"id":7612},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[21,7615,7616],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[21,7618,7619,7620,7622],{},"例如数组：int arr",[35,7621,940],{},"={4,3,6,9,1,2,10,8,7,5}",[25,7624,7626],{"className":486,"code":7625,"language":488,"meta":30,"style":30},"#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",[32,7627,7628,7634,7644,7668,7672,7703,7707,7741,7745,7763,7767,7778,7793,7808,7812,7816,7820,7824,7828,7836,7840,7845,7899,7911,7923,7928,7936,7940,7945,7970,7974,7989,7998,8002],{"__ignoreMap":30},[35,7629,7630,7632],{"class":37,"line":38},[35,7631,2291],{"class":495},[35,7633,2294],{"class":306},[35,7635,7636,7638,7640,7642],{"class":37,"line":45},[35,7637,2299],{"class":495},[35,7639,2302],{"class":495},[35,7641,2305],{"class":48},[35,7643,1655],{"class":359},[35,7645,7646,7648,7651,7653,7655,7657,7659,7661,7663,7666],{"class":37,"line":55},[35,7647,5698],{"class":495},[35,7649,7650],{"class":48}," bubbleSort",[35,7652,499],{"class":359},[35,7654,502],{"class":495},[35,7656,6852],{"class":495},[35,7658,21],{"class":5550},[35,7660,872],{"class":359},[35,7662,502],{"class":495},[35,7664,7665],{"class":5550}," len",[35,7667,505],{"class":359},[35,7669,7670],{"class":37,"line":65},[35,7671,1907],{"class":359},[35,7673,7674,7676,7678,7680,7682,7684,7686,7688,7690,7693,7695,7697,7699,7701],{"class":37,"line":74},[35,7675,3535],{"class":495},[35,7677,499],{"class":359},[35,7679,502],{"class":495},[35,7681,3366],{"class":359},[35,7683,544],{"class":495},[35,7685,687],{"class":58},[35,7687,3373],{"class":359},[35,7689,1404],{"class":495},[35,7691,7692],{"class":359},"len",[35,7694,1026],{"class":495},[35,7696,713],{"class":58},[35,7698,3373],{"class":359},[35,7700,2633],{"class":495},[35,7702,505],{"class":359},[35,7704,7705],{"class":37,"line":83},[35,7706,2371],{"class":359},[35,7708,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7729,7731,7733,7735,7737,7739],{"class":37,"line":92},[35,7710,3737],{"class":495},[35,7712,499],{"class":359},[35,7714,502],{"class":495},[35,7716,3744],{"class":359},[35,7718,544],{"class":495},[35,7720,687],{"class":58},[35,7722,3751],{"class":359},[35,7724,1404],{"class":495},[35,7726,7692],{"class":359},[35,7728,1026],{"class":495},[35,7730,935],{"class":359},[35,7732,1026],{"class":495},[35,7734,713],{"class":58},[35,7736,3751],{"class":359},[35,7738,2633],{"class":495},[35,7740,505],{"class":359},[35,7742,7743],{"class":37,"line":101},[35,7744,2850],{"class":359},[35,7746,7747,7749,7752,7754,7757,7759,7761],{"class":37,"line":110},[35,7748,4976],{"class":495},[35,7750,7751],{"class":359},"(p[j]",[35,7753,1454],{"class":495},[35,7755,7756],{"class":359},"p[j",[35,7758,975],{"class":495},[35,7760,713],{"class":58},[35,7762,4991],{"class":359},[35,7764,7765],{"class":37,"line":119},[35,7766,4996],{"class":359},[35,7768,7769,7771,7773,7775],{"class":37,"line":128},[35,7770,5001],{"class":495},[35,7772,4589],{"class":359},[35,7774,544],{"class":495},[35,7776,7777],{"class":359},"p[j];\n",[35,7779,7780,7783,7785,7787,7789,7791],{"class":37,"line":137},[35,7781,7782],{"class":359},"                p[j]",[35,7784,544],{"class":495},[35,7786,7756],{"class":359},[35,7788,975],{"class":495},[35,7790,713],{"class":58},[35,7792,5024],{"class":359},[35,7794,7795,7798,7800,7802,7804,7806],{"class":37,"line":144},[35,7796,7797],{"class":359},"                p[j",[35,7799,975],{"class":495},[35,7801,713],{"class":58},[35,7803,1434],{"class":359},[35,7805,544],{"class":495},[35,7807,4614],{"class":359},[35,7809,7810],{"class":37,"line":150},[35,7811,5044],{"class":359},[35,7813,7814],{"class":37,"line":159},[35,7815,2869],{"class":359},[35,7817,7818],{"class":37,"line":168},[35,7819,2528],{"class":359},[35,7821,7822],{"class":37,"line":177},[35,7823,1926],{"class":359},[35,7825,7826],{"class":37,"line":182},[35,7827,141],{"emptyLinePlaceholder":140},[35,7829,7830,7832,7834],{"class":37,"line":188},[35,7831,502],{"class":495},[35,7833,2314],{"class":48},[35,7835,2317],{"class":359},[35,7837,7838],{"class":37,"line":197},[35,7839,1907],{"class":359},[35,7841,7842],{"class":37,"line":206},[35,7843,7844],{"class":41},"    \u002F\u002F 1.创建数组\n",[35,7846,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897],{"class":37,"line":215},[35,7848,2326],{"class":495},[35,7850,4296],{"class":359},[35,7852,940],{"class":58},[35,7854,1434],{"class":359},[35,7856,544],{"class":495},[35,7858,1390],{"class":359},[35,7860,789],{"class":58},[35,7862,872],{"class":359},[35,7864,568],{"class":58},[35,7866,872],{"class":359},[35,7868,408],{"class":58},[35,7870,872],{"class":359},[35,7872,914],{"class":58},[35,7874,872],{"class":359},[35,7876,713],{"class":58},[35,7878,872],{"class":359},[35,7880,574],{"class":58},[35,7882,872],{"class":359},[35,7884,940],{"class":58},[35,7886,872],{"class":359},[35,7888,889],{"class":58},[35,7890,872],{"class":359},[35,7892,863],{"class":58},[35,7894,872],{"class":359},[35,7896,372],{"class":58},[35,7898,4329],{"class":359},[35,7900,7901,7903,7905,7907,7909],{"class":37,"line":224},[35,7902,2326],{"class":495},[35,7904,7665],{"class":359},[35,7906,544],{"class":495},[35,7908,940],{"class":58},[35,7910,1655],{"class":359},[35,7912,7913,7915,7917,7919,7921],{"class":37,"line":233},[35,7914,2326],{"class":495},[35,7916,6852],{"class":495},[35,7918,21],{"class":359},[35,7920,544],{"class":495},[35,7922,7372],{"class":359},[35,7924,7925],{"class":37,"line":238},[35,7926,7927],{"class":41},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[35,7929,7930,7933],{"class":37,"line":244},[35,7931,7932],{"class":48},"    bubbleSort",[35,7934,7935],{"class":359},"(p,len);\n",[35,7937,7938],{"class":37,"line":253},[35,7939,141],{"emptyLinePlaceholder":140},[35,7941,7942],{"class":37,"line":262},[35,7943,7944],{"class":41},"    \u002F\u002F 3.打印排序后的数组\n",[35,7946,7947,7949,7951,7953,7955,7957,7959,7961,7963,7966,7968],{"class":37,"line":271},[35,7948,3535],{"class":495},[35,7950,2012],{"class":359},[35,7952,502],{"class":495},[35,7954,3366],{"class":359},[35,7956,544],{"class":495},[35,7958,687],{"class":58},[35,7960,3548],{"class":359},[35,7962,1404],{"class":495},[35,7964,7965],{"class":359},"len; i",[35,7967,2633],{"class":495},[35,7969,505],{"class":359},[35,7971,7972],{"class":37,"line":280},[35,7973,2371],{"class":359},[35,7975,7976,7978,7980,7982,7984,7987],{"class":37,"line":289},[35,7977,3785],{"class":359},[35,7979,6753],{"class":495},[35,7981,21],{"class":359},[35,7983,1538],{"class":495},[35,7985,7986],{"class":306},"\"\"",[35,7988,1655],{"class":359},[35,7990,7991,7994,7996],{"class":37,"line":294},[35,7992,7993],{"class":359},"        p",[35,7995,2633],{"class":495},[35,7997,1655],{"class":359},[35,7999,8000],{"class":37,"line":300},[35,8001,2528],{"class":359},[35,8003,8004],{"class":37,"line":313},[35,8005,1926],{"class":359},[416,8007,8008],{},"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":30,"searchDepth":45,"depth":45,"links":8010},[8011,8012,8013,8014,8015,8016,8017,8018],{"id":6617,"depth":45,"text":6618},{"id":6783,"depth":45,"text":6784},{"id":6939,"depth":45,"text":6940},{"id":7017,"depth":45,"text":7018},{"id":7096,"depth":45,"text":7097},{"id":7195,"depth":45,"text":7196},{"id":7434,"depth":45,"text":7435},{"id":7612,"depth":45,"text":7613},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6606,"description":6614},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8025,"title":8026,"body":8027,"description":8034,"extension":422,"meta":11008,"navigation":140,"path":11009,"seo":11010,"stem":11011,"__hash__":11012},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8028,"toc":10999},[8029,8032,8035,8039,8042,8045,8056,8394,8397,8401,8404,8411,8666,8670,8673,8676,8831,8835,8838,8841,9047,9051,9054,9357,9360,9368,9372,9375,9526,9528,9539,9596,9600,9605,10262,10270,10273,10367,10370,10990,10996],[10,8030,8026],{"id":8031},"_4结构体",[21,8033,8034],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[438,8036,8038],{"id":8037},"_41结构体定义与使用","4.1结构体定义与使用",[21,8040,8041],{},"语法：struct 结构体名 {结构体成员列表}；",[21,8043,8044],{},"通过结构体创建变量的方式：",[1501,8046,8047,8050,8053],{},[17,8048,8049],{},"struct 结构体名 变量名",[17,8051,8052],{},"struct 结构体名 变量名={成员1值，成员2值...}",[17,8054,8055],{},"定义结构体时顺便创建变量",[25,8057,8059],{"className":486,"code":8058,"language":488,"meta":30,"style":30},"#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",[32,8060,8061,8067,8077,8084,8089,8097,8101,8106,8110,8115,8120,8125,8132,8137,8144,8148,8155,8159,8163,8167,8171,8175,8179,8185,8189,8195,8203,8211,8215,8220,8225,8236,8241,8253,8264,8275,8280,8304,8309,8315,8342,8347,8353,8365,8377,8389],{"__ignoreMap":30},[35,8062,8063,8065],{"class":37,"line":38},[35,8064,2291],{"class":495},[35,8066,2294],{"class":306},[35,8068,8069,8071,8073,8075],{"class":37,"line":45},[35,8070,2299],{"class":495},[35,8072,2302],{"class":495},[35,8074,2305],{"class":48},[35,8076,1655],{"class":359},[35,8078,8079,8081],{"class":37,"line":55},[35,8080,2291],{"class":495},[35,8082,8083],{"class":306},"\u003Cstring>\n",[35,8085,8086],{"class":37,"line":65},[35,8087,8088],{"class":41},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[35,8090,8091,8094],{"class":37,"line":74},[35,8092,8093],{"class":495},"struct",[35,8095,8096],{"class":48}," Student\n",[35,8098,8099],{"class":37,"line":83},[35,8100,1907],{"class":359},[35,8102,8103],{"class":37,"line":92},[35,8104,8105],{"class":41},"    \u002F\u002F成员列表\n",[35,8107,8108],{"class":37,"line":101},[35,8109,141],{"emptyLinePlaceholder":140},[35,8111,8112],{"class":37,"line":110},[35,8113,8114],{"class":41},"    \u002F\u002F姓名\n",[35,8116,8117],{"class":37,"line":119},[35,8118,8119],{"class":359},"    string name;\n",[35,8121,8122],{"class":37,"line":128},[35,8123,8124],{"class":41},"    \u002F\u002F年龄\n",[35,8126,8127,8129],{"class":37,"line":137},[35,8128,2326],{"class":495},[35,8130,8131],{"class":359}," age;\n",[35,8133,8134],{"class":37,"line":144},[35,8135,8136],{"class":41},"    \u002F\u002F分数\n",[35,8138,8139,8141],{"class":37,"line":150},[35,8140,2326],{"class":495},[35,8142,8143],{"class":359}," score;\n",[35,8145,8146],{"class":37,"line":159},[35,8147,4329],{"class":359},[35,8149,8150,8152],{"class":37,"line":168},[35,8151,8093],{"class":495},[35,8153,8154],{"class":48}," School\n",[35,8156,8157],{"class":37,"line":177},[35,8158,1907],{"class":359},[35,8160,8161],{"class":37,"line":182},[35,8162,8105],{"class":41},[35,8164,8165],{"class":37,"line":188},[35,8166,141],{"emptyLinePlaceholder":140},[35,8168,8169],{"class":37,"line":197},[35,8170,8114],{"class":41},[35,8172,8173],{"class":37,"line":206},[35,8174,8119],{"class":359},[35,8176,8177],{"class":37,"line":215},[35,8178,8124],{"class":41},[35,8180,8181,8183],{"class":37,"line":224},[35,8182,2326],{"class":495},[35,8184,8131],{"class":359},[35,8186,8187],{"class":37,"line":233},[35,8188,8136],{"class":41},[35,8190,8191,8193],{"class":37,"line":238},[35,8192,2326],{"class":495},[35,8194,8143],{"class":359},[35,8196,8197,8200],{"class":37,"line":244},[35,8198,8199],{"class":359},"} s3;",[35,8201,8202],{"class":41}," \u002F\u002F创建结构体时就创建了变量\n",[35,8204,8205,8207,8209],{"class":37,"line":253},[35,8206,502],{"class":495},[35,8208,2314],{"class":48},[35,8210,2317],{"class":359},[35,8212,8213],{"class":37,"line":262},[35,8214,1907],{"class":359},[35,8216,8217],{"class":37,"line":271},[35,8218,8219],{"class":41},"    \u002F\u002F2.通过学生类型创建具体学生\n",[35,8221,8222],{"class":37,"line":280},[35,8223,8224],{"class":41},"    \u002F\u002F2.1 struct Student s1;\n",[35,8226,8227,8230,8233],{"class":37,"line":289},[35,8228,8229],{"class":495},"    struct",[35,8231,8232],{"class":48}," Student",[35,8234,8235],{"class":359}," s1;\n",[35,8237,8238],{"class":37,"line":294},[35,8239,8240],{"class":41},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[35,8242,8243,8246,8248,8251],{"class":37,"line":300},[35,8244,8245],{"class":359},"    s1.name",[35,8247,544],{"class":495},[35,8249,8250],{"class":306},"\"张三\"",[35,8252,1655],{"class":359},[35,8254,8255,8258,8260,8262],{"class":37,"line":313},[35,8256,8257],{"class":359},"    s1.age",[35,8259,544],{"class":495},[35,8261,1144],{"class":58},[35,8263,1655],{"class":359},[35,8265,8266,8269,8271,8273],{"class":37,"line":324},[35,8267,8268],{"class":359},"    s1.score",[35,8270,544],{"class":495},[35,8272,750],{"class":58},[35,8274,1655],{"class":359},[35,8276,8277],{"class":37,"line":2955},[35,8278,8279],{"class":41},"    \u002F\u002F输出结果\n",[35,8281,8283,8285,8287,8290,8292,8295,8297,8300,8302],{"class":37,"line":8282},37,[35,8284,1912],{"class":359},[35,8286,1538],{"class":495},[35,8288,8289],{"class":359},"s1.name",[35,8291,1538],{"class":495},[35,8293,8294],{"class":359},"s1.age",[35,8296,1538],{"class":495},[35,8298,8299],{"class":359},"s1.score",[35,8301,1538],{"class":495},[35,8303,1560],{"class":359},[35,8305,8307],{"class":37,"line":8306},38,[35,8308,141],{"emptyLinePlaceholder":140},[35,8310,8312],{"class":37,"line":8311},39,[35,8313,8314],{"class":41},"    \u002F\u002F2.2 struct Student s2={...}\n",[35,8316,8318,8320,8322,8325,8327,8329,8332,8334,8336,8338,8340],{"class":37,"line":8317},40,[35,8319,8229],{"class":495},[35,8321,8232],{"class":48},[35,8323,8324],{"class":359}," s2",[35,8326,544],{"class":495},[35,8328,1390],{"class":359},[35,8330,8331],{"class":306},"\"王五\"",[35,8333,872],{"class":359},[35,8335,1144],{"class":58},[35,8337,872],{"class":359},[35,8339,750],{"class":58},[35,8341,4329],{"class":359},[35,8343,8345],{"class":37,"line":8344},41,[35,8346,141],{"emptyLinePlaceholder":140},[35,8348,8350],{"class":37,"line":8349},42,[35,8351,8352],{"class":41},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[35,8354,8356,8359,8361,8363],{"class":37,"line":8355},43,[35,8357,8358],{"class":359},"    s3.name",[35,8360,544],{"class":495},[35,8362,4012],{"class":306},[35,8364,1655],{"class":359},[35,8366,8368,8371,8373,8375],{"class":37,"line":8367},44,[35,8369,8370],{"class":359},"    s3.age",[35,8372,544],{"class":495},[35,8374,1144],{"class":58},[35,8376,1655],{"class":359},[35,8378,8380,8383,8385,8387],{"class":37,"line":8379},45,[35,8381,8382],{"class":359},"    s3.score",[35,8384,544],{"class":495},[35,8386,1194],{"class":58},[35,8388,1655],{"class":359},[35,8390,8392],{"class":37,"line":8391},46,[35,8393,1926],{"class":359},[21,8395,8396],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[438,8398,8400],{"id":8399},"_42结构体数组","4.2结构体数组",[21,8402,8403],{},"将自定义的结构体放入到数组中方便维护",[21,8405,8406,8407,8410],{},"语法：struct 结构体名 数组名",[35,8408,8409],{},"元素个数","={ {}，{},...{} };",[25,8412,8414],{"className":486,"code":8413,"language":488,"meta":30,"style":30},"#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",[32,8415,8416,8422,8432,8438,8443,8449,8453,8457,8463,8469,8473,8477,8485,8489,8494,8509,8513,8529,8545,8549,8554,8570,8585,8600,8605,8631,8635,8658,8662],{"__ignoreMap":30},[35,8417,8418,8420],{"class":37,"line":38},[35,8419,2291],{"class":495},[35,8421,2294],{"class":306},[35,8423,8424,8426,8428,8430],{"class":37,"line":45},[35,8425,2299],{"class":495},[35,8427,2302],{"class":495},[35,8429,2305],{"class":48},[35,8431,1655],{"class":359},[35,8433,8434,8436],{"class":37,"line":55},[35,8435,2291],{"class":495},[35,8437,8083],{"class":306},[35,8439,8440],{"class":37,"line":65},[35,8441,8442],{"class":41},"\u002F\u002F1.定义结构体\n",[35,8444,8445,8447],{"class":37,"line":74},[35,8446,8093],{"class":495},[35,8448,8096],{"class":48},[35,8450,8451],{"class":37,"line":83},[35,8452,1907],{"class":359},[35,8454,8455],{"class":37,"line":92},[35,8456,8119],{"class":359},[35,8458,8459,8461],{"class":37,"line":101},[35,8460,2326],{"class":495},[35,8462,8131],{"class":359},[35,8464,8465,8467],{"class":37,"line":110},[35,8466,2326],{"class":495},[35,8468,8143],{"class":359},[35,8470,8471],{"class":37,"line":119},[35,8472,141],{"emptyLinePlaceholder":140},[35,8474,8475],{"class":37,"line":128},[35,8476,4329],{"class":359},[35,8478,8479,8481,8483],{"class":37,"line":137},[35,8480,502],{"class":495},[35,8482,2314],{"class":48},[35,8484,2317],{"class":359},[35,8486,8487],{"class":37,"line":144},[35,8488,1907],{"class":359},[35,8490,8491],{"class":37,"line":150},[35,8492,8493],{"class":41},"    \u002F\u002F2.创建结构体数组\n",[35,8495,8496,8498,8500,8503,8505,8507],{"class":37,"line":159},[35,8497,8229],{"class":495},[35,8499,8232],{"class":48},[35,8501,8502],{"class":359}," stuArray[",[35,8504,574],{"class":58},[35,8506,1434],{"class":359},[35,8508,5242],{"class":495},[35,8510,8511],{"class":37,"line":168},[35,8512,2371],{"class":359},[35,8514,8515,8517,8519,8521,8523,8525,8527],{"class":37,"line":177},[35,8516,5251],{"class":359},[35,8518,8250],{"class":306},[35,8520,872],{"class":359},[35,8522,1144],{"class":58},[35,8524,872],{"class":359},[35,8526,807],{"class":58},[35,8528,5264],{"class":359},[35,8530,8531,8533,8535,8537,8539,8541,8543],{"class":37,"line":182},[35,8532,5251],{"class":359},[35,8534,4012],{"class":306},[35,8536,872],{"class":359},[35,8538,1069],{"class":58},[35,8540,872],{"class":359},[35,8542,1069],{"class":58},[35,8544,1926],{"class":359},[35,8546,8547],{"class":37,"line":188},[35,8548,2528],{"class":359},[35,8550,8551],{"class":37,"line":197},[35,8552,8553],{"class":41},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[35,8555,8556,8559,8561,8564,8566,8568],{"class":37,"line":206},[35,8557,8558],{"class":359},"    stuArray[",[35,8560,713],{"class":58},[35,8562,8563],{"class":359},"].name",[35,8565,544],{"class":495},[35,8567,4035],{"class":306},[35,8569,1655],{"class":359},[35,8571,8572,8574,8576,8579,8581,8583],{"class":37,"line":215},[35,8573,8558],{"class":359},[35,8575,713],{"class":58},[35,8577,8578],{"class":359},"].age",[35,8580,544],{"class":495},[35,8582,574],{"class":58},[35,8584,1655],{"class":359},[35,8586,8587,8589,8591,8594,8596,8598],{"class":37,"line":224},[35,8588,8558],{"class":359},[35,8590,713],{"class":58},[35,8592,8593],{"class":359},"].score",[35,8595,544],{"class":495},[35,8597,574],{"class":58},[35,8599,1655],{"class":359},[35,8601,8602],{"class":37,"line":233},[35,8603,8604],{"class":41},"    \u002F\u002F4.遍历结构体数组\n",[35,8606,8607,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8629],{"class":37,"line":238},[35,8608,3535],{"class":495},[35,8610,2012],{"class":359},[35,8612,502],{"class":495},[35,8614,3366],{"class":359},[35,8616,544],{"class":495},[35,8618,687],{"class":58},[35,8620,3373],{"class":359},[35,8622,1404],{"class":495},[35,8624,574],{"class":58},[35,8626,3373],{"class":359},[35,8628,2633],{"class":495},[35,8630,505],{"class":359},[35,8632,8633],{"class":37,"line":244},[35,8634,2371],{"class":359},[35,8636,8637,8639,8641,8644,8646,8649,8651,8654,8656],{"class":37,"line":253},[35,8638,3785],{"class":359},[35,8640,1538],{"class":495},[35,8642,8643],{"class":359},"stuArray[i].name",[35,8645,1538],{"class":495},[35,8647,8648],{"class":359},"stuArray[i].age",[35,8650,1538],{"class":495},[35,8652,8653],{"class":359},"stuArray[i].score",[35,8655,1538],{"class":495},[35,8657,1560],{"class":359},[35,8659,8660],{"class":37,"line":262},[35,8661,2528],{"class":359},[35,8663,8664],{"class":37,"line":271},[35,8665,1926],{"class":359},[438,8667,8669],{"id":8668},"_43结构体指针","4.3结构体指针",[21,8671,8672],{},"作用：通过指针访问结构体中的成员",[21,8674,8675],{},"利用操作符->可以通过结构体指针访问结构体属性",[25,8677,8679],{"className":486,"code":8678,"language":488,"meta":30,"style":30},"#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",[32,8680,8681,8687,8697,8703,8707,8713,8717,8721,8727,8733,8737,8745,8749,8754,8779,8784,8799,8804,8827],{"__ignoreMap":30},[35,8682,8683,8685],{"class":37,"line":38},[35,8684,2291],{"class":495},[35,8686,2294],{"class":306},[35,8688,8689,8691,8693,8695],{"class":37,"line":45},[35,8690,2299],{"class":495},[35,8692,2302],{"class":495},[35,8694,2305],{"class":48},[35,8696,1655],{"class":359},[35,8698,8699,8701],{"class":37,"line":55},[35,8700,2291],{"class":495},[35,8702,8083],{"class":306},[35,8704,8705],{"class":37,"line":65},[35,8706,8442],{"class":41},[35,8708,8709,8711],{"class":37,"line":74},[35,8710,8093],{"class":495},[35,8712,8096],{"class":48},[35,8714,8715],{"class":37,"line":83},[35,8716,1907],{"class":359},[35,8718,8719],{"class":37,"line":92},[35,8720,8119],{"class":359},[35,8722,8723,8725],{"class":37,"line":101},[35,8724,2326],{"class":495},[35,8726,8131],{"class":359},[35,8728,8729,8731],{"class":37,"line":110},[35,8730,2326],{"class":495},[35,8732,8143],{"class":359},[35,8734,8735],{"class":37,"line":119},[35,8736,4329],{"class":359},[35,8738,8739,8741,8743],{"class":37,"line":128},[35,8740,502],{"class":495},[35,8742,2314],{"class":48},[35,8744,2317],{"class":359},[35,8746,8747],{"class":37,"line":137},[35,8748,1907],{"class":359},[35,8750,8751],{"class":37,"line":144},[35,8752,8753],{"class":41},"    \u002F\u002F创建学生结构体变量\n",[35,8755,8756,8758,8760,8763,8765,8767,8769,8771,8773,8775,8777],{"class":37,"line":150},[35,8757,8229],{"class":495},[35,8759,8232],{"class":48},[35,8761,8762],{"class":359}," s",[35,8764,544],{"class":495},[35,8766,1390],{"class":359},[35,8768,8250],{"class":306},[35,8770,872],{"class":359},[35,8772,1144],{"class":58},[35,8774,872],{"class":359},[35,8776,2072],{"class":58},[35,8778,4329],{"class":359},[35,8780,8781],{"class":37,"line":159},[35,8782,8783],{"class":41},"    \u002F\u002F通过指针指向结构体变量\n",[35,8785,8786,8788,8790,8792,8794,8796],{"class":37,"line":168},[35,8787,8229],{"class":495},[35,8789,8232],{"class":48},[35,8791,6852],{"class":495},[35,8793,21],{"class":359},[35,8795,6673],{"class":495},[35,8797,8798],{"class":359},"s\n",[35,8800,8801],{"class":37,"line":177},[35,8802,8803],{"class":41},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[35,8805,8806,8808,8810,8813,8815,8818,8820,8823,8825],{"class":37,"line":182},[35,8807,1912],{"class":359},[35,8809,1538],{"class":495},[35,8811,8812],{"class":359},"p->name",[35,8814,1538],{"class":495},[35,8816,8817],{"class":359},"p->age",[35,8819,1538],{"class":495},[35,8821,8822],{"class":359},"p->score",[35,8824,1538],{"class":495},[35,8826,1560],{"class":359},[35,8828,8829],{"class":37,"line":188},[35,8830,1926],{"class":359},[438,8832,8834],{"id":8833},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[21,8836,8837],{},"作用：结构体中的成员可以是另一个结构体",[21,8839,8840],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[25,8842,8844],{"className":486,"code":8843,"language":488,"meta":30,"style":30},"#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",[32,8845,8846,8852,8862,8868,8873,8881,8885,8889,8895,8901,8905,8910,8917,8921,8928,8932,8938,8943,8947,8955,8959,8964,8969,8974,8985,8997,9008,9021,9032,9043],{"__ignoreMap":30},[35,8847,8848,8850],{"class":37,"line":38},[35,8849,2291],{"class":495},[35,8851,2294],{"class":306},[35,8853,8854,8856,8858,8860],{"class":37,"line":45},[35,8855,2299],{"class":495},[35,8857,2302],{"class":495},[35,8859,2305],{"class":48},[35,8861,1655],{"class":359},[35,8863,8864,8866],{"class":37,"line":55},[35,8865,2291],{"class":495},[35,8867,8083],{"class":306},[35,8869,8870],{"class":37,"line":65},[35,8871,8872],{"class":41},"\u002F\u002F定义学生结构体\n",[35,8874,8875,8877,8879],{"class":37,"line":74},[35,8876,8093],{"class":495},[35,8878,8232],{"class":48},[35,8880,3008],{"class":359},[35,8882,8883],{"class":37,"line":83},[35,8884,1907],{"class":359},[35,8886,8887],{"class":37,"line":92},[35,8888,8119],{"class":359},[35,8890,8891,8893],{"class":37,"line":101},[35,8892,2326],{"class":495},[35,8894,8131],{"class":359},[35,8896,8897,8899],{"class":37,"line":110},[35,8898,2326],{"class":495},[35,8900,8143],{"class":359},[35,8902,8903],{"class":37,"line":119},[35,8904,1926],{"class":359},[35,8906,8907],{"class":37,"line":128},[35,8908,8909],{"class":41},"\u002F\u002F定义老师结构体\n",[35,8911,8912,8914],{"class":37,"line":137},[35,8913,8093],{"class":495},[35,8915,8916],{"class":48}," Teacher\n",[35,8918,8919],{"class":37,"line":144},[35,8920,1907],{"class":359},[35,8922,8923,8925],{"class":37,"line":150},[35,8924,2326],{"class":495},[35,8926,8927],{"class":359}," id;\n",[35,8929,8930],{"class":37,"line":159},[35,8931,8119],{"class":359},[35,8933,8934,8936],{"class":37,"line":168},[35,8935,2326],{"class":495},[35,8937,8131],{"class":359},[35,8939,8940],{"class":37,"line":177},[35,8941,8942],{"class":359},"    Student stu;\n",[35,8944,8945],{"class":37,"line":182},[35,8946,1926],{"class":359},[35,8948,8949,8951,8953],{"class":37,"line":188},[35,8950,502],{"class":495},[35,8952,2314],{"class":48},[35,8954,6312],{"class":359},[35,8956,8957],{"class":37,"line":197},[35,8958,1907],{"class":359},[35,8960,8961],{"class":37,"line":206},[35,8962,8963],{"class":41},"    \u002F\u002F结构体嵌套结构体\n",[35,8965,8966],{"class":37,"line":215},[35,8967,8968],{"class":41},"    \u002F\u002F创建老师\n",[35,8970,8971],{"class":37,"line":224},[35,8972,8973],{"class":359},"    Teacher t;\n",[35,8975,8976,8979,8981,8983],{"class":37,"line":233},[35,8977,8978],{"class":359},"    t.id",[35,8980,544],{"class":495},[35,8982,807],{"class":58},[35,8984,1655],{"class":359},[35,8986,8987,8990,8992,8995],{"class":37,"line":238},[35,8988,8989],{"class":359},"    t.name",[35,8991,544],{"class":495},[35,8993,8994],{"class":306},"\"老王\"",[35,8996,1655],{"class":359},[35,8998,8999,9002,9004,9006],{"class":37,"line":244},[35,9000,9001],{"class":359},"    t.age",[35,9003,544],{"class":495},[35,9005,1144],{"class":58},[35,9007,1655],{"class":359},[35,9009,9010,9013,9015,9018],{"class":37,"line":253},[35,9011,9012],{"class":359},"    t.stu.name",[35,9014,544],{"class":495},[35,9016,9017],{"class":306},"\"小王\"",[35,9019,9020],{"class":359},"；\n",[35,9022,9023,9026,9028,9030],{"class":37,"line":262},[35,9024,9025],{"class":359},"    t.stu.age",[35,9027,544],{"class":495},[35,9029,1194],{"class":58},[35,9031,1655],{"class":359},[35,9033,9034,9037,9039,9041],{"class":37,"line":271},[35,9035,9036],{"class":359},"    t.stu.score",[35,9038,544],{"class":495},[35,9040,408],{"class":58},[35,9042,1655],{"class":359},[35,9044,9045],{"class":37,"line":280},[35,9046,1926],{"class":359},[438,9048,9050],{"id":9049},"_45结构体做函数参数","4.5结构体做函数参数",[21,9052,9053],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[25,9055,9057],{"className":486,"code":9056,"language":488,"meta":30,"style":30},"#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",[32,9058,9059,9065,9075,9081,9087,9091,9095,9101,9107,9111,9116,9121,9138,9142,9175,9179,9184,9203,9207,9238,9242,9250,9254,9263,9275,9287,9299,9312,9320,9333,9345,9353],{"__ignoreMap":30},[35,9060,9061,9063],{"class":37,"line":38},[35,9062,2291],{"class":495},[35,9064,2294],{"class":306},[35,9066,9067,9069,9071,9073],{"class":37,"line":45},[35,9068,2299],{"class":495},[35,9070,2302],{"class":495},[35,9072,2305],{"class":48},[35,9074,1655],{"class":359},[35,9076,9077,9079],{"class":37,"line":55},[35,9078,2291],{"class":495},[35,9080,8083],{"class":306},[35,9082,9083,9085],{"class":37,"line":65},[35,9084,8093],{"class":495},[35,9086,8096],{"class":48},[35,9088,9089],{"class":37,"line":74},[35,9090,1907],{"class":359},[35,9092,9093],{"class":37,"line":83},[35,9094,8119],{"class":359},[35,9096,9097,9099],{"class":37,"line":92},[35,9098,2326],{"class":495},[35,9100,8131],{"class":359},[35,9102,9103,9105],{"class":37,"line":101},[35,9104,2326],{"class":495},[35,9106,8143],{"class":359},[35,9108,9109],{"class":37,"line":110},[35,9110,4329],{"class":359},[35,9112,9113],{"class":37,"line":119},[35,9114,9115],{"class":41},"\u002F\u002F打印学生信息的函数\n",[35,9117,9118],{"class":37,"line":128},[35,9119,9120],{"class":41},"\u002F\u002F值传递\n",[35,9122,9123,9125,9128,9130,9132,9134,9136],{"class":37,"line":137},[35,9124,5698],{"class":495},[35,9126,9127],{"class":48}," printStudent1",[35,9129,499],{"class":359},[35,9131,8093],{"class":495},[35,9133,8232],{"class":48},[35,9135,8762],{"class":5550},[35,9137,505],{"class":359},[35,9139,9140],{"class":37,"line":144},[35,9141,1907],{"class":359},[35,9143,9144,9146,9148,9151,9153,9156,9158,9161,9163,9165,9167,9170,9172],{"class":37,"line":150},[35,9145,6863],{"class":359},[35,9147,1538],{"class":495},[35,9149,9150],{"class":359}," s.name ",[35,9152,1538],{"class":495},[35,9154,9155],{"class":306}," \" \"",[35,9157,1805],{"class":495},[35,9159,9160],{"class":359}," s.age ",[35,9162,1538],{"class":495},[35,9164,9155],{"class":306},[35,9166,1805],{"class":495},[35,9168,9169],{"class":359}," s.score ",[35,9171,1538],{"class":495},[35,9173,9174],{"class":359}," endl;\n",[35,9176,9177],{"class":37,"line":159},[35,9178,1926],{"class":359},[35,9180,9181],{"class":37,"line":168},[35,9182,9183],{"class":41},"\u002F\u002F地址传递\n",[35,9185,9186,9188,9191,9193,9195,9197,9199,9201],{"class":37,"line":177},[35,9187,5698],{"class":495},[35,9189,9190],{"class":48}," printStudent2",[35,9192,499],{"class":359},[35,9194,8093],{"class":495},[35,9196,8232],{"class":48},[35,9198,6852],{"class":495},[35,9200,1189],{"class":5550},[35,9202,505],{"class":359},[35,9204,9205],{"class":37,"line":182},[35,9206,1907],{"class":359},[35,9208,9209,9211,9213,9216,9218,9220,9222,9225,9227,9229,9231,9234,9236],{"class":37,"line":188},[35,9210,6863],{"class":359},[35,9212,1538],{"class":495},[35,9214,9215],{"class":359}," s->name ",[35,9217,1538],{"class":495},[35,9219,9155],{"class":306},[35,9221,1805],{"class":495},[35,9223,9224],{"class":359}," s->age ",[35,9226,1538],{"class":495},[35,9228,9155],{"class":306},[35,9230,1805],{"class":495},[35,9232,9233],{"class":359}," s->score ",[35,9235,1538],{"class":495},[35,9237,9174],{"class":359},[35,9239,9240],{"class":37,"line":197},[35,9241,1926],{"class":359},[35,9243,9244,9246,9248],{"class":37,"line":206},[35,9245,502],{"class":495},[35,9247,2314],{"class":48},[35,9249,2317],{"class":359},[35,9251,9252],{"class":37,"line":215},[35,9253,1907],{"class":359},[35,9255,9256,9258,9260],{"class":37,"line":224},[35,9257,8229],{"class":495},[35,9259,8232],{"class":48},[35,9261,9262],{"class":359}," s;\n",[35,9264,9265,9268,9270,9273],{"class":37,"line":233},[35,9266,9267],{"class":359},"    s.name ",[35,9269,544],{"class":495},[35,9271,9272],{"class":306}," \"张三\"",[35,9274,1655],{"class":359},[35,9276,9277,9280,9282,9285],{"class":37,"line":238},[35,9278,9279],{"class":359},"    s.age ",[35,9281,544],{"class":495},[35,9283,9284],{"class":58}," 20",[35,9286,1655],{"class":359},[35,9288,9289,9292,9294,9297],{"class":37,"line":244},[35,9290,9291],{"class":359},"    s.score ",[35,9293,544],{"class":495},[35,9295,9296],{"class":58}," 85",[35,9298,1655],{"class":359},[35,9300,9301,9303,9305,9308,9310],{"class":37,"line":253},[35,9302,1912],{"class":359},[35,9304,1538],{"class":495},[35,9306,9307],{"class":306},"\"值传递:\"",[35,9309,1538],{"class":495},[35,9311,1560],{"class":359},[35,9313,9314,9317],{"class":37,"line":262},[35,9315,9316],{"class":48},"    printStudent1",[35,9318,9319],{"class":359},"(s);\n",[35,9321,9322,9324,9326,9329,9331],{"class":37,"line":271},[35,9323,1912],{"class":359},[35,9325,1538],{"class":495},[35,9327,9328],{"class":306},"\"地址传递:\"",[35,9330,1538],{"class":495},[35,9332,1560],{"class":359},[35,9334,9335,9338,9340,9342],{"class":37,"line":280},[35,9336,9337],{"class":48},"    printStudent2",[35,9339,499],{"class":359},[35,9341,847],{"class":495},[35,9343,9344],{"class":359},"s); \n",[35,9346,9347,9349,9351],{"class":37,"line":289},[35,9348,4424],{"class":495},[35,9350,4427],{"class":58},[35,9352,1655],{"class":359},[35,9354,9355],{"class":37,"line":294},[35,9356,1926],{"class":359},[21,9358,9359],{},"注意：",[1501,9361,9362,9365],{},[17,9363,9364],{},"1.先定义结构体，不要在函数中写结构体的定义",[17,9366,9367],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[438,9369,9371],{"id":9370},"_46结构体中const使用场景","4.6结构体中const使用场景",[21,9373,9374],{},"用const防止误操作",[25,9376,9378],{"className":486,"code":9377,"language":488,"meta":30,"style":30},"#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",[32,9379,9380,9386,9396,9402,9407,9411,9415,9421,9427,9431,9447,9451,9474,9478,9486,9490,9511,9518,9522],{"__ignoreMap":30},[35,9381,9382,9384],{"class":37,"line":38},[35,9383,2291],{"class":495},[35,9385,2294],{"class":306},[35,9387,9388,9390,9392,9394],{"class":37,"line":45},[35,9389,2299],{"class":495},[35,9391,2302],{"class":495},[35,9393,2305],{"class":48},[35,9395,1655],{"class":359},[35,9397,9398,9400],{"class":37,"line":55},[35,9399,2291],{"class":495},[35,9401,8083],{"class":306},[35,9403,9404],{"class":37,"line":65},[35,9405,9406],{"class":359},"sctuct Student\n",[35,9408,9409],{"class":37,"line":74},[35,9410,1907],{"class":359},[35,9412,9413],{"class":37,"line":83},[35,9414,8119],{"class":359},[35,9416,9417,9419],{"class":37,"line":92},[35,9418,2326],{"class":495},[35,9420,8131],{"class":359},[35,9422,9423,9425],{"class":37,"line":101},[35,9424,2326],{"class":495},[35,9426,8143],{"class":359},[35,9428,9429],{"class":37,"line":110},[35,9430,4329],{"class":359},[35,9432,9433,9435,9438,9440,9443,9445],{"class":37,"line":119},[35,9434,5698],{"class":495},[35,9436,9437],{"class":48}," printStudents",[35,9439,499],{"class":359},[35,9441,9442],{"class":48},"student",[35,9444,8762],{"class":5550},[35,9446,505],{"class":359},[35,9448,9449],{"class":37,"line":128},[35,9450,1907],{"class":359},[35,9452,9453,9455,9457,9460,9462,9465,9467,9470,9472],{"class":37,"line":137},[35,9454,1912],{"class":359},[35,9456,1538],{"class":495},[35,9458,9459],{"class":359},"s.name",[35,9461,1538],{"class":495},[35,9463,9464],{"class":359},"s.age",[35,9466,1538],{"class":495},[35,9468,9469],{"class":359},"s.score",[35,9471,1538],{"class":495},[35,9473,1560],{"class":359},[35,9475,9476],{"class":37,"line":144},[35,9477,1926],{"class":359},[35,9479,9480,9482,9484],{"class":37,"line":150},[35,9481,502],{"class":495},[35,9483,2314],{"class":48},[35,9485,6312],{"class":359},[35,9487,9488],{"class":37,"line":159},[35,9489,1907],{"class":359},[35,9491,9492,9495,9497,9499,9501,9503,9505,9507,9509],{"class":37,"line":168},[35,9493,9494],{"class":359},"    Student s",[35,9496,544],{"class":495},[35,9498,1390],{"class":359},[35,9500,8250],{"class":306},[35,9502,872],{"class":359},[35,9504,1144],{"class":58},[35,9506,872],{"class":359},[35,9508,1144],{"class":58},[35,9510,4329],{"class":359},[35,9512,9513,9516],{"class":37,"line":177},[35,9514,9515],{"class":48},"    printStudent",[35,9517,9319],{"class":359},[35,9519,9520],{"class":37,"line":182},[35,9521,141],{"emptyLinePlaceholder":140},[35,9523,9524],{"class":37,"line":188},[35,9525,1926],{"class":359},[21,9527,9359],{},[1501,9529,9530,9533,9536],{},[17,9531,9532],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[17,9534,9535],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[17,9537,9538],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[25,9540,9542],{"className":486,"code":9541,"language":488,"meta":30,"style":30},"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",[32,9543,9544,9563,9567,9572,9592],{"__ignoreMap":30},[35,9545,9546,9548,9550,9552,9554,9557,9559,9561],{"class":37,"line":38},[35,9547,5698],{"class":495},[35,9549,9437],{"class":48},[35,9551,499],{"class":359},[35,9553,7126],{"class":495},[35,9555,9556],{"class":48}," student",[35,9558,6852],{"class":495},[35,9560,1189],{"class":5550},[35,9562,505],{"class":359},[35,9564,9565],{"class":37,"line":45},[35,9566,1907],{"class":359},[35,9568,9569],{"class":37,"line":55},[35,9570,9571],{"class":41},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[35,9573,9574,9576,9578,9580,9582,9584,9586,9588,9590],{"class":37,"line":65},[35,9575,1912],{"class":359},[35,9577,1538],{"class":495},[35,9579,9459],{"class":359},[35,9581,1538],{"class":495},[35,9583,9464],{"class":359},[35,9585,1538],{"class":495},[35,9587,9469],{"class":359},[35,9589,1538],{"class":495},[35,9591,1560],{"class":359},[35,9593,9594],{"class":37,"line":74},[35,9595,1926],{"class":359},[438,9597,9599],{"id":9598},"_47案例","4.7案例",[14,9601,9602],{},[17,9603,9604],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[25,9606,9608],{"className":486,"code":9607,"language":488,"meta":30,"style":30},"#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",[32,9609,9610,9616,9626,9632,9639,9643,9649,9653,9658,9664,9670,9674,9678,9684,9688,9693,9698,9711,9715,9720,9746,9750,9762,9789,9793,9805,9815,9819,9824,9853,9857,9869,9878,9905,9916,9926,9930,9934,9938,9943,9967,9971,9995,9999,10018,10044,10048,10073,10096,10120,10125,10130,10135,10144,10149,10155,10176,10182,10196,10202,10229,10238,10244,10252,10257],{"__ignoreMap":30},[35,9611,9612,9614],{"class":37,"line":38},[35,9613,2291],{"class":495},[35,9615,2294],{"class":306},[35,9617,9618,9620,9622,9624],{"class":37,"line":45},[35,9619,2299],{"class":495},[35,9621,2302],{"class":495},[35,9623,2305],{"class":48},[35,9625,1655],{"class":359},[35,9627,9628,9630],{"class":37,"line":55},[35,9629,2291],{"class":495},[35,9631,8083],{"class":306},[35,9633,9634,9636],{"class":37,"line":65},[35,9635,2291],{"class":495},[35,9637,9638],{"class":306},"\u003Cctime>\n",[35,9640,9641],{"class":37,"line":74},[35,9642,8872],{"class":41},[35,9644,9645,9647],{"class":37,"line":83},[35,9646,8093],{"class":495},[35,9648,8096],{"class":48},[35,9650,9651],{"class":37,"line":92},[35,9652,1907],{"class":359},[35,9654,9655],{"class":37,"line":101},[35,9656,9657],{"class":359},"    string sName;\n",[35,9659,9660,9662],{"class":37,"line":110},[35,9661,2326],{"class":495},[35,9663,8131],{"class":359},[35,9665,9666,9668],{"class":37,"line":119},[35,9667,2326],{"class":495},[35,9669,8143],{"class":359},[35,9671,9672],{"class":37,"line":128},[35,9673,4329],{"class":359},[35,9675,9676],{"class":37,"line":137},[35,9677,8909],{"class":41},[35,9679,9680,9682],{"class":37,"line":144},[35,9681,8093],{"class":495},[35,9683,8916],{"class":48},[35,9685,9686],{"class":37,"line":150},[35,9687,1907],{"class":359},[35,9689,9690],{"class":37,"line":159},[35,9691,9692],{"class":359},"    string tName;\n",[35,9694,9695],{"class":37,"line":168},[35,9696,9697],{"class":41},"    \u002F\u002F学生数组\n",[35,9699,9700,9702,9704,9707,9709],{"class":37,"line":177},[35,9701,8229],{"class":495},[35,9703,8232],{"class":48},[35,9705,9706],{"class":359}," sArray[",[35,9708,372],{"class":58},[35,9710,5024],{"class":359},[35,9712,9713],{"class":37,"line":182},[35,9714,4329],{"class":359},[35,9716,9717],{"class":37,"line":188},[35,9718,9719],{"class":41},"\u002F\u002F给老师和学生赋值的函数\n",[35,9721,9722,9724,9727,9729,9731,9734,9737,9740,9742,9744],{"class":37,"line":197},[35,9723,5698],{"class":495},[35,9725,9726],{"class":48}," allocateSpace",[35,9728,499],{"class":359},[35,9730,8093],{"class":495},[35,9732,9733],{"class":48}," Teacher",[35,9735,9736],{"class":5550}," tArray",[35,9738,9739],{"class":359},"[],",[35,9741,502],{"class":495},[35,9743,7665],{"class":5550},[35,9745,505],{"class":359},[35,9747,9748],{"class":37,"line":206},[35,9749,1907],{"class":359},[35,9751,9752,9755,9757,9760],{"class":37,"line":215},[35,9753,9754],{"class":359},"    string nameSeed",[35,9756,544],{"class":495},[35,9758,9759],{"class":306},"\"ABCDE\"",[35,9761,1655],{"class":359},[35,9763,9764,9766,9768,9770,9773,9775,9777,9780,9782,9785,9787],{"class":37,"line":224},[35,9765,3535],{"class":495},[35,9767,2012],{"class":359},[35,9769,502],{"class":495},[35,9771,9772],{"class":359}," i ",[35,9774,544],{"class":495},[35,9776,4427],{"class":58},[35,9778,9779],{"class":359},"; i ",[35,9781,1404],{"class":495},[35,9783,9784],{"class":359}," len; i",[35,9786,2633],{"class":495},[35,9788,505],{"class":359},[35,9790,9791],{"class":37,"line":233},[35,9792,2371],{"class":359},[35,9794,9795,9798,9800,9803],{"class":37,"line":238},[35,9796,9797],{"class":359},"        tArray[i].tName ",[35,9799,544],{"class":495},[35,9801,9802],{"class":306}," \"Teacher_\"",[35,9804,1655],{"class":359},[35,9806,9807,9809,9812],{"class":37,"line":244},[35,9808,9797],{"class":359},[35,9810,9811],{"class":495},"+=",[35,9813,9814],{"class":359},"nameSeed[i];\n",[35,9816,9817],{"class":37,"line":253},[35,9818,141],{"emptyLinePlaceholder":140},[35,9820,9821],{"class":37,"line":262},[35,9822,9823],{"class":41},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[35,9825,9826,9828,9830,9832,9835,9837,9839,9842,9844,9846,9849,9851],{"class":37,"line":271},[35,9827,3737],{"class":495},[35,9829,2012],{"class":359},[35,9831,502],{"class":495},[35,9833,9834],{"class":359}," j ",[35,9836,544],{"class":495},[35,9838,4427],{"class":58},[35,9840,9841],{"class":359},"; j ",[35,9843,1404],{"class":495},[35,9845,2489],{"class":58},[35,9847,9848],{"class":359},"; j",[35,9850,2633],{"class":495},[35,9852,505],{"class":359},[35,9854,9855],{"class":37,"line":280},[35,9856,2850],{"class":359},[35,9858,9859,9862,9864,9867],{"class":37,"line":289},[35,9860,9861],{"class":359},"            tArray[i].sArray[j].sName ",[35,9863,544],{"class":495},[35,9865,9866],{"class":306}," \"Student_\"",[35,9868,1655],{"class":359},[35,9870,9871,9873,9875],{"class":37,"line":294},[35,9872,9861],{"class":359},[35,9874,9811],{"class":495},[35,9876,9877],{"class":359}," nameSeed[j];\n",[35,9879,9880,9883,9886,9888,9890,9892,9894,9896,9898,9900,9902],{"class":37,"line":300},[35,9881,9882],{"class":495},"            int",[35,9884,9885],{"class":359}," random",[35,9887,544],{"class":495},[35,9889,2764],{"class":48},[35,9891,2767],{"class":359},[35,9893,823],{"class":495},[35,9895,1401],{"class":58},[35,9897,975],{"class":495},[35,9899,895],{"class":58},[35,9901,553],{"class":359},[35,9903,9904],{"class":41},"\u002F\u002F40~99\n",[35,9906,9907,9910,9912,9914],{"class":37,"line":313},[35,9908,9909],{"class":359},"            tArray[i].sArray[j].age ",[35,9911,544],{"class":495},[35,9913,9284],{"class":58},[35,9915,1655],{"class":359},[35,9917,9918,9921,9923],{"class":37,"line":324},[35,9919,9920],{"class":359},"            tArray[i].sArray[j].score ",[35,9922,544],{"class":495},[35,9924,9925],{"class":359}," random;\n",[35,9927,9928],{"class":37,"line":2955},[35,9929,2869],{"class":359},[35,9931,9932],{"class":37,"line":8282},[35,9933,2528],{"class":359},[35,9935,9936],{"class":37,"line":8306},[35,9937,1926],{"class":359},[35,9939,9940],{"class":37,"line":8311},[35,9941,9942],{"class":41},"\u002F\u002F打印所有信息的函数\n",[35,9944,9945,9947,9950,9952,9954,9956,9958,9961,9963,9965],{"class":37,"line":8317},[35,9946,5698],{"class":495},[35,9948,9949],{"class":48}," printInfo",[35,9951,499],{"class":359},[35,9953,8093],{"class":495},[35,9955,9733],{"class":48},[35,9957,9736],{"class":5550},[35,9959,9960],{"class":359},"[], ",[35,9962,502],{"class":495},[35,9964,7665],{"class":5550},[35,9966,505],{"class":359},[35,9968,9969],{"class":37,"line":8344},[35,9970,1907],{"class":359},[35,9972,9973,9975,9977,9979,9981,9983,9985,9987,9989,9991,9993],{"class":37,"line":8349},[35,9974,3535],{"class":495},[35,9976,2012],{"class":359},[35,9978,502],{"class":495},[35,9980,9772],{"class":359},[35,9982,544],{"class":495},[35,9984,4427],{"class":58},[35,9986,9779],{"class":359},[35,9988,1404],{"class":495},[35,9990,9784],{"class":359},[35,9992,2633],{"class":495},[35,9994,505],{"class":359},[35,9996,9997],{"class":37,"line":8355},[35,9998,2371],{"class":359},[35,10000,10001,10004,10006,10009,10011,10014,10016],{"class":37,"line":8367},[35,10002,10003],{"class":359},"        cout ",[35,10005,1538],{"class":495},[35,10007,10008],{"class":306}," \"Teacher: \"",[35,10010,1805],{"class":495},[35,10012,10013],{"class":359}," tArray[i].tName ",[35,10015,1538],{"class":495},[35,10017,9174],{"class":359},[35,10019,10020,10022,10024,10026,10028,10030,10032,10034,10036,10038,10040,10042],{"class":37,"line":8379},[35,10021,3737],{"class":495},[35,10023,2012],{"class":359},[35,10025,502],{"class":495},[35,10027,9834],{"class":359},[35,10029,544],{"class":495},[35,10031,4427],{"class":58},[35,10033,9841],{"class":359},[35,10035,1404],{"class":495},[35,10037,2489],{"class":58},[35,10039,9848],{"class":359},[35,10041,2633],{"class":495},[35,10043,505],{"class":359},[35,10045,10046],{"class":37,"line":8391},[35,10047,2850],{"class":359},[35,10049,10051,10054,10056,10059,10061,10064,10066,10069,10071],{"class":37,"line":10050},47,[35,10052,10053],{"class":359},"            cout ",[35,10055,1538],{"class":495},[35,10057,10058],{"class":306}," \"",[35,10060,1595],{"class":58},[35,10062,10063],{"class":306},"Student: \"",[35,10065,1805],{"class":495},[35,10067,10068],{"class":359}," tArray[i].sArray[j].sName",[35,10070,1538],{"class":495},[35,10072,1560],{"class":359},[35,10074,10076,10078,10080,10082,10084,10087,10089,10092,10094],{"class":37,"line":10075},48,[35,10077,10053],{"class":359},[35,10079,1538],{"class":495},[35,10081,10058],{"class":306},[35,10083,1595],{"class":58},[35,10085,10086],{"class":306},"Age: \"",[35,10088,1805],{"class":495},[35,10090,10091],{"class":359}," tArray[i].sArray[j].age ",[35,10093,1538],{"class":495},[35,10095,9174],{"class":359},[35,10097,10099,10101,10103,10105,10107,10110,10112,10115,10117],{"class":37,"line":10098},49,[35,10100,10053],{"class":359},[35,10102,1538],{"class":495},[35,10104,10058],{"class":306},[35,10106,1595],{"class":58},[35,10108,10109],{"class":306},"Score: \"",[35,10111,1805],{"class":495},[35,10113,10114],{"class":359}," tArray[i].sArray[j].score ",[35,10116,1538],{"class":495},[35,10118,10119],{"class":359}," endl;   \n",[35,10121,10123],{"class":37,"line":10122},50,[35,10124,2869],{"class":359},[35,10126,10128],{"class":37,"line":10127},51,[35,10129,2528],{"class":359},[35,10131,10133],{"class":37,"line":10132},52,[35,10134,1926],{"class":359},[35,10136,10138,10140,10142],{"class":37,"line":10137},53,[35,10139,502],{"class":495},[35,10141,2314],{"class":48},[35,10143,2317],{"class":359},[35,10145,10147],{"class":37,"line":10146},54,[35,10148,1907],{"class":359},[35,10150,10152],{"class":37,"line":10151},55,[35,10153,10154],{"class":41},"    \u002F\u002F随机数种子\n",[35,10156,10158,10160,10162,10164,10166,10168,10170,10172,10174],{"class":37,"line":10157},56,[35,10159,2714],{"class":48},[35,10161,2717],{"class":359},[35,10163,2720],{"class":495},[35,10165,2723],{"class":495},[35,10167,923],{"class":359},[35,10169,2728],{"class":48},[35,10171,499],{"class":359},[35,10173,2733],{"class":58},[35,10175,2736],{"class":359},[35,10177,10179],{"class":37,"line":10178},57,[35,10180,10181],{"class":41},"    \u002F\u002F1.创建3名老师的数组\n",[35,10183,10185,10187,10189,10192,10194],{"class":37,"line":10184},58,[35,10186,8229],{"class":495},[35,10188,9733],{"class":48},[35,10190,10191],{"class":359}," tArray[",[35,10193,568],{"class":58},[35,10195,5024],{"class":359},[35,10197,10199],{"class":37,"line":10198},59,[35,10200,10201],{"class":41},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[35,10203,10205,10207,10210,10212,10215,10218,10220,10222,10225,10227],{"class":37,"line":10204},60,[35,10206,2326],{"class":495},[35,10208,10209],{"class":359}," len ",[35,10211,544],{"class":495},[35,10213,10214],{"class":495}," sizeof",[35,10216,10217],{"class":359},"(tArray) ",[35,10219,1078],{"class":495},[35,10221,10214],{"class":495},[35,10223,10224],{"class":359},"(tArray[",[35,10226,687],{"class":58},[35,10228,4190],{"class":359},[35,10230,10232,10235],{"class":37,"line":10231},61,[35,10233,10234],{"class":48},"    allocateSpace",[35,10236,10237],{"class":359},"(tArray, len);\n",[35,10239,10241],{"class":37,"line":10240},62,[35,10242,10243],{"class":41},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[35,10245,10247,10250],{"class":37,"line":10246},63,[35,10248,10249],{"class":48},"    printInfo",[35,10251,10237],{"class":359},[35,10253,10255],{"class":37,"line":10254},64,[35,10256,141],{"emptyLinePlaceholder":140},[35,10258,10260],{"class":37,"line":10259},65,[35,10261,1926],{"class":359},[14,10263,10264],{"start":45},[17,10265,10266,10269],{},[645,10267,10268],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[21,10271,10272],{},"五名英雄信息如下：",[25,10274,10278],{"className":10275,"code":10276,"language":10277,"meta":30,"style":30},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[32,10279,10280,10298,10315,10332,10349],{"__ignoreMap":30},[35,10281,10282,10284,10287,10289,10291,10293,10296],{"class":37,"line":38},[35,10283,5251],{"class":359},[35,10285,10286],{"class":306},"\"刘备\"",[35,10288,872],{"class":359},[35,10290,1269],{"class":58},[35,10292,872],{"class":359},[35,10294,10295],{"class":306},"\"男\"",[35,10297,5264],{"class":359},[35,10299,10300,10302,10305,10307,10309,10311,10313],{"class":37,"line":45},[35,10301,5251],{"class":359},[35,10303,10304],{"class":306},"\"关羽\"",[35,10306,872],{"class":359},[35,10308,1244],{"class":58},[35,10310,872],{"class":359},[35,10312,10295],{"class":306},[35,10314,5264],{"class":359},[35,10316,10317,10319,10322,10324,10326,10328,10330],{"class":37,"line":55},[35,10318,5251],{"class":359},[35,10320,10321],{"class":306},"\"张飞\"",[35,10323,872],{"class":359},[35,10325,1194],{"class":58},[35,10327,872],{"class":359},[35,10329,10295],{"class":306},[35,10331,5264],{"class":359},[35,10333,10334,10336,10339,10341,10343,10345,10347],{"class":37,"line":65},[35,10335,5251],{"class":359},[35,10337,10338],{"class":306},"\"赵云\"",[35,10340,872],{"class":359},[35,10342,1219],{"class":58},[35,10344,872],{"class":359},[35,10346,10295],{"class":306},[35,10348,5264],{"class":359},[35,10350,10351,10353,10356,10358,10360,10362,10365],{"class":37,"line":74},[35,10352,5251],{"class":359},[35,10354,10355],{"class":306},"\"貂蝉\"",[35,10357,872],{"class":359},[35,10359,1169],{"class":58},[35,10361,872],{"class":359},[35,10363,10364],{"class":306},"\"女\"",[35,10366,5264],{"class":359},[21,10368,10369],{},"代码：",[25,10371,10373],{"className":486,"code":10372,"language":488,"meta":30,"style":30},"#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",[32,10374,10375,10381,10391,10397,10404,10408,10412,10418,10423,10427,10432,10455,10459,10484,10488,10521,10526,10555,10560,10575,10601,10621,10626,10631,10635,10639,10644,10666,10670,10694,10698,10760,10764,10768,10776,10780,10785,10796,10800,10816,10832,10848,10864,10880,10884,10904,10926,10931,10944,10951,10956,10962,10967,10980,10986],{"__ignoreMap":30},[35,10376,10377,10379],{"class":37,"line":38},[35,10378,2291],{"class":495},[35,10380,2294],{"class":306},[35,10382,10383,10385,10387,10389],{"class":37,"line":45},[35,10384,2299],{"class":495},[35,10386,2302],{"class":495},[35,10388,2305],{"class":48},[35,10390,1655],{"class":359},[35,10392,10393,10395],{"class":37,"line":55},[35,10394,2291],{"class":495},[35,10396,8083],{"class":306},[35,10398,10399,10401],{"class":37,"line":65},[35,10400,8093],{"class":495},[35,10402,10403],{"class":48}," Sanguo\n",[35,10405,10406],{"class":37,"line":74},[35,10407,1907],{"class":359},[35,10409,10410],{"class":37,"line":83},[35,10411,8119],{"class":359},[35,10413,10414,10416],{"class":37,"line":92},[35,10415,2326],{"class":495},[35,10417,8131],{"class":359},[35,10419,10420],{"class":37,"line":101},[35,10421,10422],{"class":359},"    string gender;\n",[35,10424,10425],{"class":37,"line":110},[35,10426,4329],{"class":359},[35,10428,10429],{"class":37,"line":119},[35,10430,10431],{"class":41},"\u002F\u002F定义排序函数\n",[35,10433,10434,10436,10438,10440,10443,10445,10447,10449,10451,10453],{"class":37,"line":128},[35,10435,5698],{"class":495},[35,10437,7650],{"class":48},[35,10439,499],{"class":359},[35,10441,10442],{"class":48},"Sanguo",[35,10444,6852],{"class":495},[35,10446,1189],{"class":5550},[35,10448,872],{"class":359},[35,10450,502],{"class":495},[35,10452,7665],{"class":5550},[35,10454,505],{"class":359},[35,10456,10457],{"class":37,"line":137},[35,10458,1907],{"class":359},[35,10460,10461,10463,10465,10467,10469,10471,10473,10475,10477,10480,10482],{"class":37,"line":144},[35,10462,3535],{"class":495},[35,10464,499],{"class":359},[35,10466,502],{"class":495},[35,10468,3366],{"class":359},[35,10470,544],{"class":495},[35,10472,687],{"class":58},[35,10474,3373],{"class":359},[35,10476,1404],{"class":495},[35,10478,10479],{"class":359},"len;i",[35,10481,2633],{"class":495},[35,10483,505],{"class":359},[35,10485,10486],{"class":37,"line":150},[35,10487,2371],{"class":359},[35,10489,10490,10493,10495,10497,10499,10501,10503,10505,10507,10509,10511,10513,10515,10517,10519],{"class":37,"line":159},[35,10491,10492],{"class":495},"     for",[35,10494,2012],{"class":359},[35,10496,502],{"class":495},[35,10498,3744],{"class":359},[35,10500,544],{"class":495},[35,10502,687],{"class":58},[35,10504,3751],{"class":359},[35,10506,1404],{"class":495},[35,10508,7692],{"class":359},[35,10510,1026],{"class":495},[35,10512,713],{"class":58},[35,10514,1026],{"class":495},[35,10516,3884],{"class":359},[35,10518,2633],{"class":495},[35,10520,505],{"class":359},[35,10522,10523],{"class":37,"line":168},[35,10524,10525],{"class":359},"     {\n",[35,10527,10528,10531,10534,10536,10539,10541,10544,10546,10548,10550,10552],{"class":37,"line":177},[35,10529,10530],{"class":495},"         if",[35,10532,10533],{"class":359}," ((s",[35,10535,975],{"class":495},[35,10537,10538],{"class":359},"j)->age ",[35,10540,1454],{"class":495},[35,10542,10543],{"class":359}," (s",[35,10545,975],{"class":495},[35,10547,961],{"class":359},[35,10549,975],{"class":495},[35,10551,713],{"class":58},[35,10553,10554],{"class":359},")->age)\n",[35,10556,10557],{"class":37,"line":182},[35,10558,10559],{"class":359},"         {\n",[35,10561,10562,10565,10567,10570,10572],{"class":37,"line":188},[35,10563,10564],{"class":359},"             Sanguo temp",[35,10566,7487],{"class":495},[35,10568,10569],{"class":359},"(s",[35,10571,975],{"class":495},[35,10573,10574],{"class":359},"j);\n",[35,10576,10577,10580,10582,10584,10587,10589,10591,10593,10595,10597,10599],{"class":37,"line":197},[35,10578,10579],{"class":495},"             *",[35,10581,10569],{"class":359},[35,10583,975],{"class":495},[35,10585,10586],{"class":359},"j)",[35,10588,7487],{"class":495},[35,10590,10569],{"class":359},[35,10592,975],{"class":495},[35,10594,961],{"class":359},[35,10596,975],{"class":495},[35,10598,713],{"class":58},[35,10600,3053],{"class":359},[35,10602,10603,10605,10607,10609,10611,10613,10615,10617,10619],{"class":37,"line":206},[35,10604,10579],{"class":495},[35,10606,10569],{"class":359},[35,10608,975],{"class":495},[35,10610,961],{"class":359},[35,10612,975],{"class":495},[35,10614,713],{"class":58},[35,10616,923],{"class":359},[35,10618,544],{"class":495},[35,10620,4614],{"class":359},[35,10622,10623],{"class":37,"line":215},[35,10624,10625],{"class":359},"         }\n",[35,10627,10628],{"class":37,"line":224},[35,10629,10630],{"class":359},"     }\n",[35,10632,10633],{"class":37,"line":233},[35,10634,2528],{"class":359},[35,10636,10637],{"class":37,"line":238},[35,10638,1926],{"class":359},[35,10640,10641],{"class":37,"line":244},[35,10642,10643],{"class":41},"\u002F\u002F定义打印函数\n",[35,10645,10646,10648,10650,10652,10654,10656,10658,10660,10662,10664],{"class":37,"line":253},[35,10647,5698],{"class":495},[35,10649,9949],{"class":48},[35,10651,499],{"class":359},[35,10653,10442],{"class":48},[35,10655,6852],{"class":495},[35,10657,1189],{"class":5550},[35,10659,872],{"class":359},[35,10661,502],{"class":495},[35,10663,7665],{"class":5550},[35,10665,505],{"class":359},[35,10667,10668],{"class":37,"line":262},[35,10669,1907],{"class":359},[35,10671,10672,10674,10676,10678,10680,10682,10684,10686,10688,10690,10692],{"class":37,"line":271},[35,10673,3535],{"class":495},[35,10675,2012],{"class":359},[35,10677,502],{"class":495},[35,10679,3366],{"class":359},[35,10681,544],{"class":495},[35,10683,687],{"class":58},[35,10685,3373],{"class":359},[35,10687,1404],{"class":495},[35,10689,10479],{"class":359},[35,10691,2633],{"class":495},[35,10693,505],{"class":359},[35,10695,10696],{"class":37,"line":280},[35,10697,2371],{"class":359},[35,10699,10700,10702,10704,10706,10708,10711,10713,10715,10717,10720,10722,10724,10726,10729,10731,10733,10735,10738,10740,10742,10744,10747,10749,10751,10753,10756,10758],{"class":37,"line":289},[35,10701,3785],{"class":359},[35,10703,1538],{"class":495},[35,10705,747],{"class":306},[35,10707,1595],{"class":58},[35,10709,10710],{"class":306},"姓名：\"",[35,10712,1538],{"class":495},[35,10714,10569],{"class":359},[35,10716,975],{"class":495},[35,10718,10719],{"class":359},"i)->name",[35,10721,1538],{"class":495},[35,10723,747],{"class":306},[35,10725,1595],{"class":58},[35,10727,10728],{"class":306},"年龄：\"",[35,10730,1538],{"class":495},[35,10732,10569],{"class":359},[35,10734,975],{"class":495},[35,10736,10737],{"class":359},"i)->age",[35,10739,1538],{"class":495},[35,10741,747],{"class":306},[35,10743,1595],{"class":58},[35,10745,10746],{"class":306},"性别：\"",[35,10748,1538],{"class":495},[35,10750,10569],{"class":359},[35,10752,975],{"class":495},[35,10754,10755],{"class":359},"i)->gender",[35,10757,1538],{"class":495},[35,10759,1560],{"class":359},[35,10761,10762],{"class":37,"line":294},[35,10763,2528],{"class":359},[35,10765,10766],{"class":37,"line":300},[35,10767,1926],{"class":359},[35,10769,10770,10772,10774],{"class":37,"line":313},[35,10771,502],{"class":495},[35,10773,2314],{"class":48},[35,10775,2317],{"class":359},[35,10777,10778],{"class":37,"line":324},[35,10779,1907],{"class":359},[35,10781,10782],{"class":37,"line":2955},[35,10783,10784],{"class":41},"    \u002F\u002F定义结构体变量\n",[35,10786,10787,10790,10792,10794],{"class":37,"line":8282},[35,10788,10789],{"class":359},"    Sanguo s1[",[35,10791,372],{"class":58},[35,10793,1434],{"class":359},[35,10795,5242],{"class":495},[35,10797,10798],{"class":37,"line":8306},[35,10799,2371],{"class":359},[35,10801,10802,10804,10806,10808,10810,10812,10814],{"class":37,"line":8311},[35,10803,5251],{"class":359},[35,10805,10286],{"class":306},[35,10807,872],{"class":359},[35,10809,1269],{"class":58},[35,10811,872],{"class":359},[35,10813,10295],{"class":306},[35,10815,5264],{"class":359},[35,10817,10818,10820,10822,10824,10826,10828,10830],{"class":37,"line":8317},[35,10819,5251],{"class":359},[35,10821,10304],{"class":306},[35,10823,872],{"class":359},[35,10825,1244],{"class":58},[35,10827,872],{"class":359},[35,10829,10295],{"class":306},[35,10831,5264],{"class":359},[35,10833,10834,10836,10838,10840,10842,10844,10846],{"class":37,"line":8344},[35,10835,5251],{"class":359},[35,10837,10321],{"class":306},[35,10839,872],{"class":359},[35,10841,1194],{"class":58},[35,10843,872],{"class":359},[35,10845,10295],{"class":306},[35,10847,5264],{"class":359},[35,10849,10850,10852,10854,10856,10858,10860,10862],{"class":37,"line":8349},[35,10851,5251],{"class":359},[35,10853,10338],{"class":306},[35,10855,872],{"class":359},[35,10857,1219],{"class":58},[35,10859,872],{"class":359},[35,10861,10295],{"class":306},[35,10863,5264],{"class":359},[35,10865,10866,10868,10870,10872,10874,10876,10878],{"class":37,"line":8355},[35,10867,5251],{"class":359},[35,10869,10355],{"class":306},[35,10871,872],{"class":359},[35,10873,1169],{"class":58},[35,10875,872],{"class":359},[35,10877,10364],{"class":306},[35,10879,5264],{"class":359},[35,10881,10882],{"class":37,"line":8367},[35,10883,5285],{"class":359},[35,10885,10886,10888,10890,10892,10895,10897,10900,10902],{"class":37,"line":8379},[35,10887,2326],{"class":495},[35,10889,7665],{"class":359},[35,10891,4537],{"class":495},[35,10893,10894],{"class":359},"(s1)",[35,10896,4543],{"class":495},[35,10898,10899],{"class":359},"(s1[",[35,10901,687],{"class":58},[35,10903,4190],{"class":359},[35,10905,10906,10909,10911,10914,10916,10919,10922,10924],{"class":37,"line":8391},[35,10907,10908],{"class":359},"    Sanguo ",[35,10910,949],{"class":495},[35,10912,10913],{"class":359},"s ",[35,10915,544],{"class":495},[35,10917,10918],{"class":495}," &",[35,10920,10921],{"class":359},"s1[",[35,10923,687],{"class":58},[35,10925,5024],{"class":359},[35,10927,10928],{"class":37,"line":10050},[35,10929,10930],{"class":41},"    \u002F\u002F排序前：\n",[35,10932,10933,10935,10937,10940,10942],{"class":37,"line":10075},[35,10934,6863],{"class":359},[35,10936,1538],{"class":495},[35,10938,10939],{"class":306}," \"排序前：\"",[35,10941,1805],{"class":495},[35,10943,9174],{"class":359},[35,10945,10946,10948],{"class":37,"line":10098},[35,10947,10249],{"class":48},[35,10949,10950],{"class":359},"(s,len);\n",[35,10952,10953],{"class":37,"line":10122},[35,10954,10955],{"class":41},"    \u002F\u002F调用排序函数\n",[35,10957,10958,10960],{"class":37,"line":10127},[35,10959,7932],{"class":48},[35,10961,10950],{"class":359},[35,10963,10964],{"class":37,"line":10132},[35,10965,10966],{"class":41},"    \u002F\u002F排序后\n",[35,10968,10969,10971,10973,10976,10978],{"class":37,"line":10137},[35,10970,6863],{"class":359},[35,10972,1538],{"class":495},[35,10974,10975],{"class":306}," \"排序后：\"",[35,10977,1805],{"class":495},[35,10979,9174],{"class":359},[35,10981,10982,10984],{"class":37,"line":10146},[35,10983,10249],{"class":48},[35,10985,10950],{"class":359},[35,10987,10988],{"class":37,"line":10151},[35,10989,1926],{"class":359},[21,10991,10992,10993,10995],{},"注意：使用指针时直接用传首地址**&s",[35,10994,687],{},"**",[416,10997,10998],{},"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":30,"searchDepth":45,"depth":45,"links":11000},[11001,11002,11003,11004,11005,11006,11007],{"id":8037,"depth":45,"text":8038},{"id":8399,"depth":45,"text":8400},{"id":8668,"depth":45,"text":8669},{"id":8833,"depth":45,"text":8834},{"id":9049,"depth":45,"text":9050},{"id":9370,"depth":45,"text":9371},{"id":9598,"depth":45,"text":9599},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8026,"description":8034},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11014,"title":11015,"body":11016,"description":30,"extension":422,"meta":12359,"navigation":140,"path":12360,"seo":12361,"stem":12362,"__hash__":12363},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11017,"toc":12353},[11018,11021,11025,11031,11045,11050,11053,11057,11064,11070,11073,11080,11086,11091,11094,11097,11100,11664,11667,11681,11685,11690,11706,11846,11849,11855,11858,11863,11871,11979,11982,11987,11990,11995,11998,12004,12007,12350],[10,11019,11015],{"id":11020},"_5程序内存模型",[438,11022,11024],{"id":11023},"_51内存分区模型","5.1内存分区模型",[21,11026,11027,11028],{},"C++程序在执行时，将内存大方向划分为",[645,11029,11030],{},"4个区域",[1501,11032,11033,11036,11039,11042],{},[17,11034,11035],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[17,11037,11038],{},"全局区：存放全局变量和静态变量以及常量",[17,11040,11041],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[17,11043,11044],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[21,11046,11047],{},[645,11048,11049],{},"内存四区意义：",[21,11051,11052],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[465,11054,11056],{"id":11055},"_511程序运行前","5.1.1程序运行前",[21,11058,11059,11060,11063],{},"​\t在程序编译后，生成了exe可执行程序，",[645,11061,11062],{},"未执行该程序前","分为两个区域",[21,11065,11066,11067],{},"​\t",[645,11068,11069],{},"代码区：",[21,11071,11072],{},"​\t\t存放 CPU 执行的机器指令",[21,11074,11075,11076,11079],{},"​\t\t代码区是",[645,11077,11078],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[21,11081,11075,11082,11085],{},[645,11083,11084],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[21,11087,11066,11088],{},[645,11089,11090],{},"全局区：",[21,11092,11093],{},"​\t\t全局变量和静态变量存放在此.",[21,11095,11096],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[21,11098,11099],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[25,11101,11103],{"className":486,"code":11102,"language":488,"meta":30,"style":30},"\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",[32,11104,11105,11110,11123,11136,11140,11145,11160,11175,11179,11188,11192,11197,11210,11223,11227,11232,11258,11284,11288,11315,11341,11345,11350,11366,11381,11385,11411,11437,11441,11466,11491,11495,11521,11547,11551,11567,11582,11608,11634,11638,11648,11652,11660],{"__ignoreMap":30},[35,11106,11107],{"class":37,"line":38},[35,11108,11109],{"class":41},"\u002F\u002F全局变量\n",[35,11111,11112,11114,11117,11119,11121],{"class":37,"line":45},[35,11113,502],{"class":495},[35,11115,11116],{"class":359}," g_a ",[35,11118,544],{"class":495},[35,11120,2379],{"class":58},[35,11122,1655],{"class":359},[35,11124,11125,11127,11130,11132,11134],{"class":37,"line":55},[35,11126,502],{"class":495},[35,11128,11129],{"class":359}," g_b ",[35,11131,544],{"class":495},[35,11133,2379],{"class":58},[35,11135,1655],{"class":359},[35,11137,11138],{"class":37,"line":65},[35,11139,141],{"emptyLinePlaceholder":140},[35,11141,11142],{"class":37,"line":74},[35,11143,11144],{"class":41},"\u002F\u002F全局常量\n",[35,11146,11147,11149,11151,11154,11156,11158],{"class":37,"line":83},[35,11148,7126],{"class":495},[35,11150,2723],{"class":495},[35,11152,11153],{"class":359}," c_g_a ",[35,11155,544],{"class":495},[35,11157,2379],{"class":58},[35,11159,1655],{"class":359},[35,11161,11162,11164,11166,11169,11171,11173],{"class":37,"line":92},[35,11163,7126],{"class":495},[35,11165,2723],{"class":495},[35,11167,11168],{"class":359}," c_g_b ",[35,11170,544],{"class":495},[35,11172,2379],{"class":58},[35,11174,1655],{"class":359},[35,11176,11177],{"class":37,"line":101},[35,11178,141],{"emptyLinePlaceholder":140},[35,11180,11181,11183,11185],{"class":37,"line":110},[35,11182,502],{"class":495},[35,11184,2314],{"class":48},[35,11186,11187],{"class":359},"() {\n",[35,11189,11190],{"class":37,"line":119},[35,11191,141],{"emptyLinePlaceholder":140},[35,11193,11194],{"class":37,"line":128},[35,11195,11196],{"class":41},"    \u002F\u002F局部变量\n",[35,11198,11199,11201,11204,11206,11208],{"class":37,"line":137},[35,11200,2326],{"class":495},[35,11202,11203],{"class":359}," a ",[35,11205,544],{"class":495},[35,11207,2379],{"class":58},[35,11209,1655],{"class":359},[35,11211,11212,11214,11217,11219,11221],{"class":37,"line":144},[35,11213,2326],{"class":495},[35,11215,11216],{"class":359}," b ",[35,11218,544],{"class":495},[35,11220,2379],{"class":58},[35,11222,1655],{"class":359},[35,11224,11225],{"class":37,"line":150},[35,11226,141],{"emptyLinePlaceholder":140},[35,11228,11229],{"class":37,"line":159},[35,11230,11231],{"class":41},"    \u002F\u002F打印地址\n",[35,11233,11234,11236,11238,11241,11243,11245,11247,11249,11251,11254,11256],{"class":37,"line":168},[35,11235,6863],{"class":359},[35,11237,1538],{"class":495},[35,11239,11240],{"class":306}," \"局部变量a地址为： \"",[35,11242,1805],{"class":495},[35,11244,2012],{"class":359},[35,11246,502],{"class":495},[35,11248,923],{"class":359},[35,11250,847],{"class":495},[35,11252,11253],{"class":359},"a ",[35,11255,1538],{"class":495},[35,11257,9174],{"class":359},[35,11259,11260,11262,11264,11267,11269,11271,11273,11275,11277,11280,11282],{"class":37,"line":177},[35,11261,6863],{"class":359},[35,11263,1538],{"class":495},[35,11265,11266],{"class":306}," \"局部变量b地址为： \"",[35,11268,1805],{"class":495},[35,11270,2012],{"class":359},[35,11272,502],{"class":495},[35,11274,923],{"class":359},[35,11276,847],{"class":495},[35,11278,11279],{"class":359},"b ",[35,11281,1538],{"class":495},[35,11283,9174],{"class":359},[35,11285,11286],{"class":37,"line":182},[35,11287,141],{"emptyLinePlaceholder":140},[35,11289,11290,11292,11294,11297,11299,11302,11304,11306,11308,11311,11313],{"class":37,"line":188},[35,11291,6863],{"class":359},[35,11293,1538],{"class":495},[35,11295,11296],{"class":306}," \"全局变量g_a地址为： \"",[35,11298,1805],{"class":495},[35,11300,11301],{"class":359},"  (",[35,11303,502],{"class":495},[35,11305,923],{"class":359},[35,11307,847],{"class":495},[35,11309,11310],{"class":359},"g_a ",[35,11312,1538],{"class":495},[35,11314,9174],{"class":359},[35,11316,11317,11319,11321,11324,11326,11328,11330,11332,11334,11337,11339],{"class":37,"line":197},[35,11318,6863],{"class":359},[35,11320,1538],{"class":495},[35,11322,11323],{"class":306}," \"全局变量g_b地址为： \"",[35,11325,1805],{"class":495},[35,11327,11301],{"class":359},[35,11329,502],{"class":495},[35,11331,923],{"class":359},[35,11333,847],{"class":495},[35,11335,11336],{"class":359},"g_b ",[35,11338,1538],{"class":495},[35,11340,9174],{"class":359},[35,11342,11343],{"class":37,"line":206},[35,11344,141],{"emptyLinePlaceholder":140},[35,11346,11347],{"class":37,"line":215},[35,11348,11349],{"class":41},"    \u002F\u002F静态变量\n",[35,11351,11352,11355,11357,11360,11362,11364],{"class":37,"line":224},[35,11353,11354],{"class":495},"    static",[35,11356,2723],{"class":495},[35,11358,11359],{"class":359}," s_a ",[35,11361,544],{"class":495},[35,11363,2379],{"class":58},[35,11365,1655],{"class":359},[35,11367,11368,11370,11372,11375,11377,11379],{"class":37,"line":233},[35,11369,11354],{"class":495},[35,11371,2723],{"class":495},[35,11373,11374],{"class":359}," s_b ",[35,11376,544],{"class":495},[35,11378,2379],{"class":58},[35,11380,1655],{"class":359},[35,11382,11383],{"class":37,"line":238},[35,11384,141],{"emptyLinePlaceholder":140},[35,11386,11387,11389,11391,11394,11396,11398,11400,11402,11404,11407,11409],{"class":37,"line":244},[35,11388,6863],{"class":359},[35,11390,1538],{"class":495},[35,11392,11393],{"class":306}," \"静态变量s_a地址为： \"",[35,11395,1805],{"class":495},[35,11397,2012],{"class":359},[35,11399,502],{"class":495},[35,11401,923],{"class":359},[35,11403,847],{"class":495},[35,11405,11406],{"class":359},"s_a ",[35,11408,1538],{"class":495},[35,11410,9174],{"class":359},[35,11412,11413,11415,11417,11420,11422,11424,11426,11428,11430,11433,11435],{"class":37,"line":253},[35,11414,6863],{"class":359},[35,11416,1538],{"class":495},[35,11418,11419],{"class":306}," \"静态变量s_b地址为： \"",[35,11421,1805],{"class":495},[35,11423,2012],{"class":359},[35,11425,502],{"class":495},[35,11427,923],{"class":359},[35,11429,847],{"class":495},[35,11431,11432],{"class":359},"s_b ",[35,11434,1538],{"class":495},[35,11436,9174],{"class":359},[35,11438,11439],{"class":37,"line":262},[35,11440,141],{"emptyLinePlaceholder":140},[35,11442,11443,11445,11447,11450,11452,11454,11456,11458,11460,11462,11464],{"class":37,"line":271},[35,11444,6863],{"class":359},[35,11446,1538],{"class":495},[35,11448,11449],{"class":306}," \"字符串常量地址为： \"",[35,11451,1805],{"class":495},[35,11453,2012],{"class":359},[35,11455,502],{"class":495},[35,11457,923],{"class":359},[35,11459,847],{"class":495},[35,11461,1555],{"class":306},[35,11463,1805],{"class":495},[35,11465,9174],{"class":359},[35,11467,11468,11470,11472,11474,11476,11478,11480,11482,11484,11487,11489],{"class":37,"line":280},[35,11469,6863],{"class":359},[35,11471,1538],{"class":495},[35,11473,11449],{"class":306},[35,11475,1805],{"class":495},[35,11477,2012],{"class":359},[35,11479,502],{"class":495},[35,11481,923],{"class":359},[35,11483,847],{"class":495},[35,11485,11486],{"class":306},"\"hello world1\"",[35,11488,1805],{"class":495},[35,11490,9174],{"class":359},[35,11492,11493],{"class":37,"line":289},[35,11494,141],{"emptyLinePlaceholder":140},[35,11496,11497,11499,11501,11504,11506,11508,11510,11512,11514,11517,11519],{"class":37,"line":294},[35,11498,6863],{"class":359},[35,11500,1538],{"class":495},[35,11502,11503],{"class":306}," \"全局常量c_g_a地址为： \"",[35,11505,1805],{"class":495},[35,11507,2012],{"class":359},[35,11509,502],{"class":495},[35,11511,923],{"class":359},[35,11513,847],{"class":495},[35,11515,11516],{"class":359},"c_g_a ",[35,11518,1538],{"class":495},[35,11520,9174],{"class":359},[35,11522,11523,11525,11527,11530,11532,11534,11536,11538,11540,11543,11545],{"class":37,"line":300},[35,11524,6863],{"class":359},[35,11526,1538],{"class":495},[35,11528,11529],{"class":306}," \"全局常量c_g_b地址为： \"",[35,11531,1805],{"class":495},[35,11533,2012],{"class":359},[35,11535,502],{"class":495},[35,11537,923],{"class":359},[35,11539,847],{"class":495},[35,11541,11542],{"class":359},"c_g_b ",[35,11544,1538],{"class":495},[35,11546,9174],{"class":359},[35,11548,11549],{"class":37,"line":313},[35,11550,141],{"emptyLinePlaceholder":140},[35,11552,11553,11556,11558,11561,11563,11565],{"class":37,"line":324},[35,11554,11555],{"class":495},"    const",[35,11557,2723],{"class":495},[35,11559,11560],{"class":359}," c_l_a ",[35,11562,544],{"class":495},[35,11564,2379],{"class":58},[35,11566,1655],{"class":359},[35,11568,11569,11571,11573,11576,11578,11580],{"class":37,"line":2955},[35,11570,11555],{"class":495},[35,11572,2723],{"class":495},[35,11574,11575],{"class":359}," c_l_b ",[35,11577,544],{"class":495},[35,11579,2379],{"class":58},[35,11581,1655],{"class":359},[35,11583,11584,11586,11588,11591,11593,11595,11597,11599,11601,11604,11606],{"class":37,"line":8282},[35,11585,6863],{"class":359},[35,11587,1538],{"class":495},[35,11589,11590],{"class":306}," \"局部常量c_l_a地址为： \"",[35,11592,1805],{"class":495},[35,11594,2012],{"class":359},[35,11596,502],{"class":495},[35,11598,923],{"class":359},[35,11600,847],{"class":495},[35,11602,11603],{"class":359},"c_l_a ",[35,11605,1538],{"class":495},[35,11607,9174],{"class":359},[35,11609,11610,11612,11614,11617,11619,11621,11623,11625,11627,11630,11632],{"class":37,"line":8306},[35,11611,6863],{"class":359},[35,11613,1538],{"class":495},[35,11615,11616],{"class":306}," \"局部常量c_l_b地址为： \"",[35,11618,1805],{"class":495},[35,11620,2012],{"class":359},[35,11622,502],{"class":495},[35,11624,923],{"class":359},[35,11626,847],{"class":495},[35,11628,11629],{"class":359},"c_l_b ",[35,11631,1538],{"class":495},[35,11633,9174],{"class":359},[35,11635,11636],{"class":37,"line":8311},[35,11637,141],{"emptyLinePlaceholder":140},[35,11639,11640,11642,11644,11646],{"class":37,"line":8317},[35,11641,2644],{"class":48},[35,11643,499],{"class":359},[35,11645,2649],{"class":306},[35,11647,3053],{"class":359},[35,11649,11650],{"class":37,"line":8344},[35,11651,141],{"emptyLinePlaceholder":140},[35,11653,11654,11656,11658],{"class":37,"line":8349},[35,11655,4424],{"class":495},[35,11657,4427],{"class":58},[35,11659,1655],{"class":359},[35,11661,11662],{"class":37,"line":8355},[35,11663,1926],{"class":359},[21,11665,11666],{},"总结：",[1501,11668,11669,11672,11675,11678],{},[17,11670,11671],{},"c++中程序运行前分为全局区和代码区",[17,11673,11674],{},"代码区特点是共享和只读",[17,11676,11677],{},"全局区中存放全局变量、静态变量、常量",[17,11679,11680],{},"常量区中存放const修饰的全局常量和字符串常量",[465,11682,11684],{"id":11683},"_512程序运行后","5.1.2程序运行后",[14,11686,11687],{},[17,11688,11689],{},"栈区：",[1501,11691,11692,11699],{},[17,11693,11694,11695,11698],{},"由编译器自动分配释放, 存放",[645,11696,11697],{},"函数的参数值,局部变量","等",[17,11700,11701,11702,11705],{},"注意事项：",[645,11703,11704],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[25,11707,11709],{"className":486,"code":11708,"language":488,"meta":30,"style":30},"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",[32,11710,11711,11722,11726,11741,11753,11757,11761,11769,11774,11789,11807,11824,11834,11842],{"__ignoreMap":30},[35,11712,11713,11715,11717,11720],{"class":37,"line":38},[35,11714,502],{"class":495},[35,11716,6852],{"class":495},[35,11718,11719],{"class":48}," func",[35,11721,2317],{"class":359},[35,11723,11724],{"class":37,"line":45},[35,11725,1907],{"class":359},[35,11727,11728,11730,11732,11734,11736,11738],{"class":37,"line":55},[35,11729,2326],{"class":495},[35,11731,11203],{"class":359},[35,11733,544],{"class":495},[35,11735,2379],{"class":58},[35,11737,553],{"class":359},[35,11739,11740],{"class":41}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[35,11742,11743,11745,11747,11750],{"class":37,"line":65},[35,11744,4424],{"class":495},[35,11746,10918],{"class":495},[35,11748,11749],{"class":359},"a;",[35,11751,11752],{"class":41}," \u002F\u002F放回局部变量的地址\n",[35,11754,11755],{"class":37,"line":74},[35,11756,1926],{"class":359},[35,11758,11759],{"class":37,"line":83},[35,11760,141],{"emptyLinePlaceholder":140},[35,11762,11763,11765,11767],{"class":37,"line":92},[35,11764,502],{"class":495},[35,11766,2314],{"class":48},[35,11768,11187],{"class":359},[35,11770,11771],{"class":37,"line":101},[35,11772,11773],{"class":41},"    \u002F\u002F接受func的返回值\n",[35,11775,11776,11778,11780,11783,11785,11787],{"class":37,"line":110},[35,11777,2326],{"class":495},[35,11779,6852],{"class":495},[35,11781,11782],{"class":359},"p ",[35,11784,544],{"class":495},[35,11786,11719],{"class":48},[35,11788,5970],{"class":359},[35,11790,11791,11793,11795,11797,11799,11801,11804],{"class":37,"line":119},[35,11792,6863],{"class":359},[35,11794,1538],{"class":495},[35,11796,6852],{"class":495},[35,11798,11782],{"class":359},[35,11800,1538],{"class":495},[35,11802,11803],{"class":359}," endl;",[35,11805,11806],{"class":41}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[35,11808,11809,11811,11813,11815,11817,11819,11821],{"class":37,"line":128},[35,11810,6863],{"class":359},[35,11812,1538],{"class":495},[35,11814,6852],{"class":495},[35,11816,11782],{"class":359},[35,11818,1538],{"class":495},[35,11820,11803],{"class":359},[35,11822,11823],{"class":41}," \u002F\u002F第二次这个数据不再保留\n",[35,11825,11826,11828,11830,11832],{"class":37,"line":137},[35,11827,2644],{"class":48},[35,11829,499],{"class":359},[35,11831,2649],{"class":306},[35,11833,3053],{"class":359},[35,11835,11836,11838,11840],{"class":37,"line":144},[35,11837,4424],{"class":495},[35,11839,4427],{"class":58},[35,11841,1655],{"class":359},[35,11843,11844],{"class":37,"line":150},[35,11845,1926],{"class":359},[21,11847,11848],{},"输出结果：",[21,11850,11851],{},[1823,11852],{"alt":11853,"src":11854},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[21,11856,11857],{},"总结：不要返回局部变量的地址",[14,11859,11860],{"start":45},[17,11861,11862],{},"堆区",[1501,11864,11865,11868],{},[17,11866,11867],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[17,11869,11870],{},"在c++中主要利用new在堆区开辟内存",[25,11872,11874],{"className":486,"code":11873,"language":488,"meta":30,"style":30},"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",[32,11875,11876,11891,11895,11900,11921,11928,11932,11940,11944,11949,11963,11975],{"__ignoreMap":30},[35,11877,11878,11880,11883,11886,11888],{"class":37,"line":38},[35,11879,502],{"class":495},[35,11881,11882],{"class":495},"  *",[35,11884,11885],{"class":48},"func",[35,11887,2767],{"class":359},[35,11889,11890],{"class":41},"  \u002F\u002F函数返回指针\n",[35,11892,11893],{"class":37,"line":45},[35,11894,1907],{"class":359},[35,11896,11897],{"class":37,"line":55},[35,11898,11899],{"class":41},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[35,11901,11902,11904,11906,11908,11910,11913,11915,11917,11919],{"class":37,"line":65},[35,11903,4481],{"class":495},[35,11905,6852],{"class":495},[35,11907,21],{"class":359},[35,11909,544],{"class":495},[35,11911,11912],{"class":495}," new",[35,11914,2723],{"class":495},[35,11916,499],{"class":359},[35,11918,940],{"class":58},[35,11920,3053],{"class":359},[35,11922,11923,11925],{"class":37,"line":74},[35,11924,4715],{"class":495},[35,11926,11927],{"class":359}," p;\n",[35,11929,11930],{"class":37,"line":83},[35,11931,1926],{"class":359},[35,11933,11934,11936,11938],{"class":37,"line":92},[35,11935,502],{"class":495},[35,11937,2314],{"class":48},[35,11939,2317],{"class":359},[35,11941,11942],{"class":37,"line":101},[35,11943,1907],{"class":359},[35,11945,11946],{"class":37,"line":110},[35,11947,11948],{"class":41},"    \u002F\u002F在堆区开辟数据\n",[35,11950,11951,11953,11955,11957,11959,11961],{"class":37,"line":119},[35,11952,2326],{"class":495},[35,11954,6852],{"class":495},[35,11956,21],{"class":359},[35,11958,544],{"class":495},[35,11960,11885],{"class":48},[35,11962,5970],{"class":359},[35,11964,11965,11967,11969,11971,11973],{"class":37,"line":128},[35,11966,1912],{"class":359},[35,11968,6753],{"class":495},[35,11970,21],{"class":359},[35,11972,1538],{"class":495},[35,11974,1560],{"class":359},[35,11976,11977],{"class":37,"line":137},[35,11978,1926],{"class":359},[21,11980,11981],{},"图片展示：",[21,11983,11984],{},[1823,11985],{"alt":11853,"src":11986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[21,11988,11989],{},"堆区内存由程序员管生死！！！",[14,11991,11992],{"start":55},[17,11993,11994],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[21,11996,11997],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[21,11999,12000,12001],{},"​语法：",[32,12002,12003],{}," new 数据类型",[21,12005,12006],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[25,12008,12010],{"className":486,"code":12009,"language":488,"meta":30,"style":30},"\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",[32,12011,12012,12017,12027,12031,12036,12041,12063,12067,12075,12079,12093,12105,12117,12129,12134,12139,12150,12154,12159,12167,12171,12176,12198,12224,12228,12246,12250,12276,12280,12292,12296,12301,12306,12314,12318,12322,12330,12334,12340,12346],{"__ignoreMap":30},[35,12013,12014],{"class":37,"line":38},[35,12015,12016],{"class":41},"\u002F\u002F1.new的基本语法\n",[35,12018,12019,12021,12023,12025],{"class":37,"line":45},[35,12020,502],{"class":495},[35,12022,6852],{"class":495},[35,12024,11885],{"class":48},[35,12026,2317],{"class":359},[35,12028,12029],{"class":37,"line":55},[35,12030,1907],{"class":359},[35,12032,12033],{"class":37,"line":65},[35,12034,12035],{"class":41},"    \u002F\u002F在堆区创建整型数据\n",[35,12037,12038],{"class":37,"line":74},[35,12039,12040],{"class":41},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[35,12042,12043,12045,12047,12049,12052,12054,12056,12058,12060],{"class":37,"line":83},[35,12044,2326],{"class":495},[35,12046,6852],{"class":495},[35,12048,21],{"class":359},[35,12050,12051],{"class":495},"=new",[35,12053,2723],{"class":495},[35,12055,499],{"class":359},[35,12057,940],{"class":58},[35,12059,6300],{"class":359},[35,12061,12062],{"class":41},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[35,12064,12065],{"class":37,"line":92},[35,12066,1926],{"class":359},[35,12068,12069,12071,12073],{"class":37,"line":101},[35,12070,5698],{"class":495},[35,12072,5922],{"class":48},[35,12074,2317],{"class":359},[35,12076,12077],{"class":37,"line":110},[35,12078,1907],{"class":359},[35,12080,12081,12083,12085,12087,12089,12091],{"class":37,"line":119},[35,12082,2326],{"class":495},[35,12084,6852],{"class":495},[35,12086,21],{"class":359},[35,12088,544],{"class":495},[35,12090,11885],{"class":48},[35,12092,5970],{"class":359},[35,12094,12095,12097,12099,12101,12103],{"class":37,"line":128},[35,12096,1912],{"class":359},[35,12098,6753],{"class":495},[35,12100,21],{"class":359},[35,12102,1538],{"class":495},[35,12104,1560],{"class":359},[35,12106,12107,12109,12111,12113,12115],{"class":37,"line":137},[35,12108,1912],{"class":359},[35,12110,6753],{"class":495},[35,12112,21],{"class":359},[35,12114,1538],{"class":495},[35,12116,1560],{"class":359},[35,12118,12119,12121,12123,12125,12127],{"class":37,"line":144},[35,12120,1912],{"class":359},[35,12122,6753],{"class":495},[35,12124,21],{"class":359},[35,12126,1538],{"class":495},[35,12128,1560],{"class":359},[35,12130,12131],{"class":37,"line":150},[35,12132,12133],{"class":41},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[35,12135,12136],{"class":37,"line":159},[35,12137,12138],{"class":41},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[35,12140,12141,12144,12147],{"class":37,"line":168},[35,12142,12143],{"class":495},"    delete",[35,12145,12146],{"class":359}," p;",[35,12148,12149],{"class":41},"\u002F\u002F删除这块地址\n",[35,12151,12152],{"class":37,"line":177},[35,12153,1926],{"class":359},[35,12155,12156],{"class":37,"line":182},[35,12157,12158],{"class":41},"\u002F\u002F2.在堆区利用new开辟数组\n",[35,12160,12161,12163,12165],{"class":37,"line":188},[35,12162,5698],{"class":495},[35,12164,5991],{"class":48},[35,12166,2317],{"class":359},[35,12168,12169],{"class":37,"line":197},[35,12170,1907],{"class":359},[35,12172,12173],{"class":37,"line":206},[35,12174,12175],{"class":41},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[35,12177,12178,12180,12182,12184,12186,12188,12190,12192,12195],{"class":37,"line":215},[35,12179,2326],{"class":495},[35,12181,6852],{"class":495},[35,12183,4214],{"class":359},[35,12185,12051],{"class":495},[35,12187,2723],{"class":495},[35,12189,1384],{"class":359},[35,12191,940],{"class":58},[35,12193,12194],{"class":359},"];",[35,12196,12197],{"class":41},"\u002F\u002F10代表数组有10个元素\n",[35,12199,12200,12202,12204,12206,12208,12210,12212,12214,12216,12218,12220,12222],{"class":37,"line":224},[35,12201,3535],{"class":495},[35,12203,2012],{"class":359},[35,12205,502],{"class":495},[35,12207,3366],{"class":359},[35,12209,544],{"class":495},[35,12211,687],{"class":58},[35,12213,3373],{"class":359},[35,12215,1404],{"class":495},[35,12217,940],{"class":58},[35,12219,3373],{"class":359},[35,12221,2633],{"class":495},[35,12223,505],{"class":359},[35,12225,12226],{"class":37,"line":233},[35,12227,2371],{"class":359},[35,12229,12230,12233,12235,12237,12239,12241,12243],{"class":37,"line":238},[35,12231,12232],{"class":359},"        arr[i]",[35,12234,544],{"class":495},[35,12236,935],{"class":359},[35,12238,975],{"class":495},[35,12240,807],{"class":58},[35,12242,553],{"class":359},[35,12244,12245],{"class":41},"\u002F\u002F给10个元素赋值100～109\n",[35,12247,12248],{"class":37,"line":244},[35,12249,2528],{"class":359},[35,12251,12252,12254,12256,12258,12260,12262,12264,12266,12268,12270,12272,12274],{"class":37,"line":253},[35,12253,3535],{"class":495},[35,12255,2012],{"class":359},[35,12257,502],{"class":495},[35,12259,3366],{"class":359},[35,12261,544],{"class":495},[35,12263,687],{"class":58},[35,12265,3373],{"class":359},[35,12267,1404],{"class":495},[35,12269,940],{"class":58},[35,12271,3373],{"class":359},[35,12273,2633],{"class":495},[35,12275,505],{"class":359},[35,12277,12278],{"class":37,"line":262},[35,12279,2371],{"class":359},[35,12281,12282,12284,12286,12288,12290],{"class":37,"line":271},[35,12283,3785],{"class":359},[35,12285,1538],{"class":495},[35,12287,4688],{"class":359},[35,12289,1538],{"class":495},[35,12291,1560],{"class":359},[35,12293,12294],{"class":37,"line":280},[35,12295,2528],{"class":359},[35,12297,12298],{"class":37,"line":289},[35,12299,12300],{"class":41},"    \u002F\u002F释放堆区数组\n",[35,12302,12303],{"class":37,"line":294},[35,12304,12305],{"class":41},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[35,12307,12308,12311],{"class":37,"line":300},[35,12309,12310],{"class":495},"    delete[]",[35,12312,12313],{"class":359}," arr;\n",[35,12315,12316],{"class":37,"line":313},[35,12317,1926],{"class":359},[35,12319,12320],{"class":37,"line":324},[35,12321,141],{"emptyLinePlaceholder":140},[35,12323,12324,12326,12328],{"class":37,"line":2955},[35,12325,502],{"class":495},[35,12327,2314],{"class":48},[35,12329,2317],{"class":359},[35,12331,12332],{"class":37,"line":8282},[35,12333,1907],{"class":359},[35,12335,12336,12338],{"class":37,"line":8306},[35,12337,5967],{"class":48},[35,12339,5970],{"class":359},[35,12341,12342,12344],{"class":37,"line":8311},[35,12343,6036],{"class":48},[35,12345,5970],{"class":359},[35,12347,12348],{"class":37,"line":8317},[35,12349,1926],{"class":359},[416,12351,12352],{},"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":30,"searchDepth":45,"depth":45,"links":12354},[12355],{"id":11023,"depth":45,"text":11024,"children":12356},[12357,12358],{"id":11055,"depth":55,"text":11056},{"id":11683,"depth":55,"text":11684},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11015,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12365,"title":12366,"body":12367,"description":30,"extension":422,"meta":13848,"navigation":140,"path":13849,"seo":13850,"stem":13851,"__hash__":13852},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12368,"toc":13840},[12369,12372,12376,12379,12382,12551,12555,12560,12577,12582,12734,12738,12741,12744,13138,13142,13145,13150,13153,13465,13469,13475,13635,13637,13645,13649,13652,13659,13837],[10,12370,12366],{"id":12371},"_6引用",[438,12373,12375],{"id":12374},"_61引用基本用法","6.1引用基本用法",[21,12377,12378],{},"引用的本质：给变量起别名",[21,12380,12381],{},"语法：数据类型 &别名=原名",[25,12383,12385],{"className":486,"code":12384,"language":488,"meta":30,"style":30},"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",[32,12386,12387,12395,12399,12411,12423,12427,12446,12465,12469,12480,12484,12503,12521,12525,12535,12539,12547],{"__ignoreMap":30},[35,12388,12389,12391,12393],{"class":37,"line":38},[35,12390,502],{"class":495},[35,12392,2314],{"class":48},[35,12394,11187],{"class":359},[35,12396,12397],{"class":37,"line":45},[35,12398,141],{"emptyLinePlaceholder":140},[35,12400,12401,12403,12405,12407,12409],{"class":37,"line":55},[35,12402,2326],{"class":495},[35,12404,11203],{"class":359},[35,12406,544],{"class":495},[35,12408,2379],{"class":58},[35,12410,1655],{"class":359},[35,12412,12413,12415,12417,12419,12421],{"class":37,"line":65},[35,12414,2326],{"class":495},[35,12416,10918],{"class":495},[35,12418,11279],{"class":359},[35,12420,544],{"class":495},[35,12422,1793],{"class":359},[35,12424,12425],{"class":37,"line":74},[35,12426,141],{"emptyLinePlaceholder":140},[35,12428,12429,12431,12433,12436,12438,12440,12442,12444],{"class":37,"line":83},[35,12430,6863],{"class":359},[35,12432,1538],{"class":495},[35,12434,12435],{"class":306}," \"a = \"",[35,12437,1805],{"class":495},[35,12439,11203],{"class":359},[35,12441,1538],{"class":495},[35,12443,11803],{"class":359},[35,12445,7602],{"class":41},[35,12447,12448,12450,12452,12455,12457,12459,12461,12463],{"class":37,"line":92},[35,12449,6863],{"class":359},[35,12451,1538],{"class":495},[35,12453,12454],{"class":306}," \"b = \"",[35,12456,1805],{"class":495},[35,12458,11216],{"class":359},[35,12460,1538],{"class":495},[35,12462,11803],{"class":359},[35,12464,7602],{"class":41},[35,12466,12467],{"class":37,"line":101},[35,12468,141],{"emptyLinePlaceholder":140},[35,12470,12471,12474,12476,12478],{"class":37,"line":110},[35,12472,12473],{"class":359},"    b ",[35,12475,544],{"class":495},[35,12477,6088],{"class":58},[35,12479,1655],{"class":359},[35,12481,12482],{"class":37,"line":119},[35,12483,141],{"emptyLinePlaceholder":140},[35,12485,12486,12488,12490,12492,12494,12496,12498,12500],{"class":37,"line":128},[35,12487,6863],{"class":359},[35,12489,1538],{"class":495},[35,12491,12435],{"class":306},[35,12493,1805],{"class":495},[35,12495,11203],{"class":359},[35,12497,1538],{"class":495},[35,12499,11803],{"class":359},[35,12501,12502],{"class":41},"\u002F\u002F100\n",[35,12504,12505,12507,12509,12511,12513,12515,12517,12519],{"class":37,"line":137},[35,12506,6863],{"class":359},[35,12508,1538],{"class":495},[35,12510,12454],{"class":306},[35,12512,1805],{"class":495},[35,12514,11216],{"class":359},[35,12516,1538],{"class":495},[35,12518,11803],{"class":359},[35,12520,12502],{"class":41},[35,12522,12523],{"class":37,"line":144},[35,12524,141],{"emptyLinePlaceholder":140},[35,12526,12527,12529,12531,12533],{"class":37,"line":150},[35,12528,2644],{"class":48},[35,12530,499],{"class":359},[35,12532,2649],{"class":306},[35,12534,3053],{"class":359},[35,12536,12537],{"class":37,"line":159},[35,12538,141],{"emptyLinePlaceholder":140},[35,12540,12541,12543,12545],{"class":37,"line":168},[35,12542,4424],{"class":495},[35,12544,4427],{"class":58},[35,12546,1655],{"class":359},[35,12548,12549],{"class":37,"line":177},[35,12550,1926],{"class":359},[438,12552,12554],{"id":12553},"_62引用的注意事项","6.2引用的注意事项",[14,12556,12557],{},[17,12558,12559],{},"引用必须要初始化",[25,12561,12563],{"className":486,"code":12562,"language":488,"meta":30,"style":30},"int &b;\u002F\u002F非常错误！\n",[32,12564,12565],{"__ignoreMap":30},[35,12566,12567,12569,12571,12574],{"class":37,"line":38},[35,12568,502],{"class":495},[35,12570,10918],{"class":495},[35,12572,12573],{"class":359},"b;",[35,12575,12576],{"class":41},"\u002F\u002F非常错误！\n",[14,12578,12579],{"start":45},[17,12580,12581],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[25,12583,12585],{"className":486,"code":12584,"language":488,"meta":30,"style":30},"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",[32,12586,12587,12595,12607,12619,12627,12643,12656,12674,12692,12712,12722,12730],{"__ignoreMap":30},[35,12588,12589,12591,12593],{"class":37,"line":38},[35,12590,502],{"class":495},[35,12592,2314],{"class":48},[35,12594,11187],{"class":359},[35,12596,12597,12599,12601,12603,12605],{"class":37,"line":45},[35,12598,2326],{"class":495},[35,12600,11203],{"class":359},[35,12602,544],{"class":495},[35,12604,2379],{"class":58},[35,12606,1655],{"class":359},[35,12608,12609,12611,12613,12615,12617],{"class":37,"line":55},[35,12610,2326],{"class":495},[35,12612,11216],{"class":359},[35,12614,544],{"class":495},[35,12616,9284],{"class":58},[35,12618,1655],{"class":359},[35,12620,12621,12624],{"class":37,"line":65},[35,12622,12623],{"class":41},"    \u002F\u002Fint &c;",[35,12625,12626],{"class":41}," \u002F\u002F错误，引用必须初始化\n",[35,12628,12629,12631,12633,12635,12637,12640],{"class":37,"line":74},[35,12630,2326],{"class":495},[35,12632,10918],{"class":495},[35,12634,3280],{"class":359},[35,12636,544],{"class":495},[35,12638,12639],{"class":359}," a;",[35,12641,12642],{"class":41}," \u002F\u002F一旦初始化后，就不可以更改\n",[35,12644,12645,12648,12650,12653],{"class":37,"line":83},[35,12646,12647],{"class":359},"    c ",[35,12649,544],{"class":495},[35,12651,12652],{"class":359}," b;",[35,12654,12655],{"class":41}," \u002F\u002F这是赋值操作，不是更改引用\n",[35,12657,12658,12660,12662,12664,12666,12668,12670,12672],{"class":37,"line":92},[35,12659,6863],{"class":359},[35,12661,1538],{"class":495},[35,12663,12435],{"class":306},[35,12665,1805],{"class":495},[35,12667,11203],{"class":359},[35,12669,1538],{"class":495},[35,12671,11803],{"class":359},[35,12673,7587],{"class":41},[35,12675,12676,12678,12680,12682,12684,12686,12688,12690],{"class":37,"line":101},[35,12677,6863],{"class":359},[35,12679,1538],{"class":495},[35,12681,12454],{"class":306},[35,12683,1805],{"class":495},[35,12685,11216],{"class":359},[35,12687,1538],{"class":495},[35,12689,11803],{"class":359},[35,12691,7587],{"class":41},[35,12693,12694,12696,12698,12701,12703,12706,12708,12710],{"class":37,"line":110},[35,12695,6863],{"class":359},[35,12697,1538],{"class":495},[35,12699,12700],{"class":306}," \"c = \"",[35,12702,1805],{"class":495},[35,12704,12705],{"class":359}," c ",[35,12707,1538],{"class":495},[35,12709,11803],{"class":359},[35,12711,7587],{"class":41},[35,12713,12714,12716,12718,12720],{"class":37,"line":119},[35,12715,2644],{"class":48},[35,12717,499],{"class":359},[35,12719,2649],{"class":306},[35,12721,3053],{"class":359},[35,12723,12724,12726,12728],{"class":37,"line":128},[35,12725,4424],{"class":495},[35,12727,4427],{"class":58},[35,12729,1655],{"class":359},[35,12731,12732],{"class":37,"line":137},[35,12733,1926],{"class":359},[438,12735,12737],{"id":12736},"_63引用做函数参数","6.3引用做函数参数",[21,12739,12740],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[21,12742,12743],{},"优点：可以简化指针修改实参",[25,12745,12747],{"className":486,"code":12746,"language":488,"meta":30,"style":30},"\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",[32,12748,12749,12754,12777,12788,12798,12807,12811,12815,12820,12842,12854,12866,12876,12880,12884,12889,12911,12921,12929,12937,12941,12945,12953,12957,12969,12981,12985,12996,13022,13026,13046,13070,13074,13084,13108,13112,13122,13126,13134],{"__ignoreMap":30},[35,12750,12751],{"class":37,"line":38},[35,12752,12753],{"class":41},"\u002F\u002F1. 值传递\n",[35,12755,12756,12758,12761,12763,12765,12767,12770,12772,12774],{"class":37,"line":45},[35,12757,5698],{"class":495},[35,12759,12760],{"class":48}," mySwap01",[35,12762,499],{"class":359},[35,12764,502],{"class":495},[35,12766,1759],{"class":5550},[35,12768,12769],{"class":359},", ",[35,12771,502],{"class":495},[35,12773,3167],{"class":5550},[35,12775,12776],{"class":359},") {\n",[35,12778,12779,12781,12784,12786],{"class":37,"line":55},[35,12780,2326],{"class":495},[35,12782,12783],{"class":359}," temp ",[35,12785,544],{"class":495},[35,12787,1793],{"class":359},[35,12789,12790,12793,12795],{"class":37,"line":65},[35,12791,12792],{"class":359},"    a ",[35,12794,544],{"class":495},[35,12796,12797],{"class":359}," b;\n",[35,12799,12800,12802,12804],{"class":37,"line":74},[35,12801,12473],{"class":359},[35,12803,544],{"class":495},[35,12805,12806],{"class":359}," temp;\n",[35,12808,12809],{"class":37,"line":83},[35,12810,1926],{"class":359},[35,12812,12813],{"class":37,"line":92},[35,12814,141],{"emptyLinePlaceholder":140},[35,12816,12817],{"class":37,"line":101},[35,12818,12819],{"class":41},"\u002F\u002F2. 地址传递\n",[35,12821,12822,12824,12827,12829,12832,12834,12836,12838,12840],{"class":37,"line":110},[35,12823,5698],{"class":495},[35,12825,12826],{"class":48}," mySwap02",[35,12828,499],{"class":359},[35,12830,12831],{"class":495},"int*",[35,12833,1759],{"class":5550},[35,12835,12769],{"class":359},[35,12837,12831],{"class":495},[35,12839,3167],{"class":5550},[35,12841,12776],{"class":359},[35,12843,12844,12846,12848,12850,12852],{"class":37,"line":119},[35,12845,2326],{"class":495},[35,12847,12783],{"class":359},[35,12849,544],{"class":495},[35,12851,6852],{"class":495},[35,12853,6531],{"class":359},[35,12855,12856,12858,12860,12862,12864],{"class":37,"line":128},[35,12857,6737],{"class":495},[35,12859,11253],{"class":359},[35,12861,544],{"class":495},[35,12863,6852],{"class":495},[35,12865,6403],{"class":359},[35,12867,12868,12870,12872,12874],{"class":37,"line":137},[35,12869,6737],{"class":495},[35,12871,11279],{"class":359},[35,12873,544],{"class":495},[35,12875,12806],{"class":359},[35,12877,12878],{"class":37,"line":144},[35,12879,1926],{"class":359},[35,12881,12882],{"class":37,"line":150},[35,12883,141],{"emptyLinePlaceholder":140},[35,12885,12886],{"class":37,"line":159},[35,12887,12888],{"class":41},"\u002F\u002F3. 引用传递\n",[35,12890,12891,12893,12896,12898,12901,12903,12905,12907,12909],{"class":37,"line":168},[35,12892,5698],{"class":495},[35,12894,12895],{"class":48}," mySwap03",[35,12897,499],{"class":359},[35,12899,12900],{"class":495},"int&",[35,12902,1759],{"class":5550},[35,12904,12769],{"class":359},[35,12906,12900],{"class":495},[35,12908,3167],{"class":5550},[35,12910,12776],{"class":359},[35,12912,12913,12915,12917,12919],{"class":37,"line":177},[35,12914,2326],{"class":495},[35,12916,12783],{"class":359},[35,12918,544],{"class":495},[35,12920,1793],{"class":359},[35,12922,12923,12925,12927],{"class":37,"line":182},[35,12924,12792],{"class":359},[35,12926,544],{"class":495},[35,12928,12797],{"class":359},[35,12930,12931,12933,12935],{"class":37,"line":188},[35,12932,12473],{"class":359},[35,12934,544],{"class":495},[35,12936,12806],{"class":359},[35,12938,12939],{"class":37,"line":197},[35,12940,1926],{"class":359},[35,12942,12943],{"class":37,"line":206},[35,12944,141],{"emptyLinePlaceholder":140},[35,12946,12947,12949,12951],{"class":37,"line":215},[35,12948,502],{"class":495},[35,12950,2314],{"class":48},[35,12952,11187],{"class":359},[35,12954,12955],{"class":37,"line":224},[35,12956,141],{"emptyLinePlaceholder":140},[35,12958,12959,12961,12963,12965,12967],{"class":37,"line":233},[35,12960,2326],{"class":495},[35,12962,11203],{"class":359},[35,12964,544],{"class":495},[35,12966,2379],{"class":58},[35,12968,1655],{"class":359},[35,12970,12971,12973,12975,12977,12979],{"class":37,"line":238},[35,12972,2326],{"class":495},[35,12974,11216],{"class":359},[35,12976,544],{"class":495},[35,12978,9284],{"class":58},[35,12980,1655],{"class":359},[35,12982,12983],{"class":37,"line":244},[35,12984,141],{"emptyLinePlaceholder":140},[35,12986,12987,12990,12993],{"class":37,"line":253},[35,12988,12989],{"class":48},"    mySwap01",[35,12991,12992],{"class":359},"(a, b);",[35,12994,12995],{"class":41},"\u002F\u002F值传递，形参不会修饰实参\n",[35,12997,12998,13000,13002,13005,13007,13009,13011,13014,13016,13018,13020],{"class":37,"line":262},[35,12999,6863],{"class":359},[35,13001,1538],{"class":495},[35,13003,13004],{"class":306}," \"a:\"",[35,13006,1805],{"class":495},[35,13008,11203],{"class":359},[35,13010,1538],{"class":495},[35,13012,13013],{"class":306}," \" b:\"",[35,13015,1805],{"class":495},[35,13017,11216],{"class":359},[35,13019,1538],{"class":495},[35,13021,9174],{"class":359},[35,13023,13024],{"class":37,"line":271},[35,13025,141],{"emptyLinePlaceholder":140},[35,13027,13028,13031,13033,13035,13038,13040,13043],{"class":37,"line":280},[35,13029,13030],{"class":48},"    mySwap02",[35,13032,499],{"class":359},[35,13034,847],{"class":495},[35,13036,13037],{"class":359},"a, ",[35,13039,847],{"class":495},[35,13041,13042],{"class":359},"b);",[35,13044,13045],{"class":41},"\u002F\u002F地址传递，形参会修饰实参\n",[35,13047,13048,13050,13052,13054,13056,13058,13060,13062,13064,13066,13068],{"class":37,"line":289},[35,13049,6863],{"class":359},[35,13051,1538],{"class":495},[35,13053,13004],{"class":306},[35,13055,1805],{"class":495},[35,13057,11203],{"class":359},[35,13059,1538],{"class":495},[35,13061,13013],{"class":306},[35,13063,1805],{"class":495},[35,13065,11216],{"class":359},[35,13067,1538],{"class":495},[35,13069,9174],{"class":359},[35,13071,13072],{"class":37,"line":294},[35,13073,141],{"emptyLinePlaceholder":140},[35,13075,13076,13079,13081],{"class":37,"line":300},[35,13077,13078],{"class":48},"    mySwap03",[35,13080,12992],{"class":359},[35,13082,13083],{"class":41},"\u002F\u002F引用传递，形参会修饰实参\n",[35,13085,13086,13088,13090,13092,13094,13096,13098,13100,13102,13104,13106],{"class":37,"line":313},[35,13087,6863],{"class":359},[35,13089,1538],{"class":495},[35,13091,13004],{"class":306},[35,13093,1805],{"class":495},[35,13095,11203],{"class":359},[35,13097,1538],{"class":495},[35,13099,13013],{"class":306},[35,13101,1805],{"class":495},[35,13103,11216],{"class":359},[35,13105,1538],{"class":495},[35,13107,9174],{"class":359},[35,13109,13110],{"class":37,"line":324},[35,13111,141],{"emptyLinePlaceholder":140},[35,13113,13114,13116,13118,13120],{"class":37,"line":2955},[35,13115,2644],{"class":48},[35,13117,499],{"class":359},[35,13119,2649],{"class":306},[35,13121,3053],{"class":359},[35,13123,13124],{"class":37,"line":8282},[35,13125,141],{"emptyLinePlaceholder":140},[35,13127,13128,13130,13132],{"class":37,"line":8306},[35,13129,4424],{"class":495},[35,13131,4427],{"class":58},[35,13133,1655],{"class":359},[35,13135,13136],{"class":37,"line":8311},[35,13137,1926],{"class":359},[438,13139,13141],{"id":13140},"_64引用做函数的返回值","6.4引用做函数的返回值",[21,13143,13144],{},"作用：引用是可以作为函数的返回值存在的",[21,13146,9359,13147],{},[645,13148,13149],{},"不要返回局部变量引用",[21,13151,13152],{},"用法：函数调用作为左值",[25,13154,13156],{"className":10275,"code":13155,"language":10277,"meta":30,"style":30},"\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",[32,13157,13158,13163,13171,13186,13192,13196,13200,13205,13213,13230,13236,13240,13244,13252,13256,13261,13275,13295,13314,13318,13323,13336,13356,13374,13378,13394,13398,13417,13435,13439,13449,13453,13461],{"__ignoreMap":30},[35,13159,13160],{"class":37,"line":38},[35,13161,13162],{"class":41},"\u002F\u002F返回局部变量引用\n",[35,13164,13165,13167,13169],{"class":37,"line":45},[35,13166,12900],{"class":495},[35,13168,5922],{"class":48},[35,13170,11187],{"class":359},[35,13172,13173,13175,13177,13179,13181,13183],{"class":37,"line":55},[35,13174,2326],{"class":495},[35,13176,11203],{"class":359},[35,13178,544],{"class":495},[35,13180,2379],{"class":58},[35,13182,553],{"class":359},[35,13184,13185],{"class":41}," \u002F\u002F局部变量\n",[35,13187,13188,13190],{"class":37,"line":65},[35,13189,4424],{"class":495},[35,13191,1793],{"class":359},[35,13193,13194],{"class":37,"line":74},[35,13195,1926],{"class":359},[35,13197,13198],{"class":37,"line":83},[35,13199,141],{"emptyLinePlaceholder":140},[35,13201,13202],{"class":37,"line":92},[35,13203,13204],{"class":41},"\u002F\u002F返回静态变量引用\n",[35,13206,13207,13209,13211],{"class":37,"line":101},[35,13208,12900],{"class":495},[35,13210,5991],{"class":48},[35,13212,11187],{"class":359},[35,13214,13215,13217,13219,13221,13223,13225,13227],{"class":37,"line":110},[35,13216,11354],{"class":495},[35,13218,2723],{"class":495},[35,13220,11203],{"class":359},[35,13222,544],{"class":495},[35,13224,9284],{"class":58},[35,13226,553],{"class":359},[35,13228,13229],{"class":41},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[35,13231,13232,13234],{"class":37,"line":119},[35,13233,4424],{"class":495},[35,13235,1793],{"class":359},[35,13237,13238],{"class":37,"line":128},[35,13239,1926],{"class":359},[35,13241,13242],{"class":37,"line":137},[35,13243,141],{"emptyLinePlaceholder":140},[35,13245,13246,13248,13250],{"class":37,"line":144},[35,13247,502],{"class":495},[35,13249,2314],{"class":48},[35,13251,11187],{"class":359},[35,13253,13254],{"class":37,"line":150},[35,13255,141],{"emptyLinePlaceholder":140},[35,13257,13258],{"class":37,"line":159},[35,13259,13260],{"class":41},"    \u002F\u002F不能返回局部变量的引用\n",[35,13262,13263,13266,13269,13271,13273],{"class":37,"line":168},[35,13264,13265],{"class":495},"    int&",[35,13267,13268],{"class":359}," ref ",[35,13270,544],{"class":495},[35,13272,5922],{"class":48},[35,13274,5970],{"class":359},[35,13276,13277,13279,13281,13284,13286,13288,13290,13292],{"class":37,"line":177},[35,13278,6863],{"class":359},[35,13280,1538],{"class":495},[35,13282,13283],{"class":306}," \"ref = \"",[35,13285,1805],{"class":495},[35,13287,13268],{"class":359},[35,13289,1538],{"class":495},[35,13291,11803],{"class":359},[35,13293,13294],{"class":41},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[35,13296,13297,13299,13301,13303,13305,13307,13309,13311],{"class":37,"line":182},[35,13298,6863],{"class":359},[35,13300,1538],{"class":495},[35,13302,13283],{"class":306},[35,13304,1805],{"class":495},[35,13306,13268],{"class":359},[35,13308,1538],{"class":495},[35,13310,11803],{"class":359},[35,13312,13313],{"class":41},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[35,13315,13316],{"class":37,"line":188},[35,13317,141],{"emptyLinePlaceholder":140},[35,13319,13320],{"class":37,"line":197},[35,13321,13322],{"class":41},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[35,13324,13325,13327,13330,13332,13334],{"class":37,"line":206},[35,13326,13265],{"class":495},[35,13328,13329],{"class":359}," ref2 ",[35,13331,544],{"class":495},[35,13333,5991],{"class":48},[35,13335,5970],{"class":359},[35,13337,13338,13340,13342,13345,13347,13349,13351,13353],{"class":37,"line":215},[35,13339,6863],{"class":359},[35,13341,1538],{"class":495},[35,13343,13344],{"class":306}," \"ref2 = \"",[35,13346,1805],{"class":495},[35,13348,13329],{"class":359},[35,13350,1538],{"class":495},[35,13352,11803],{"class":359},[35,13354,13355],{"class":41}," \u002F\u002F20\n",[35,13357,13358,13360,13362,13364,13366,13368,13370,13372],{"class":37,"line":224},[35,13359,6863],{"class":359},[35,13361,1538],{"class":495},[35,13363,13344],{"class":306},[35,13365,1805],{"class":495},[35,13367,13329],{"class":359},[35,13369,1538],{"class":495},[35,13371,11803],{"class":359},[35,13373,13355],{"class":41},[35,13375,13376],{"class":37,"line":233},[35,13377,141],{"emptyLinePlaceholder":140},[35,13379,13380,13382,13385,13387,13389,13391],{"class":37,"line":238},[35,13381,6036],{"class":48},[35,13383,13384],{"class":359},"() ",[35,13386,544],{"class":495},[35,13388,3333],{"class":58},[35,13390,553],{"class":359},[35,13392,13393],{"class":41},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[35,13395,13396],{"class":37,"line":244},[35,13397,141],{"emptyLinePlaceholder":140},[35,13399,13400,13402,13404,13406,13408,13410,13412,13414],{"class":37,"line":253},[35,13401,6863],{"class":359},[35,13403,1538],{"class":495},[35,13405,13344],{"class":306},[35,13407,1805],{"class":495},[35,13409,13329],{"class":359},[35,13411,1538],{"class":495},[35,13413,11803],{"class":359},[35,13415,13416],{"class":41}," \u002F\u002F1000\n",[35,13418,13419,13421,13423,13425,13427,13429,13431,13433],{"class":37,"line":262},[35,13420,6863],{"class":359},[35,13422,1538],{"class":495},[35,13424,13344],{"class":306},[35,13426,1805],{"class":495},[35,13428,13329],{"class":359},[35,13430,1538],{"class":495},[35,13432,11803],{"class":359},[35,13434,13416],{"class":41},[35,13436,13437],{"class":37,"line":271},[35,13438,141],{"emptyLinePlaceholder":140},[35,13440,13441,13443,13445,13447],{"class":37,"line":280},[35,13442,2644],{"class":48},[35,13444,499],{"class":359},[35,13446,2649],{"class":306},[35,13448,3053],{"class":359},[35,13450,13451],{"class":37,"line":289},[35,13452,141],{"emptyLinePlaceholder":140},[35,13454,13455,13457,13459],{"class":37,"line":294},[35,13456,4424],{"class":495},[35,13458,4427],{"class":58},[35,13460,1655],{"class":359},[35,13462,13463],{"class":37,"line":300},[35,13464,1926],{"class":359},[438,13466,13468],{"id":13467},"_65引用的本质","6.5引用的本质",[21,13470,13471,13472],{},"本质：",[645,13473,13474],{},"引用的本质在c++内部实现是一个指针常量.",[25,13476,13478],{"className":486,"code":13477,"language":488,"meta":30,"style":30},"\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",[32,13479,13480,13485,13501,13515,13519,13528,13540,13545,13550,13561,13574,13578,13594,13611,13615,13623,13631],{"__ignoreMap":30},[35,13481,13482],{"class":37,"line":38},[35,13483,13484],{"class":41},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[35,13486,13487,13489,13491,13493,13495,13498],{"class":37,"line":45},[35,13488,5698],{"class":495},[35,13490,11719],{"class":48},[35,13492,499],{"class":359},[35,13494,12900],{"class":495},[35,13496,13497],{"class":5550}," ref",[35,13499,13500],{"class":359},"){\n",[35,13502,13503,13506,13508,13510,13512],{"class":37,"line":55},[35,13504,13505],{"class":359},"    ref ",[35,13507,544],{"class":495},[35,13509,6088],{"class":58},[35,13511,553],{"class":359},[35,13513,13514],{"class":41}," \u002F\u002F ref是引用，转换为*ref = 100\n",[35,13516,13517],{"class":37,"line":65},[35,13518,1926],{"class":359},[35,13520,13521,13523,13525],{"class":37,"line":74},[35,13522,502],{"class":495},[35,13524,2314],{"class":48},[35,13526,13527],{"class":359},"(){\n",[35,13529,13530,13532,13534,13536,13538],{"class":37,"line":83},[35,13531,2326],{"class":495},[35,13533,11203],{"class":359},[35,13535,544],{"class":495},[35,13537,2379],{"class":58},[35,13539,1655],{"class":359},[35,13541,13542],{"class":37,"line":92},[35,13543,13544],{"class":359},"    \n",[35,13546,13547],{"class":37,"line":101},[35,13548,13549],{"class":41},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[35,13551,13552,13554,13556,13558],{"class":37,"line":110},[35,13553,13265],{"class":495},[35,13555,13268],{"class":359},[35,13557,544],{"class":495},[35,13559,13560],{"class":359}," a; \n",[35,13562,13563,13565,13567,13569,13571],{"class":37,"line":119},[35,13564,13505],{"class":359},[35,13566,544],{"class":495},[35,13568,9284],{"class":58},[35,13570,553],{"class":359},[35,13572,13573],{"class":41}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[35,13575,13576],{"class":37,"line":128},[35,13577,13544],{"class":359},[35,13579,13580,13582,13584,13586,13588,13590,13592],{"class":37,"line":137},[35,13581,6863],{"class":359},[35,13583,1538],{"class":495},[35,13585,13004],{"class":306},[35,13587,1805],{"class":495},[35,13589,11203],{"class":359},[35,13591,1538],{"class":495},[35,13593,9174],{"class":359},[35,13595,13596,13598,13600,13603,13605,13607,13609],{"class":37,"line":144},[35,13597,6863],{"class":359},[35,13599,1538],{"class":495},[35,13601,13602],{"class":306}," \"ref:\"",[35,13604,1805],{"class":495},[35,13606,13268],{"class":359},[35,13608,1538],{"class":495},[35,13610,9174],{"class":359},[35,13612,13613],{"class":37,"line":150},[35,13614,13544],{"class":359},[35,13616,13617,13620],{"class":37,"line":159},[35,13618,13619],{"class":48},"    func",[35,13621,13622],{"class":359},"(a);\n",[35,13624,13625,13627,13629],{"class":37,"line":168},[35,13626,4424],{"class":495},[35,13628,4427],{"class":58},[35,13630,1655],{"class":359},[35,13632,13633],{"class":37,"line":177},[35,13634,1926],{"class":359},[21,13636,11666],{},[14,13638,13639,13642],{},[17,13640,13641],{},"引用的本质，就是一个指针常量",[17,13643,13644],{},"引用一旦初始化，就不可以发生改变",[438,13646,13648],{"id":13647},"_66常量引用","6.6常量引用",[21,13650,13651],{},"作用：常量引用主要用来修饰形参",[21,13653,13654,13655,13658],{},"在函数形参列表中，可以加",[645,13656,13657],{},"const修饰形参","，防止形参改变实参",[25,13660,13662],{"className":486,"code":13661,"language":488,"meta":30,"style":30},"\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",[32,13663,13664,13669,13674,13693,13698,13711,13715,13719,13727,13731,13736,13741,13755,13759,13767,13779,13783,13788,13800,13807,13811,13821,13825,13833],{"__ignoreMap":30},[35,13665,13666],{"class":37,"line":38},[35,13667,13668],{"class":41},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[35,13670,13671],{"class":37,"line":45},[35,13672,13673],{"class":41},"\u002F\u002F加上const就不能修改实参的\n",[35,13675,13676,13678,13681,13683,13685,13688,13691],{"class":37,"line":55},[35,13677,5698],{"class":495},[35,13679,13680],{"class":48}," showValue",[35,13682,499],{"class":359},[35,13684,7126],{"class":495},[35,13686,13687],{"class":495}," int&",[35,13689,13690],{"class":5550}," v",[35,13692,12776],{"class":359},[35,13694,13695],{"class":37,"line":65},[35,13696,13697],{"class":41},"    \u002F\u002Fv += 100;\n",[35,13699,13700,13702,13704,13707,13709],{"class":37,"line":74},[35,13701,6863],{"class":359},[35,13703,1538],{"class":495},[35,13705,13706],{"class":359}," v ",[35,13708,1538],{"class":495},[35,13710,9174],{"class":359},[35,13712,13713],{"class":37,"line":83},[35,13714,1926],{"class":359},[35,13716,13717],{"class":37,"line":92},[35,13718,141],{"emptyLinePlaceholder":140},[35,13720,13721,13723,13725],{"class":37,"line":101},[35,13722,502],{"class":495},[35,13724,2314],{"class":48},[35,13726,11187],{"class":359},[35,13728,13729],{"class":37,"line":110},[35,13730,141],{"emptyLinePlaceholder":140},[35,13732,13733],{"class":37,"line":119},[35,13734,13735],{"class":41},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[35,13737,13738],{"class":37,"line":128},[35,13739,13740],{"class":41},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[35,13742,13743,13745,13747,13749,13751,13753],{"class":37,"line":137},[35,13744,11555],{"class":495},[35,13746,13687],{"class":495},[35,13748,13268],{"class":359},[35,13750,544],{"class":495},[35,13752,2379],{"class":58},[35,13754,1655],{"class":359},[35,13756,13757],{"class":37,"line":144},[35,13758,141],{"emptyLinePlaceholder":140},[35,13760,13761,13764],{"class":37,"line":150},[35,13762,13763],{"class":41},"    \u002F\u002Fref = 100;",[35,13765,13766],{"class":41},"  \u002F\u002F加入const后不可以修改变量\n",[35,13768,13769,13771,13773,13775,13777],{"class":37,"line":159},[35,13770,6863],{"class":359},[35,13772,1538],{"class":495},[35,13774,13268],{"class":359},[35,13776,1538],{"class":495},[35,13778,9174],{"class":359},[35,13780,13781],{"class":37,"line":168},[35,13782,141],{"emptyLinePlaceholder":140},[35,13784,13785],{"class":37,"line":177},[35,13786,13787],{"class":41},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[35,13789,13790,13792,13794,13796,13798],{"class":37,"line":182},[35,13791,2326],{"class":495},[35,13793,11203],{"class":359},[35,13795,544],{"class":495},[35,13797,2379],{"class":58},[35,13799,1655],{"class":359},[35,13801,13802,13805],{"class":37,"line":188},[35,13803,13804],{"class":48},"    showValue",[35,13806,13622],{"class":359},[35,13808,13809],{"class":37,"line":197},[35,13810,141],{"emptyLinePlaceholder":140},[35,13812,13813,13815,13817,13819],{"class":37,"line":206},[35,13814,2644],{"class":48},[35,13816,499],{"class":359},[35,13818,2649],{"class":306},[35,13820,3053],{"class":359},[35,13822,13823],{"class":37,"line":215},[35,13824,141],{"emptyLinePlaceholder":140},[35,13826,13827,13829,13831],{"class":37,"line":224},[35,13828,4424],{"class":495},[35,13830,4427],{"class":58},[35,13832,1655],{"class":359},[35,13834,13835],{"class":37,"line":233},[35,13836,1926],{"class":359},[416,13838,13839],{},"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":30,"searchDepth":45,"depth":45,"links":13841},[13842,13843,13844,13845,13846,13847],{"id":12374,"depth":45,"text":12375},{"id":12553,"depth":45,"text":12554},{"id":12736,"depth":45,"text":12737},{"id":13140,"depth":45,"text":13141},{"id":13467,"depth":45,"text":13468},{"id":13647,"depth":45,"text":13648},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12366,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13854,"title":13855,"body":13856,"description":30,"extension":422,"meta":14937,"navigation":140,"path":14938,"seo":14939,"stem":14940,"__hash__":14941},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13857,"toc":14929},[13858,13861,13865,13868,13873,14105,14107,14118,14122,14125,14133,14237,14240,14244,14247,14251,14254,14259,14281,14287,14614,14617,14621,14629,14926],[10,13859,13855],{"id":13860},"_7函数高级部分",[438,13862,13864],{"id":13863},"_71函数默认参数","7.1函数默认参数",[21,13866,13867],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[21,13869,5515,13870],{},[32,13871,13872],{}," 返回值类型  函数名 （参数= 默认值）{}",[25,13874,13876],{"className":486,"code":13875,"language":488,"meta":30,"style":30},"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",[32,13877,13878,13913,13928,13932,13936,13941,13946,13975,13995,14005,14009,14013,14021,14025,14053,14075,14079,14089,14093,14101],{"__ignoreMap":30},[35,13879,13880,13882,13884,13886,13888,13890,13892,13894,13896,13899,13901,13903,13905,13907,13909,13911],{"class":37,"line":38},[35,13881,502],{"class":495},[35,13883,11719],{"class":48},[35,13885,499],{"class":359},[35,13887,502],{"class":495},[35,13889,1759],{"class":5550},[35,13891,12769],{"class":359},[35,13893,502],{"class":495},[35,13895,3167],{"class":5550},[35,13897,13898],{"class":495}," =",[35,13900,2379],{"class":58},[35,13902,12769],{"class":359},[35,13904,502],{"class":495},[35,13906,3183],{"class":5550},[35,13908,13898],{"class":495},[35,13910,2379],{"class":58},[35,13912,12776],{"class":359},[35,13914,13915,13917,13919,13921,13923,13925],{"class":37,"line":45},[35,13916,4424],{"class":495},[35,13918,11203],{"class":359},[35,13920,975],{"class":495},[35,13922,11216],{"class":359},[35,13924,975],{"class":495},[35,13926,13927],{"class":359}," c;\n",[35,13929,13930],{"class":37,"line":55},[35,13931,1926],{"class":359},[35,13933,13934],{"class":37,"line":65},[35,13935,141],{"emptyLinePlaceholder":140},[35,13937,13938],{"class":37,"line":74},[35,13939,13940],{"class":41},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[35,13942,13943],{"class":37,"line":83},[35,13944,13945],{"class":41},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[35,13947,13948,13950,13953,13955,13957,13959,13961,13963,13965,13967,13969,13971,13973],{"class":37,"line":92},[35,13949,502],{"class":495},[35,13951,13952],{"class":48}," func2",[35,13954,499],{"class":359},[35,13956,502],{"class":495},[35,13958,1759],{"class":5550},[35,13960,13898],{"class":495},[35,13962,2379],{"class":58},[35,13964,12769],{"class":359},[35,13966,502],{"class":495},[35,13968,3167],{"class":5550},[35,13970,13898],{"class":495},[35,13972,2379],{"class":58},[35,13974,3053],{"class":359},[35,13976,13977,13979,13981,13983,13985,13987,13989,13991,13993],{"class":37,"line":101},[35,13978,502],{"class":495},[35,13980,13952],{"class":48},[35,13982,499],{"class":359},[35,13984,502],{"class":495},[35,13986,1759],{"class":5550},[35,13988,12769],{"class":359},[35,13990,502],{"class":495},[35,13992,3167],{"class":5550},[35,13994,12776],{"class":359},[35,13996,13997,13999,14001,14003],{"class":37,"line":110},[35,13998,4424],{"class":495},[35,14000,11203],{"class":359},[35,14002,975],{"class":495},[35,14004,12797],{"class":359},[35,14006,14007],{"class":37,"line":119},[35,14008,1926],{"class":359},[35,14010,14011],{"class":37,"line":128},[35,14012,141],{"emptyLinePlaceholder":140},[35,14014,14015,14017,14019],{"class":37,"line":137},[35,14016,502],{"class":495},[35,14018,2314],{"class":48},[35,14020,11187],{"class":359},[35,14022,14023],{"class":37,"line":144},[35,14024,141],{"emptyLinePlaceholder":140},[35,14026,14027,14029,14031,14034,14036,14038,14040,14042,14044,14046,14049,14051],{"class":37,"line":150},[35,14028,6863],{"class":359},[35,14030,1538],{"class":495},[35,14032,14033],{"class":306}," \"ret = \"",[35,14035,1805],{"class":495},[35,14037,11719],{"class":48},[35,14039,499],{"class":359},[35,14041,1194],{"class":58},[35,14043,12769],{"class":359},[35,14045,1194],{"class":58},[35,14047,14048],{"class":359},") ",[35,14050,1538],{"class":495},[35,14052,9174],{"class":359},[35,14054,14055,14057,14059,14061,14063,14065,14067,14069,14071,14073],{"class":37,"line":159},[35,14056,6863],{"class":359},[35,14058,1538],{"class":495},[35,14060,14033],{"class":306},[35,14062,1805],{"class":495},[35,14064,11719],{"class":48},[35,14066,499],{"class":359},[35,14068,807],{"class":58},[35,14070,14048],{"class":359},[35,14072,1538],{"class":495},[35,14074,9174],{"class":359},[35,14076,14077],{"class":37,"line":168},[35,14078,141],{"emptyLinePlaceholder":140},[35,14080,14081,14083,14085,14087],{"class":37,"line":177},[35,14082,2644],{"class":48},[35,14084,499],{"class":359},[35,14086,2649],{"class":306},[35,14088,3053],{"class":359},[35,14090,14091],{"class":37,"line":182},[35,14092,141],{"emptyLinePlaceholder":140},[35,14094,14095,14097,14099],{"class":37,"line":188},[35,14096,4424],{"class":495},[35,14098,4427],{"class":58},[35,14100,1655],{"class":359},[35,14102,14103],{"class":37,"line":197},[35,14104,1926],{"class":359},[21,14106,11666],{},[14,14108,14109,14112,14115],{},[17,14110,14111],{},"我传就用我；没传就用你",[17,14113,14114],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[17,14116,14117],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[438,14119,14121],{"id":14120},"_72函数的占位参数","7.2函数的占位参数",[21,14123,14124],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[21,14126,14127,14129,14130],{},[645,14128,5515],{}," ",[32,14131,14132],{},"返回值类型 函数名 (数据类型){}",[25,14134,14136],{"className":486,"code":14135,"language":488,"meta":30,"style":30},"\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",[32,14137,14138,14143,14161,14174,14178,14186,14190,14207,14211,14221,14225,14233],{"__ignoreMap":30},[35,14139,14140],{"class":37,"line":38},[35,14141,14142],{"class":41},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[35,14144,14145,14147,14149,14151,14153,14155,14157,14159],{"class":37,"line":45},[35,14146,5698],{"class":495},[35,14148,11719],{"class":48},[35,14150,499],{"class":359},[35,14152,502],{"class":495},[35,14154,1759],{"class":5550},[35,14156,12769],{"class":359},[35,14158,502],{"class":495},[35,14160,12776],{"class":359},[35,14162,14163,14165,14167,14170,14172],{"class":37,"line":55},[35,14164,6863],{"class":359},[35,14166,1538],{"class":495},[35,14168,14169],{"class":306}," \"this is func\"",[35,14171,1805],{"class":495},[35,14173,9174],{"class":359},[35,14175,14176],{"class":37,"line":65},[35,14177,1926],{"class":359},[35,14179,14180,14182,14184],{"class":37,"line":74},[35,14181,502],{"class":495},[35,14183,2314],{"class":48},[35,14185,11187],{"class":359},[35,14187,14188],{"class":37,"line":83},[35,14189,141],{"emptyLinePlaceholder":140},[35,14191,14192,14194,14196,14198,14200,14202,14204],{"class":37,"line":92},[35,14193,13619],{"class":48},[35,14195,499],{"class":359},[35,14197,940],{"class":58},[35,14199,872],{"class":359},[35,14201,940],{"class":58},[35,14203,6300],{"class":359},[35,14205,14206],{"class":41}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[35,14208,14209],{"class":37,"line":101},[35,14210,141],{"emptyLinePlaceholder":140},[35,14212,14213,14215,14217,14219],{"class":37,"line":110},[35,14214,2644],{"class":48},[35,14216,499],{"class":359},[35,14218,2649],{"class":306},[35,14220,3053],{"class":359},[35,14222,14223],{"class":37,"line":119},[35,14224,141],{"emptyLinePlaceholder":140},[35,14226,14227,14229,14231],{"class":37,"line":128},[35,14228,4424],{"class":495},[35,14230,4427],{"class":58},[35,14232,1655],{"class":359},[35,14234,14235],{"class":37,"line":137},[35,14236,1926],{"class":359},[21,14238,14239],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[438,14241,14243],{"id":14242},"_73函数重载","7.3函数重载",[21,14245,14246],{},"意思是函数名是可以相同的",[465,14248,14250],{"id":14249},"_731基本语法","7.3.1基本语法",[21,14252,14253],{},"作用：函数名可以相同，提高复用性",[21,14255,14256],{},[645,14257,14258],{},"函数重载满足条件：",[1501,14260,14261,14264,14267],{},[17,14262,14263],{},"同一个作用域下",[17,14265,14266],{},"函数名称相同",[17,14268,14269,14270,14273,14274,14277,14278],{},"函数参数",[645,14271,14272],{},"类型不同","  或者 ",[645,14275,14276],{},"个数不同"," 或者 ",[645,14279,14280],{},"顺序不同",[21,14282,14283,14286],{},[645,14284,14285],{},"注意:","  函数的返回值不可以作为函数重载的条件",[25,14288,14290],{"className":10275,"code":14289,"language":10277,"meta":30,"style":30},"\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",[32,14291,14292,14297,14305,14309,14322,14326,14340,14344,14357,14361,14376,14380,14393,14397,14418,14422,14435,14439,14459,14463,14476,14480,14484,14489,14494,14499,14504,14509,14513,14517,14525,14529,14535,14545,14555,14569,14584,14588,14598,14602,14610],{"__ignoreMap":30},[35,14293,14294],{"class":37,"line":38},[35,14295,14296],{"class":41},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[35,14298,14299,14301,14303],{"class":37,"line":45},[35,14300,5698],{"class":495},[35,14302,11719],{"class":48},[35,14304,2317],{"class":359},[35,14306,14307],{"class":37,"line":55},[35,14308,1907],{"class":359},[35,14310,14311,14313,14315,14318,14320],{"class":37,"line":65},[35,14312,6863],{"class":359},[35,14314,1538],{"class":495},[35,14316,14317],{"class":306}," \"func 的调用！\"",[35,14319,1805],{"class":495},[35,14321,9174],{"class":359},[35,14323,14324],{"class":37,"line":74},[35,14325,1926],{"class":359},[35,14327,14328,14330,14332,14334,14336,14338],{"class":37,"line":83},[35,14329,5698],{"class":495},[35,14331,11719],{"class":48},[35,14333,499],{"class":359},[35,14335,502],{"class":495},[35,14337,1759],{"class":5550},[35,14339,505],{"class":359},[35,14341,14342],{"class":37,"line":92},[35,14343,1907],{"class":359},[35,14345,14346,14348,14350,14353,14355],{"class":37,"line":101},[35,14347,6863],{"class":359},[35,14349,1538],{"class":495},[35,14351,14352],{"class":306}," \"func (int a) 的调用！\"",[35,14354,1805],{"class":495},[35,14356,9174],{"class":359},[35,14358,14359],{"class":37,"line":110},[35,14360,1926],{"class":359},[35,14362,14363,14365,14367,14369,14372,14374],{"class":37,"line":119},[35,14364,5698],{"class":495},[35,14366,11719],{"class":48},[35,14368,499],{"class":359},[35,14370,14371],{"class":495},"double",[35,14373,1759],{"class":5550},[35,14375,505],{"class":359},[35,14377,14378],{"class":37,"line":128},[35,14379,1907],{"class":359},[35,14381,14382,14384,14386,14389,14391],{"class":37,"line":137},[35,14383,6863],{"class":359},[35,14385,1538],{"class":495},[35,14387,14388],{"class":306}," \"func (double a)的调用！\"",[35,14390,1805],{"class":495},[35,14392,9174],{"class":359},[35,14394,14395],{"class":37,"line":144},[35,14396,1926],{"class":359},[35,14398,14399,14401,14403,14405,14407,14409,14412,14414,14416],{"class":37,"line":150},[35,14400,5698],{"class":495},[35,14402,11719],{"class":48},[35,14404,499],{"class":359},[35,14406,502],{"class":495},[35,14408,1759],{"class":5550},[35,14410,14411],{"class":359}," ,",[35,14413,14371],{"class":495},[35,14415,3167],{"class":5550},[35,14417,505],{"class":359},[35,14419,14420],{"class":37,"line":159},[35,14421,1907],{"class":359},[35,14423,14424,14426,14428,14431,14433],{"class":37,"line":168},[35,14425,6863],{"class":359},[35,14427,1538],{"class":495},[35,14429,14430],{"class":306}," \"func (int a ,double b) 的调用！\"",[35,14432,1805],{"class":495},[35,14434,9174],{"class":359},[35,14436,14437],{"class":37,"line":177},[35,14438,1926],{"class":359},[35,14440,14441,14443,14445,14447,14449,14451,14453,14455,14457],{"class":37,"line":182},[35,14442,5698],{"class":495},[35,14444,11719],{"class":48},[35,14446,499],{"class":359},[35,14448,14371],{"class":495},[35,14450,1759],{"class":5550},[35,14452,14411],{"class":359},[35,14454,502],{"class":495},[35,14456,3167],{"class":5550},[35,14458,505],{"class":359},[35,14460,14461],{"class":37,"line":188},[35,14462,1907],{"class":359},[35,14464,14465,14467,14469,14472,14474],{"class":37,"line":197},[35,14466,6863],{"class":359},[35,14468,1538],{"class":495},[35,14470,14471],{"class":306}," \"func (double a ,int b)的调用！\"",[35,14473,1805],{"class":495},[35,14475,9174],{"class":359},[35,14477,14478],{"class":37,"line":206},[35,14479,1926],{"class":359},[35,14481,14482],{"class":37,"line":215},[35,14483,141],{"emptyLinePlaceholder":140},[35,14485,14486],{"class":37,"line":224},[35,14487,14488],{"class":41},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[35,14490,14491],{"class":37,"line":233},[35,14492,14493],{"class":41},"\u002F\u002Fint func(double a, int b)\n",[35,14495,14496],{"class":37,"line":238},[35,14497,14498],{"class":41},"\u002F\u002F{\n",[35,14500,14501],{"class":37,"line":244},[35,14502,14503],{"class":41},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[35,14505,14506],{"class":37,"line":253},[35,14507,14508],{"class":41},"\u002F\u002F}\n",[35,14510,14511],{"class":37,"line":262},[35,14512,141],{"emptyLinePlaceholder":140},[35,14514,14515],{"class":37,"line":271},[35,14516,141],{"emptyLinePlaceholder":140},[35,14518,14519,14521,14523],{"class":37,"line":280},[35,14520,502],{"class":495},[35,14522,2314],{"class":48},[35,14524,11187],{"class":359},[35,14526,14527],{"class":37,"line":289},[35,14528,141],{"emptyLinePlaceholder":140},[35,14530,14531,14533],{"class":37,"line":294},[35,14532,13619],{"class":48},[35,14534,5970],{"class":359},[35,14536,14537,14539,14541,14543],{"class":37,"line":300},[35,14538,13619],{"class":48},[35,14540,499],{"class":359},[35,14542,940],{"class":58},[35,14544,3053],{"class":359},[35,14546,14547,14549,14551,14553],{"class":37,"line":313},[35,14548,13619],{"class":48},[35,14550,499],{"class":359},[35,14552,547],{"class":58},[35,14554,3053],{"class":359},[35,14556,14557,14559,14561,14563,14565,14567],{"class":37,"line":324},[35,14558,13619],{"class":48},[35,14560,499],{"class":359},[35,14562,940],{"class":58},[35,14564,872],{"class":359},[35,14566,547],{"class":58},[35,14568,3053],{"class":359},[35,14570,14571,14573,14575,14577,14580,14582],{"class":37,"line":2955},[35,14572,13619],{"class":48},[35,14574,499],{"class":359},[35,14576,547],{"class":58},[35,14578,14579],{"class":359}," , ",[35,14581,940],{"class":58},[35,14583,3053],{"class":359},[35,14585,14586],{"class":37,"line":8282},[35,14587,13544],{"class":359},[35,14589,14590,14592,14594,14596],{"class":37,"line":8306},[35,14591,2644],{"class":48},[35,14593,499],{"class":359},[35,14595,2649],{"class":306},[35,14597,3053],{"class":359},[35,14599,14600],{"class":37,"line":8311},[35,14601,141],{"emptyLinePlaceholder":140},[35,14603,14604,14606,14608],{"class":37,"line":8317},[35,14605,4424],{"class":495},[35,14607,4427],{"class":58},[35,14609,1655],{"class":359},[35,14611,14612],{"class":37,"line":8344},[35,14613,1926],{"class":359},[21,14615,14616],{},"重点：函数返回值不可以作为函数重载条件！",[465,14618,14620],{"id":14619},"_732注意事项","7.3.2注意事项",[1501,14622,14623,14626],{},[17,14624,14625],{},"引用作为重载条件!!!",[17,14627,14628],{},"函数重载碰到函数默认参数",[25,14630,14632],{"className":486,"code":14631,"language":488,"meta":30,"style":30},"\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",[32,14633,14634,14639,14644,14648,14664,14668,14681,14685,14689,14707,14711,14724,14728,14732,14736,14741,14745,14769,14773,14786,14790,14794,14808,14812,14825,14829,14833,14841,14845,14857,14867,14880,14884,14888,14896,14900,14910,14914,14922],{"__ignoreMap":30},[35,14635,14636],{"class":37,"line":38},[35,14637,14638],{"class":41},"\u002F\u002F函数重载注意事项\n",[35,14640,14641],{"class":37,"line":45},[35,14642,14643],{"class":41},"\u002F\u002F1、引用作为重载条件\n",[35,14645,14646],{"class":37,"line":55},[35,14647,141],{"emptyLinePlaceholder":140},[35,14649,14650,14652,14654,14656,14658,14660,14662],{"class":37,"line":65},[35,14651,5698],{"class":495},[35,14653,11719],{"class":48},[35,14655,499],{"class":359},[35,14657,502],{"class":495},[35,14659,10918],{"class":495},[35,14661,734],{"class":5550},[35,14663,505],{"class":359},[35,14665,14666],{"class":37,"line":74},[35,14667,1907],{"class":359},[35,14669,14670,14672,14674,14677,14679],{"class":37,"line":83},[35,14671,6863],{"class":359},[35,14673,1538],{"class":495},[35,14675,14676],{"class":306}," \"func (int &a) 调用 \"",[35,14678,1805],{"class":495},[35,14680,9174],{"class":359},[35,14682,14683],{"class":37,"line":92},[35,14684,1926],{"class":359},[35,14686,14687],{"class":37,"line":101},[35,14688,141],{"emptyLinePlaceholder":140},[35,14690,14691,14693,14695,14697,14699,14701,14703,14705],{"class":37,"line":110},[35,14692,5698],{"class":495},[35,14694,11719],{"class":48},[35,14696,499],{"class":359},[35,14698,7126],{"class":495},[35,14700,2723],{"class":495},[35,14702,10918],{"class":495},[35,14704,734],{"class":5550},[35,14706,505],{"class":359},[35,14708,14709],{"class":37,"line":119},[35,14710,1907],{"class":359},[35,14712,14713,14715,14717,14720,14722],{"class":37,"line":128},[35,14714,6863],{"class":359},[35,14716,1538],{"class":495},[35,14718,14719],{"class":306}," \"func (const int &a) 调用 \"",[35,14721,1805],{"class":495},[35,14723,9174],{"class":359},[35,14725,14726],{"class":37,"line":137},[35,14727,1926],{"class":359},[35,14729,14730],{"class":37,"line":144},[35,14731,141],{"emptyLinePlaceholder":140},[35,14733,14734],{"class":37,"line":150},[35,14735,141],{"emptyLinePlaceholder":140},[35,14737,14738],{"class":37,"line":159},[35,14739,14740],{"class":41},"\u002F\u002F2、函数重载碰到函数默认参数\n",[35,14742,14743],{"class":37,"line":168},[35,14744,141],{"emptyLinePlaceholder":140},[35,14746,14747,14749,14751,14753,14755,14757,14759,14761,14763,14765,14767],{"class":37,"line":177},[35,14748,5698],{"class":495},[35,14750,13952],{"class":48},[35,14752,499],{"class":359},[35,14754,502],{"class":495},[35,14756,1759],{"class":5550},[35,14758,12769],{"class":359},[35,14760,502],{"class":495},[35,14762,3167],{"class":5550},[35,14764,13898],{"class":495},[35,14766,2379],{"class":58},[35,14768,505],{"class":359},[35,14770,14771],{"class":37,"line":182},[35,14772,1907],{"class":359},[35,14774,14775,14777,14779,14782,14784],{"class":37,"line":188},[35,14776,6863],{"class":359},[35,14778,1538],{"class":495},[35,14780,14781],{"class":306}," \"func2(int a, int b = 10) 调用\"",[35,14783,1805],{"class":495},[35,14785,9174],{"class":359},[35,14787,14788],{"class":37,"line":197},[35,14789,1926],{"class":359},[35,14791,14792],{"class":37,"line":206},[35,14793,141],{"emptyLinePlaceholder":140},[35,14795,14796,14798,14800,14802,14804,14806],{"class":37,"line":215},[35,14797,5698],{"class":495},[35,14799,13952],{"class":48},[35,14801,499],{"class":359},[35,14803,502],{"class":495},[35,14805,1759],{"class":5550},[35,14807,505],{"class":359},[35,14809,14810],{"class":37,"line":224},[35,14811,1907],{"class":359},[35,14813,14814,14816,14818,14821,14823],{"class":37,"line":233},[35,14815,6863],{"class":359},[35,14817,1538],{"class":495},[35,14819,14820],{"class":306}," \"func2(int a) 调用\"",[35,14822,1805],{"class":495},[35,14824,9174],{"class":359},[35,14826,14827],{"class":37,"line":238},[35,14828,1926],{"class":359},[35,14830,14831],{"class":37,"line":244},[35,14832,141],{"emptyLinePlaceholder":140},[35,14834,14835,14837,14839],{"class":37,"line":253},[35,14836,502],{"class":495},[35,14838,2314],{"class":48},[35,14840,11187],{"class":359},[35,14842,14843],{"class":37,"line":262},[35,14844,13544],{"class":359},[35,14846,14847,14849,14851,14853,14855],{"class":37,"line":271},[35,14848,2326],{"class":495},[35,14850,11203],{"class":359},[35,14852,544],{"class":495},[35,14854,2379],{"class":58},[35,14856,1655],{"class":359},[35,14858,14859,14861,14864],{"class":37,"line":280},[35,14860,13619],{"class":48},[35,14862,14863],{"class":359},"(a);",[35,14865,14866],{"class":41}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[35,14868,14869,14871,14873,14875,14877],{"class":37,"line":289},[35,14870,13619],{"class":48},[35,14872,499],{"class":359},[35,14874,940],{"class":58},[35,14876,6300],{"class":359},[35,14878,14879],{"class":41},"\u002F\u002F调用有const   10是个常量\n",[35,14881,14882],{"class":37,"line":294},[35,14883,141],{"emptyLinePlaceholder":140},[35,14885,14886],{"class":37,"line":300},[35,14887,141],{"emptyLinePlaceholder":140},[35,14889,14890,14893],{"class":37,"line":313},[35,14891,14892],{"class":41},"    \u002F\u002Ffunc2(10);",[35,14894,14895],{"class":41}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[35,14897,14898],{"class":37,"line":324},[35,14899,141],{"emptyLinePlaceholder":140},[35,14901,14902,14904,14906,14908],{"class":37,"line":2955},[35,14903,2644],{"class":48},[35,14905,499],{"class":359},[35,14907,2649],{"class":306},[35,14909,3053],{"class":359},[35,14911,14912],{"class":37,"line":8282},[35,14913,141],{"emptyLinePlaceholder":140},[35,14915,14916,14918,14920],{"class":37,"line":8306},[35,14917,4424],{"class":495},[35,14919,4427],{"class":58},[35,14921,1655],{"class":359},[35,14923,14924],{"class":37,"line":8311},[35,14925,1926],{"class":359},[416,14927,14928],{},"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":30,"searchDepth":45,"depth":45,"links":14930},[14931,14932,14933],{"id":13863,"depth":45,"text":13864},{"id":14120,"depth":45,"text":14121},{"id":14242,"depth":45,"text":14243,"children":14934},[14935,14936],{"id":14249,"depth":55,"text":14250},{"id":14619,"depth":55,"text":14620},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13855,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14943,"title":14944,"body":14945,"description":23699,"extension":422,"meta":23700,"navigation":140,"path":23701,"seo":23702,"stem":23703,"__hash__":23704},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14946,"toc":23680},[14947,14950,14956,14963,14968,14971,14974,14977,14981,14985,14988,14991,14999,15004,15007,15014,15019,15178,15181,15434,15437,15440,15443,15448,15451,15454,15465,15470,15706,15710,15720,15723,15731,15878,15882,15885,15888,15892,16337,16341,16349,16357,17269,17276,17281,17909,17912,17915,17918,18037,18040,18127,18130,18256,18259,18353,18356,18709,18713,18721,18725,18732,18735,18738,18749,18755,18760,18772,18780,18800,18808,18825,19011,19014,19018,19021,19024,19027,19030,19033,19036,19039,19499,19505,19509,19512,19523,20110,20113,20602,20606,20609,20612,20615,20618,20621,20629,21025,21029,21032,21035,21482,21485,21488,21493,21496,21501,21504,21508,21511,21513,21519,21522,21828,21838,21879,21883,21886,21888,21921,21924,22231,22233,22248,22251,22274,22283,22289,22292,22296,22299,22302,22307,22318,22323,22331,22336,22466,22469,22472,22647,22652,22864,22868,22871,22985,22990,23229,23233,23237,23240,23243,23248,23353,23356,23359,23362,23366,23477,23480,23483,23488,23540,23543,23546,23551,23597,23600,23605,23673,23675,23678],[10,14948,14944],{"id":14949},"_8类和对象",[21,14951,14952,14953],{},"C++面向对象的三大特性为",[645,14954,14955],{},"封装、继承、多态",[21,14957,14958,14959,14962],{},"C++认为",[645,14960,14961],{},"万事万物都皆为对象","，对象上有其属性和行为",[21,14964,14965],{},[645,14966,14967],{},"例如：",[21,14969,14970],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[21,14972,14973],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[21,14975,14976],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[438,14978,14980],{"id":14979},"_81封装","8.1封装",[465,14982,14984],{"id":14983},"_811封装的意义","8.1.1封装的意义",[21,14986,14987],{},"封装是C++面向对象三大特性之一",[21,14989,14990],{},"封装的意义：",[1501,14992,14993,14996],{},[17,14994,14995],{},"将属性和行为作为一个整体，表现生活中的事物",[17,14997,14998],{},"将属性和行为加以权限控制",[21,15000,15001],{},[645,15002,15003],{},"封装意义一：",[21,15005,15006],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[21,15008,15009,14129,15011],{},[645,15010,5515],{},[32,15012,15013],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[14,15015,15016],{},[17,15017,15018],{},"**示例1：**设计一个圆类，求圆的周长",[25,15020,15022],{"className":486,"code":15021,"language":488,"meta":30,"style":30},"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",[32,15023,15024,15032,15036,15041,15046,15051,15056,15063,15068,15078,15082,15100,15104,15108,15116,15120,15125,15130,15135,15140,15151,15174],{"__ignoreMap":30},[35,15025,15026,15029],{"class":37,"line":38},[35,15027,15028],{"class":495},"class",[35,15030,15031],{"class":48}," Circle\n",[35,15033,15034],{"class":37,"line":45},[35,15035,1907],{"class":359},[35,15037,15038],{"class":37,"line":55},[35,15039,15040],{"class":41},"    \u002F\u002F访问权限\n",[35,15042,15043],{"class":37,"line":65},[35,15044,15045],{"class":41},"    \u002F\u002F公共权限\n",[35,15047,15048],{"class":37,"line":74},[35,15049,15050],{"class":495},"public:\n",[35,15052,15053],{"class":37,"line":83},[35,15054,15055],{"class":41},"    \u002F\u002F属性\n",[35,15057,15058,15060],{"class":37,"line":92},[35,15059,2326],{"class":495},[35,15061,15062],{"class":359}," m_r;\n",[35,15064,15065],{"class":37,"line":101},[35,15066,15067],{"class":41},"    \u002F\u002F行为\n",[35,15069,15070,15073,15076],{"class":37,"line":110},[35,15071,15072],{"class":495},"    double",[35,15074,15075],{"class":48}," calculateZC",[35,15077,2317],{"class":359},[35,15079,15080],{"class":37,"line":119},[35,15081,2371],{"class":359},[35,15083,15084,15087,15090,15092,15095,15097],{"class":37,"line":128},[35,15085,15086],{"class":495},"        return",[35,15088,15089],{"class":58}," 2",[35,15091,949],{"class":495},[35,15093,15094],{"class":359},"PI",[35,15096,949],{"class":495},[35,15098,15099],{"class":359},"m_r;\n",[35,15101,15102],{"class":37,"line":137},[35,15103,2528],{"class":359},[35,15105,15106],{"class":37,"line":144},[35,15107,4329],{"class":359},[35,15109,15110,15112,15114],{"class":37,"line":150},[35,15111,502],{"class":495},[35,15113,2314],{"class":48},[35,15115,2317],{"class":359},[35,15117,15118],{"class":37,"line":159},[35,15119,1907],{"class":359},[35,15121,15122],{"class":37,"line":168},[35,15123,15124],{"class":41},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[35,15126,15127],{"class":37,"line":177},[35,15128,15129],{"class":41},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[35,15131,15132],{"class":37,"line":182},[35,15133,15134],{"class":359},"    Circle c1;\n",[35,15136,15137],{"class":37,"line":188},[35,15138,15139],{"class":41},"    \u002F\u002F给圆对象 的属性进行赋值\n",[35,15141,15142,15145,15147,15149],{"class":37,"line":197},[35,15143,15144],{"class":359},"    c1.m_r",[35,15146,544],{"class":495},[35,15148,940],{"class":58},[35,15150,1655],{"class":359},[35,15152,15153,15155,15157,15160,15162,15165,15168,15170,15172],{"class":37,"line":206},[35,15154,1912],{"class":359},[35,15156,1538],{"class":495},[35,15158,15159],{"class":306},"\"圆的周长\"",[35,15161,1538],{"class":495},[35,15163,15164],{"class":359},"c1.",[35,15166,15167],{"class":48},"calculateZC",[35,15169,2767],{"class":359},[35,15171,1538],{"class":495},[35,15173,1560],{"class":359},[35,15175,15176],{"class":37,"line":215},[35,15177,1926],{"class":359},[21,15179,15180],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[25,15182,15184],{"className":486,"code":15183,"language":488,"meta":30,"style":30},"#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",[32,15185,15186,15192,15202,15208,15214,15218,15222,15227,15234,15239,15257,15261,15271,15275,15280,15296,15300,15310,15314,15319,15327,15331,15363,15367,15371,15379,15383,15388,15393,15407,15421,15430],{"__ignoreMap":30},[35,15187,15188,15190],{"class":37,"line":38},[35,15189,2291],{"class":495},[35,15191,2294],{"class":306},[35,15193,15194,15196,15198,15200],{"class":37,"line":45},[35,15195,2299],{"class":495},[35,15197,2302],{"class":495},[35,15199,2305],{"class":48},[35,15201,1655],{"class":359},[35,15203,15204,15206],{"class":37,"line":55},[35,15205,2291],{"class":495},[35,15207,8083],{"class":306},[35,15209,15210,15212],{"class":37,"line":65},[35,15211,15028],{"class":495},[35,15213,8096],{"class":48},[35,15215,15216],{"class":37,"line":74},[35,15217,1907],{"class":359},[35,15219,15220],{"class":37,"line":83},[35,15221,15050],{"class":495},[35,15223,15224],{"class":37,"line":92},[35,15225,15226],{"class":359},"    string m_name;\n",[35,15228,15229,15231],{"class":37,"line":101},[35,15230,2326],{"class":495},[35,15232,15233],{"class":359}," m_id;\n",[35,15235,15236],{"class":37,"line":110},[35,15237,15238],{"class":41},"    \u002F\u002F赋值姓名\n",[35,15240,15241,15244,15247,15249,15252,15255],{"class":37,"line":119},[35,15242,15243],{"class":495},"    void",[35,15245,15246],{"class":48}," setName",[35,15248,499],{"class":359},[35,15250,15251],{"class":48},"string",[35,15253,15254],{"class":5550}," name",[35,15256,505],{"class":359},[35,15258,15259],{"class":37,"line":128},[35,15260,2371],{"class":359},[35,15262,15263,15266,15268],{"class":37,"line":137},[35,15264,15265],{"class":359},"        m_name",[35,15267,544],{"class":495},[35,15269,15270],{"class":359},"name;\n",[35,15272,15273],{"class":37,"line":144},[35,15274,2528],{"class":359},[35,15276,15277],{"class":37,"line":150},[35,15278,15279],{"class":41},"    \u002F\u002F赋值学号\n",[35,15281,15282,15284,15287,15289,15291,15294],{"class":37,"line":159},[35,15283,15243],{"class":495},[35,15285,15286],{"class":48}," setId",[35,15288,499],{"class":359},[35,15290,502],{"class":495},[35,15292,15293],{"class":5550}," id",[35,15295,505],{"class":359},[35,15297,15298],{"class":37,"line":168},[35,15299,2371],{"class":359},[35,15301,15302,15305,15307],{"class":37,"line":177},[35,15303,15304],{"class":359},"        m_id",[35,15306,544],{"class":495},[35,15308,15309],{"class":359},"id;\n",[35,15311,15312],{"class":37,"line":182},[35,15313,2528],{"class":359},[35,15315,15316],{"class":37,"line":188},[35,15317,15318],{"class":41},"    \u002F\u002F打印学生信息\n",[35,15320,15321,15323,15325],{"class":37,"line":197},[35,15322,15243],{"class":495},[35,15324,9949],{"class":48},[35,15326,2317],{"class":359},[35,15328,15329],{"class":37,"line":206},[35,15330,2371],{"class":359},[35,15332,15333,15335,15337,15340,15342,15345,15347,15349,15351,15354,15356,15359,15361],{"class":37,"line":215},[35,15334,3785],{"class":359},[35,15336,1538],{"class":495},[35,15338,15339],{"class":306},"\"姓名：\"",[35,15341,1538],{"class":495},[35,15343,15344],{"class":359},"m_name",[35,15346,1538],{"class":495},[35,15348,4693],{"class":306},[35,15350,1538],{"class":495},[35,15352,15353],{"class":306},"\"学号：\"",[35,15355,1538],{"class":495},[35,15357,15358],{"class":359},"m_id",[35,15360,1538],{"class":495},[35,15362,1560],{"class":359},[35,15364,15365],{"class":37,"line":224},[35,15366,2528],{"class":359},[35,15368,15369],{"class":37,"line":233},[35,15370,4329],{"class":359},[35,15372,15373,15375,15377],{"class":37,"line":238},[35,15374,502],{"class":495},[35,15376,2314],{"class":48},[35,15378,2317],{"class":359},[35,15380,15381],{"class":37,"line":244},[35,15382,1907],{"class":359},[35,15384,15385],{"class":37,"line":253},[35,15386,15387],{"class":41},"    \u002F\u002F实例化\n",[35,15389,15390],{"class":37,"line":262},[35,15391,15392],{"class":359},"    Student s1;\n",[35,15394,15395,15398,15401,15403,15405],{"class":37,"line":271},[35,15396,15397],{"class":359},"    s1.",[35,15399,15400],{"class":48},"setName",[35,15402,499],{"class":359},[35,15404,8250],{"class":306},[35,15406,3053],{"class":359},[35,15408,15409,15411,15414,15416,15419],{"class":37,"line":280},[35,15410,15397],{"class":359},[35,15412,15413],{"class":48},"setId",[35,15415,499],{"class":359},[35,15417,15418],{"class":58},"123456",[35,15420,3053],{"class":359},[35,15422,15423,15425,15428],{"class":37,"line":289},[35,15424,15397],{"class":359},[35,15426,15427],{"class":48},"printInfo",[35,15429,5970],{"class":359},[35,15431,15432],{"class":37,"line":294},[35,15433,1926],{"class":359},[21,15435,15436],{},"类中的属性和行为统称为成员",[21,15438,15439],{},"属性：成员属性(成员变量)",[21,15441,15442],{},"方法：成员函数(成员方法)",[21,15444,15445],{},[645,15446,15447],{},"封装意义二：",[21,15449,15450],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[21,15452,15453],{},"访问权限有三种：",[14,15455,15456,15459,15462],{},[17,15457,15458],{},"public        公共权限",[17,15460,15461],{},"protected 保护权限",[17,15463,15464],{},"private      私有权限",[21,15466,15467],{},[645,15468,15469],{},"示例：",[25,15471,15473],{"className":10275,"code":15472,"language":10277,"meta":30,"style":30},"\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",[32,15474,15475,15480,15485,15490,15495,15499,15506,15510,15515,15519,15524,15528,15533,15538,15543,15547,15552,15557,15564,15568,15572,15580,15584,15595,15607,15619,15623,15627,15631,15639,15643,15648,15660,15668,15676,15680,15690,15694,15702],{"__ignoreMap":30},[35,15476,15477],{"class":37,"line":38},[35,15478,15479],{"class":41},"\u002F\u002F三种权限\n",[35,15481,15482],{"class":37,"line":45},[35,15483,15484],{"class":41},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[35,15486,15487],{"class":37,"line":55},[35,15488,15489],{"class":41},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[35,15491,15492],{"class":37,"line":65},[35,15493,15494],{"class":41},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[35,15496,15497],{"class":37,"line":74},[35,15498,141],{"emptyLinePlaceholder":140},[35,15500,15501,15503],{"class":37,"line":83},[35,15502,15028],{"class":495},[35,15504,15505],{"class":48}," Person\n",[35,15507,15508],{"class":37,"line":92},[35,15509,1907],{"class":359},[35,15511,15512],{"class":37,"line":101},[35,15513,15514],{"class":41},"    \u002F\u002F姓名  公共权限\n",[35,15516,15517],{"class":37,"line":110},[35,15518,15050],{"class":495},[35,15520,15521],{"class":37,"line":119},[35,15522,15523],{"class":359},"    string m_Name;\n",[35,15525,15526],{"class":37,"line":128},[35,15527,141],{"emptyLinePlaceholder":140},[35,15529,15530],{"class":37,"line":137},[35,15531,15532],{"class":41},"    \u002F\u002F汽车  保护权限\n",[35,15534,15535],{"class":37,"line":144},[35,15536,15537],{"class":495},"protected:\n",[35,15539,15540],{"class":37,"line":150},[35,15541,15542],{"class":359},"    string m_Car;\n",[35,15544,15545],{"class":37,"line":159},[35,15546,141],{"emptyLinePlaceholder":140},[35,15548,15549],{"class":37,"line":168},[35,15550,15551],{"class":41},"    \u002F\u002F银行卡密码  私有权限\n",[35,15553,15554],{"class":37,"line":177},[35,15555,15556],{"class":495},"private:\n",[35,15558,15559,15561],{"class":37,"line":182},[35,15560,2326],{"class":495},[35,15562,15563],{"class":359}," m_Password;\n",[35,15565,15566],{"class":37,"line":188},[35,15567,141],{"emptyLinePlaceholder":140},[35,15569,15570],{"class":37,"line":197},[35,15571,15050],{"class":495},[35,15573,15574,15576,15578],{"class":37,"line":206},[35,15575,15243],{"class":495},[35,15577,11719],{"class":48},[35,15579,2317],{"class":359},[35,15581,15582],{"class":37,"line":215},[35,15583,2371],{"class":359},[35,15585,15586,15589,15591,15593],{"class":37,"line":224},[35,15587,15588],{"class":359},"        m_Name ",[35,15590,544],{"class":495},[35,15592,9272],{"class":306},[35,15594,1655],{"class":359},[35,15596,15597,15600,15602,15605],{"class":37,"line":233},[35,15598,15599],{"class":359},"        m_Car ",[35,15601,544],{"class":495},[35,15603,15604],{"class":306}," \"拖拉机\"",[35,15606,1655],{"class":359},[35,15608,15609,15612,15614,15617],{"class":37,"line":238},[35,15610,15611],{"class":359},"        m_Password ",[35,15613,544],{"class":495},[35,15615,15616],{"class":58}," 123456",[35,15618,1655],{"class":359},[35,15620,15621],{"class":37,"line":244},[35,15622,2528],{"class":359},[35,15624,15625],{"class":37,"line":253},[35,15626,4329],{"class":359},[35,15628,15629],{"class":37,"line":262},[35,15630,141],{"emptyLinePlaceholder":140},[35,15632,15633,15635,15637],{"class":37,"line":271},[35,15634,502],{"class":495},[35,15636,2314],{"class":48},[35,15638,11187],{"class":359},[35,15640,15641],{"class":37,"line":280},[35,15642,141],{"emptyLinePlaceholder":140},[35,15644,15645],{"class":37,"line":289},[35,15646,15647],{"class":359},"    Person p;\n",[35,15649,15650,15653,15655,15658],{"class":37,"line":294},[35,15651,15652],{"class":359},"    p.m_Name ",[35,15654,544],{"class":495},[35,15656,15657],{"class":306}," \"李四\"",[35,15659,1655],{"class":359},[35,15661,15662,15665],{"class":37,"line":300},[35,15663,15664],{"class":41},"    \u002F\u002Fp.m_Car = \"奔驰\";",[35,15666,15667],{"class":41},"  \u002F\u002F保护权限类外访问不到\n",[35,15669,15670,15673],{"class":37,"line":313},[35,15671,15672],{"class":41},"    \u002F\u002Fp.m_Password = 123;",[35,15674,15675],{"class":41}," \u002F\u002F私有权限类外访问不到\n",[35,15677,15678],{"class":37,"line":324},[35,15679,141],{"emptyLinePlaceholder":140},[35,15681,15682,15684,15686,15688],{"class":37,"line":2955},[35,15683,2644],{"class":48},[35,15685,499],{"class":359},[35,15687,2649],{"class":306},[35,15689,3053],{"class":359},[35,15691,15692],{"class":37,"line":8282},[35,15693,141],{"emptyLinePlaceholder":140},[35,15695,15696,15698,15700],{"class":37,"line":8306},[35,15697,4424],{"class":495},[35,15699,4427],{"class":58},[35,15701,1655],{"class":359},[35,15703,15704],{"class":37,"line":8311},[35,15705,1926],{"class":359},[465,15707,15709],{"id":15708},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[21,15711,15712,15713,15716,15717],{},"在C++中 struct和class唯一的",[645,15714,15715],{},"区别","就在于 ",[645,15718,15719],{},"默认的访问权限不同",[21,15721,15722],{},"区别：",[1501,15724,15725,15728],{},[17,15726,15727],{},"struct 默认权限为公共",[17,15729,15730],{},"class   默认权限为私有",[25,15732,15734],{"className":10275,"code":15733,"language":10277,"meta":30,"style":30},"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",[32,15735,15736,15743,15747,15757,15761,15765,15772,15776,15786,15790,15794,15802,15806,15811,15825,15829,15834,15848,15852,15862,15866,15874],{"__ignoreMap":30},[35,15737,15738,15740],{"class":37,"line":38},[35,15739,15028],{"class":495},[35,15741,15742],{"class":48}," C1\n",[35,15744,15745],{"class":37,"line":45},[35,15746,1907],{"class":359},[35,15748,15749,15751,15754],{"class":37,"line":55},[35,15750,2326],{"class":495},[35,15752,15753],{"class":359},"  m_A;",[35,15755,15756],{"class":41}," \u002F\u002F默认是私有权限\n",[35,15758,15759],{"class":37,"line":65},[35,15760,4329],{"class":359},[35,15762,15763],{"class":37,"line":74},[35,15764,141],{"emptyLinePlaceholder":140},[35,15766,15767,15769],{"class":37,"line":83},[35,15768,8093],{"class":495},[35,15770,15771],{"class":48}," C2\n",[35,15773,15774],{"class":37,"line":92},[35,15775,1907],{"class":359},[35,15777,15778,15780,15783],{"class":37,"line":101},[35,15779,2326],{"class":495},[35,15781,15782],{"class":359}," m_A;",[35,15784,15785],{"class":41},"  \u002F\u002F默认是公共权限\n",[35,15787,15788],{"class":37,"line":110},[35,15789,4329],{"class":359},[35,15791,15792],{"class":37,"line":119},[35,15793,141],{"emptyLinePlaceholder":140},[35,15795,15796,15798,15800],{"class":37,"line":128},[35,15797,502],{"class":495},[35,15799,2314],{"class":48},[35,15801,11187],{"class":359},[35,15803,15804],{"class":37,"line":137},[35,15805,141],{"emptyLinePlaceholder":140},[35,15807,15808],{"class":37,"line":144},[35,15809,15810],{"class":359},"    C1 c1;\n",[35,15812,15813,15816,15818,15820,15822],{"class":37,"line":150},[35,15814,15815],{"class":359},"    c1.m_A ",[35,15817,544],{"class":495},[35,15819,2379],{"class":58},[35,15821,553],{"class":359},[35,15823,15824],{"class":41}," \u002F\u002F错误，访问权限是私有\n",[35,15826,15827],{"class":37,"line":159},[35,15828,141],{"emptyLinePlaceholder":140},[35,15830,15831],{"class":37,"line":168},[35,15832,15833],{"class":359},"    C2 c2;\n",[35,15835,15836,15839,15841,15843,15845],{"class":37,"line":177},[35,15837,15838],{"class":359},"    c2.m_A ",[35,15840,544],{"class":495},[35,15842,2379],{"class":58},[35,15844,553],{"class":359},[35,15846,15847],{"class":41}," \u002F\u002F正确，访问权限是公共\n",[35,15849,15850],{"class":37,"line":182},[35,15851,141],{"emptyLinePlaceholder":140},[35,15853,15854,15856,15858,15860],{"class":37,"line":188},[35,15855,2644],{"class":48},[35,15857,499],{"class":359},[35,15859,2649],{"class":306},[35,15861,3053],{"class":359},[35,15863,15864],{"class":37,"line":197},[35,15865,141],{"emptyLinePlaceholder":140},[35,15867,15868,15870,15872],{"class":37,"line":206},[35,15869,4424],{"class":495},[35,15871,4427],{"class":58},[35,15873,1655],{"class":359},[35,15875,15876],{"class":37,"line":215},[35,15877,1926],{"class":359},[465,15879,15881],{"id":15880},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[21,15883,15884],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[21,15886,15887],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[21,15889,15890],{},[645,15891,15469],{},[25,15893,15895],{"className":10275,"code":15894,"language":10277,"meta":30,"style":30},"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",[32,15896,15897,15907,15911,15915,15920,15934,15943,15947,15957,15961,15968,15972,15976,15980,15985,15994,16001,16005,16010,16026,16049,16062,16069,16073,16082,16086,16090,16095,16111,16121,16125,16129,16133,16141,16145,16155,16159,16167,16171,16175,16183,16187,16191,16196,16209,16232,16236,16241,16254,16276,16280,16285,16299,16307,16311,16321,16325,16333],{"__ignoreMap":30},[35,15898,15899,15901,15904],{"class":37,"line":38},[35,15900,15028],{"class":495},[35,15902,15903],{"class":48}," Person",[35,15905,15906],{"class":359}," {\n",[35,15908,15909],{"class":37,"line":45},[35,15910,15050],{"class":495},[35,15912,15913],{"class":37,"line":55},[35,15914,141],{"emptyLinePlaceholder":140},[35,15916,15917],{"class":37,"line":65},[35,15918,15919],{"class":41},"    \u002F\u002F姓名设置可读可写\n",[35,15921,15922,15924,15926,15928,15930,15932],{"class":37,"line":74},[35,15923,15243],{"class":495},[35,15925,15246],{"class":48},[35,15927,499],{"class":359},[35,15929,15251],{"class":48},[35,15931,15254],{"class":5550},[35,15933,12776],{"class":359},[35,15935,15936,15938,15940],{"class":37,"line":83},[35,15937,15588],{"class":359},[35,15939,544],{"class":495},[35,15941,15942],{"class":359}," name;\n",[35,15944,15945],{"class":37,"line":92},[35,15946,2528],{"class":359},[35,15948,15949,15952,15955],{"class":37,"line":101},[35,15950,15951],{"class":48},"    string",[35,15953,15954],{"class":48}," getName",[35,15956,2317],{"class":359},[35,15958,15959],{"class":37,"line":110},[35,15960,2371],{"class":359},[35,15962,15963,15965],{"class":37,"line":119},[35,15964,15086],{"class":495},[35,15966,15967],{"class":359}," m_Name;\n",[35,15969,15970],{"class":37,"line":128},[35,15971,2528],{"class":359},[35,15973,15974],{"class":37,"line":137},[35,15975,141],{"emptyLinePlaceholder":140},[35,15977,15978],{"class":37,"line":144},[35,15979,141],{"emptyLinePlaceholder":140},[35,15981,15982],{"class":37,"line":150},[35,15983,15984],{"class":41},"    \u002F\u002F获取年龄 \n",[35,15986,15987,15989,15992],{"class":37,"line":159},[35,15988,2326],{"class":495},[35,15990,15991],{"class":48}," getAge",[35,15993,11187],{"class":359},[35,15995,15996,15998],{"class":37,"line":168},[35,15997,15086],{"class":495},[35,15999,16000],{"class":359}," m_Age;\n",[35,16002,16003],{"class":37,"line":177},[35,16004,2528],{"class":359},[35,16006,16007],{"class":37,"line":182},[35,16008,16009],{"class":41},"    \u002F\u002F设置年龄\n",[35,16011,16012,16014,16017,16019,16021,16024],{"class":37,"line":188},[35,16013,15243],{"class":495},[35,16015,16016],{"class":48}," setAge",[35,16018,499],{"class":359},[35,16020,502],{"class":495},[35,16022,16023],{"class":5550}," age",[35,16025,12776],{"class":359},[35,16027,16028,16030,16033,16035,16037,16039,16042,16044,16047],{"class":37,"line":197},[35,16029,2837],{"class":495},[35,16031,16032],{"class":359}," (age ",[35,16034,1404],{"class":495},[35,16036,4427],{"class":58},[35,16038,3589],{"class":495},[35,16040,16041],{"class":359}," age ",[35,16043,1454],{"class":495},[35,16045,16046],{"class":58}," 150",[35,16048,12776],{"class":359},[35,16050,16051,16053,16055,16058,16060],{"class":37,"line":206},[35,16052,10053],{"class":359},[35,16054,1538],{"class":495},[35,16056,16057],{"class":306}," \"你个老妖精!\"",[35,16059,1805],{"class":495},[35,16061,9174],{"class":359},[35,16063,16064,16067],{"class":37,"line":215},[35,16065,16066],{"class":495},"            return",[35,16068,1655],{"class":359},[35,16070,16071],{"class":37,"line":224},[35,16072,2869],{"class":359},[35,16074,16075,16078,16080],{"class":37,"line":233},[35,16076,16077],{"class":359},"        m_Age ",[35,16079,544],{"class":495},[35,16081,8131],{"class":359},[35,16083,16084],{"class":37,"line":238},[35,16085,2528],{"class":359},[35,16087,16088],{"class":37,"line":244},[35,16089,141],{"emptyLinePlaceholder":140},[35,16091,16092],{"class":37,"line":253},[35,16093,16094],{"class":41},"    \u002F\u002F情人设置为只写\n",[35,16096,16097,16099,16102,16104,16106,16109],{"class":37,"line":262},[35,16098,15243],{"class":495},[35,16100,16101],{"class":48}," setLover",[35,16103,499],{"class":359},[35,16105,15251],{"class":48},[35,16107,16108],{"class":5550}," lover",[35,16110,12776],{"class":359},[35,16112,16113,16116,16118],{"class":37,"line":271},[35,16114,16115],{"class":359},"        m_Lover ",[35,16117,544],{"class":495},[35,16119,16120],{"class":359}," lover;\n",[35,16122,16123],{"class":37,"line":280},[35,16124,2528],{"class":359},[35,16126,16127],{"class":37,"line":289},[35,16128,141],{"emptyLinePlaceholder":140},[35,16130,16131],{"class":37,"line":294},[35,16132,15556],{"class":495},[35,16134,16135,16138],{"class":37,"line":300},[35,16136,16137],{"class":359},"    string m_Name;",[35,16139,16140],{"class":41}," \u002F\u002F可读可写  姓名\n",[35,16142,16143],{"class":37,"line":313},[35,16144,13544],{"class":359},[35,16146,16147,16149,16152],{"class":37,"line":324},[35,16148,2326],{"class":495},[35,16150,16151],{"class":359}," m_Age;",[35,16153,16154],{"class":41}," \u002F\u002F只读  年龄\n",[35,16156,16157],{"class":37,"line":2955},[35,16158,141],{"emptyLinePlaceholder":140},[35,16160,16161,16164],{"class":37,"line":8282},[35,16162,16163],{"class":359},"    string m_Lover;",[35,16165,16166],{"class":41}," \u002F\u002F只写  情人\n",[35,16168,16169],{"class":37,"line":8306},[35,16170,4329],{"class":359},[35,16172,16173],{"class":37,"line":8311},[35,16174,141],{"emptyLinePlaceholder":140},[35,16176,16177,16179,16181],{"class":37,"line":8317},[35,16178,502],{"class":495},[35,16180,2314],{"class":48},[35,16182,11187],{"class":359},[35,16184,16185],{"class":37,"line":8344},[35,16186,141],{"emptyLinePlaceholder":140},[35,16188,16189],{"class":37,"line":8349},[35,16190,15647],{"class":359},[35,16192,16193],{"class":37,"line":8355},[35,16194,16195],{"class":41},"    \u002F\u002F姓名设置\n",[35,16197,16198,16201,16203,16205,16207],{"class":37,"line":8367},[35,16199,16200],{"class":359},"    p.",[35,16202,15400],{"class":48},[35,16204,499],{"class":359},[35,16206,8250],{"class":306},[35,16208,3053],{"class":359},[35,16210,16211,16213,16215,16218,16220,16223,16226,16228,16230],{"class":37,"line":8379},[35,16212,6863],{"class":359},[35,16214,1538],{"class":495},[35,16216,16217],{"class":306}," \"姓名： \"",[35,16219,1805],{"class":495},[35,16221,16222],{"class":359}," p.",[35,16224,16225],{"class":48},"getName",[35,16227,13384],{"class":359},[35,16229,1538],{"class":495},[35,16231,9174],{"class":359},[35,16233,16234],{"class":37,"line":8391},[35,16235,141],{"emptyLinePlaceholder":140},[35,16237,16238],{"class":37,"line":10050},[35,16239,16240],{"class":41},"    \u002F\u002F年龄设置\n",[35,16242,16243,16245,16248,16250,16252],{"class":37,"line":10075},[35,16244,16200],{"class":359},[35,16246,16247],{"class":48},"setAge",[35,16249,499],{"class":359},[35,16251,1150],{"class":58},[35,16253,3053],{"class":359},[35,16255,16256,16258,16260,16263,16265,16267,16270,16272,16274],{"class":37,"line":10098},[35,16257,6863],{"class":359},[35,16259,1538],{"class":495},[35,16261,16262],{"class":306}," \"年龄： \"",[35,16264,1805],{"class":495},[35,16266,16222],{"class":359},[35,16268,16269],{"class":48},"getAge",[35,16271,13384],{"class":359},[35,16273,1538],{"class":495},[35,16275,9174],{"class":359},[35,16277,16278],{"class":37,"line":10122},[35,16279,141],{"emptyLinePlaceholder":140},[35,16281,16282],{"class":37,"line":10127},[35,16283,16284],{"class":41},"    \u002F\u002F情人设置\n",[35,16286,16287,16289,16292,16294,16297],{"class":37,"line":10132},[35,16288,16200],{"class":359},[35,16290,16291],{"class":48},"setLover",[35,16293,499],{"class":359},[35,16295,16296],{"class":306},"\"苍井\"",[35,16298,3053],{"class":359},[35,16300,16301,16304],{"class":37,"line":10137},[35,16302,16303],{"class":41},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[35,16305,16306],{"class":41},"  \u002F\u002F只写属性，不可以读取\n",[35,16308,16309],{"class":37,"line":10146},[35,16310,141],{"emptyLinePlaceholder":140},[35,16312,16313,16315,16317,16319],{"class":37,"line":10151},[35,16314,2644],{"class":48},[35,16316,499],{"class":359},[35,16318,2649],{"class":306},[35,16320,3053],{"class":359},[35,16322,16323],{"class":37,"line":10157},[35,16324,141],{"emptyLinePlaceholder":140},[35,16326,16327,16329,16331],{"class":37,"line":10178},[35,16328,4424],{"class":495},[35,16330,4427],{"class":58},[35,16332,1655],{"class":359},[35,16334,16335],{"class":37,"line":10184},[35,16336,1926],{"class":359},[465,16338,16340],{"id":16339},"_814封装案例","8.1.4封装案例",[14,16342,16343],{},[17,16344,16345,16348],{},[645,16346,16347],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1501,16350,16351,16354],{},[17,16352,16353],{},"求出立方体的面积和体积",[17,16355,16356],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[25,16358,16360],{"className":486,"code":16359,"language":488,"meta":30,"style":30},"#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",[32,16361,16362,16368,16378,16385,16389,16393,16398,16428,16432,16442,16452,16462,16466,16475,16479,16515,16519,16528,16532,16548,16552,16557,16566,16570,16577,16581,16590,16594,16601,16605,16614,16618,16625,16629,16634,16651,16655,16701,16705,16714,16718,16722,16726,16735,16739,16743,16748,16752,16758,16764,16770,16774,16778,16783,16805,16809,16863,16867,16875,16879,16884,16889,16902,16909,16925,16936,16942,16965,16971,16994,17008,17028,17034,17045,17068,17090,17095,17101,17115,17128,17133,17147,17152,17158,17163,17177,17182,17187,17201,17213,17218,17231,17236,17241,17246,17259,17264],{"__ignoreMap":30},[35,16363,16364,16366],{"class":37,"line":38},[35,16365,2291],{"class":495},[35,16367,2294],{"class":306},[35,16369,16370,16372,16374,16376],{"class":37,"line":45},[35,16371,2299],{"class":495},[35,16373,2302],{"class":495},[35,16375,2305],{"class":48},[35,16377,1655],{"class":359},[35,16379,16380,16382],{"class":37,"line":55},[35,16381,15028],{"class":495},[35,16383,16384],{"class":48}," Cube\n",[35,16386,16387],{"class":37,"line":65},[35,16388,1907],{"class":359},[35,16390,16391],{"class":37,"line":74},[35,16392,15050],{"class":495},[35,16394,16395],{"class":37,"line":83},[35,16396,16397],{"class":41},"    \u002F\u002F输入长宽高\n",[35,16399,16400,16402,16405,16407,16409,16412,16414,16416,16419,16421,16423,16426],{"class":37,"line":92},[35,16401,15243],{"class":495},[35,16403,16404],{"class":48}," setLwh",[35,16406,499],{"class":359},[35,16408,502],{"class":495},[35,16410,16411],{"class":5550}," l",[35,16413,872],{"class":359},[35,16415,502],{"class":495},[35,16417,16418],{"class":5550}," w",[35,16420,872],{"class":359},[35,16422,502],{"class":495},[35,16424,16425],{"class":5550}," h",[35,16427,505],{"class":359},[35,16429,16430],{"class":37,"line":101},[35,16431,2371],{"class":359},[35,16433,16434,16437,16439],{"class":37,"line":110},[35,16435,16436],{"class":359},"        m_L",[35,16438,544],{"class":495},[35,16440,16441],{"class":359},"l;\n",[35,16443,16444,16447,16449],{"class":37,"line":119},[35,16445,16446],{"class":359},"        m_W",[35,16448,544],{"class":495},[35,16450,16451],{"class":359},"w;\n",[35,16453,16454,16457,16459],{"class":37,"line":128},[35,16455,16456],{"class":359},"        m_H",[35,16458,544],{"class":495},[35,16460,16461],{"class":359},"h;\n",[35,16463,16464],{"class":37,"line":137},[35,16465,2528],{"class":359},[35,16467,16468,16470,16473],{"class":37,"line":144},[35,16469,2326],{"class":495},[35,16471,16472],{"class":48}," mianji",[35,16474,2317],{"class":359},[35,16476,16477],{"class":37,"line":150},[35,16478,2371],{"class":359},[35,16480,16481,16483,16485,16487,16490,16492,16495,16497,16500,16502,16505,16507,16510,16512],{"class":37,"line":159},[35,16482,15086],{"class":495},[35,16484,15089],{"class":58},[35,16486,949],{"class":495},[35,16488,16489],{"class":359},"(m_L",[35,16491,949],{"class":495},[35,16493,16494],{"class":359},"m_W ",[35,16496,975],{"class":495},[35,16498,16499],{"class":359}," m_L",[35,16501,949],{"class":495},[35,16503,16504],{"class":359},"m_H ",[35,16506,975],{"class":495},[35,16508,16509],{"class":359}," m_W",[35,16511,949],{"class":495},[35,16513,16514],{"class":359},"m_H);\n",[35,16516,16517],{"class":37,"line":168},[35,16518,2528],{"class":359},[35,16520,16521,16523,16526],{"class":37,"line":177},[35,16522,2326],{"class":495},[35,16524,16525],{"class":48}," tiji",[35,16527,2317],{"class":359},[35,16529,16530],{"class":37,"line":182},[35,16531,2371],{"class":359},[35,16533,16534,16536,16538,16540,16543,16545],{"class":37,"line":188},[35,16535,15086],{"class":495},[35,16537,16499],{"class":359},[35,16539,949],{"class":495},[35,16541,16542],{"class":359},"m_W",[35,16544,949],{"class":495},[35,16546,16547],{"class":359},"m_H;\n",[35,16549,16550],{"class":37,"line":197},[35,16551,2528],{"class":359},[35,16553,16554],{"class":37,"line":206},[35,16555,16556],{"class":41},"    \u002F\u002F获取长宽高\n",[35,16558,16559,16561,16564],{"class":37,"line":215},[35,16560,2326],{"class":495},[35,16562,16563],{"class":48}," getLength",[35,16565,2317],{"class":359},[35,16567,16568],{"class":37,"line":224},[35,16569,2371],{"class":359},[35,16571,16572,16574],{"class":37,"line":233},[35,16573,15086],{"class":495},[35,16575,16576],{"class":359}," m_L;\n",[35,16578,16579],{"class":37,"line":238},[35,16580,2528],{"class":359},[35,16582,16583,16585,16588],{"class":37,"line":244},[35,16584,2326],{"class":495},[35,16586,16587],{"class":48}," getWidth",[35,16589,2317],{"class":359},[35,16591,16592],{"class":37,"line":253},[35,16593,2371],{"class":359},[35,16595,16596,16598],{"class":37,"line":262},[35,16597,15086],{"class":495},[35,16599,16600],{"class":359}," m_W;\n",[35,16602,16603],{"class":37,"line":271},[35,16604,2528],{"class":359},[35,16606,16607,16609,16612],{"class":37,"line":280},[35,16608,2326],{"class":495},[35,16610,16611],{"class":48}," getHeight",[35,16613,2317],{"class":359},[35,16615,16616],{"class":37,"line":289},[35,16617,2371],{"class":359},[35,16619,16620,16622],{"class":37,"line":294},[35,16621,15086],{"class":495},[35,16623,16624],{"class":359}," m_H;\n",[35,16626,16627],{"class":37,"line":300},[35,16628,2528],{"class":359},[35,16630,16631],{"class":37,"line":313},[35,16632,16633],{"class":41},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[35,16635,16636,16639,16642,16644,16647,16649],{"class":37,"line":324},[35,16637,16638],{"class":495},"    bool",[35,16640,16641],{"class":48}," isEqual",[35,16643,499],{"class":359},[35,16645,16646],{"class":48},"Cube",[35,16648,3183],{"class":5550},[35,16650,505],{"class":359},[35,16652,16653],{"class":37,"line":2955},[35,16654,2371],{"class":359},[35,16656,16657,16659,16662,16665,16667,16669,16672,16674,16677,16680,16682,16684,16687,16689,16691,16694,16696,16698],{"class":37,"line":8282},[35,16658,2837],{"class":495},[35,16660,16661],{"class":359}," (c.",[35,16663,16664],{"class":48},"getLength",[35,16666,13384],{"class":359},[35,16668,3283],{"class":495},[35,16670,16671],{"class":359}," m_L ",[35,16673,2065],{"class":495},[35,16675,16676],{"class":359}," c.",[35,16678,16679],{"class":48},"getWidth",[35,16681,13384],{"class":359},[35,16683,3283],{"class":495},[35,16685,16686],{"class":359}," m_W ",[35,16688,2065],{"class":495},[35,16690,16676],{"class":359},[35,16692,16693],{"class":48},"getHeight",[35,16695,13384],{"class":359},[35,16697,3283],{"class":495},[35,16699,16700],{"class":359}," m_H)\n",[35,16702,16703],{"class":37,"line":8306},[35,16704,2850],{"class":359},[35,16706,16707,16709,16712],{"class":37,"line":8311},[35,16708,16066],{"class":495},[35,16710,16711],{"class":58}," true",[35,16713,1655],{"class":359},[35,16715,16716],{"class":37,"line":8317},[35,16717,2869],{"class":359},[35,16719,16720],{"class":37,"line":8344},[35,16721,2910],{"class":495},[35,16723,16724],{"class":37,"line":8349},[35,16725,2850],{"class":359},[35,16727,16728,16730,16733],{"class":37,"line":8355},[35,16729,16066],{"class":495},[35,16731,16732],{"class":58}," false",[35,16734,1655],{"class":359},[35,16736,16737],{"class":37,"line":8367},[35,16738,2869],{"class":359},[35,16740,16741],{"class":37,"line":8379},[35,16742,2528],{"class":359},[35,16744,16745],{"class":37,"line":8391},[35,16746,16747],{"class":41},"    \u002F\u002F私有属性\n",[35,16749,16750],{"class":37,"line":10050},[35,16751,15556],{"class":495},[35,16753,16754,16756],{"class":37,"line":10075},[35,16755,2326],{"class":495},[35,16757,16576],{"class":359},[35,16759,16760,16762],{"class":37,"line":10098},[35,16761,2326],{"class":495},[35,16763,16600],{"class":359},[35,16765,16766,16768],{"class":37,"line":10122},[35,16767,2326],{"class":495},[35,16769,16624],{"class":359},[35,16771,16772],{"class":37,"line":10127},[35,16773,141],{"emptyLinePlaceholder":140},[35,16775,16776],{"class":37,"line":10132},[35,16777,4329],{"class":359},[35,16779,16780],{"class":37,"line":10137},[35,16781,16782],{"class":41},"\u002F\u002F全局函数判断两个立方体是否相等\n",[35,16784,16785,16787,16789,16791,16793,16796,16798,16800,16803],{"class":37,"line":10146},[35,16786,1716],{"class":495},[35,16788,16641],{"class":48},[35,16790,499],{"class":359},[35,16792,16646],{"class":48},[35,16794,16795],{"class":5550}," c1",[35,16797,872],{"class":359},[35,16799,16646],{"class":48},[35,16801,16802],{"class":5550}," c2",[35,16804,505],{"class":359},[35,16806,16807],{"class":37,"line":10151},[35,16808,1907],{"class":359},[35,16810,16811,16813,16816,16818,16820,16822,16825,16827,16830,16832,16834,16836,16838,16840,16842,16844,16846,16848,16850,16852,16854,16856,16858,16860],{"class":37,"line":10157},[35,16812,4424],{"class":495},[35,16814,16815],{"class":359}," (c1.",[35,16817,16664],{"class":48},[35,16819,13384],{"class":359},[35,16821,3283],{"class":495},[35,16823,16824],{"class":359}," c2.",[35,16826,16664],{"class":48},[35,16828,16829],{"class":359},"()) ",[35,16831,2065],{"class":495},[35,16833,16815],{"class":359},[35,16835,16679],{"class":48},[35,16837,13384],{"class":359},[35,16839,3283],{"class":495},[35,16841,16824],{"class":359},[35,16843,16679],{"class":48},[35,16845,16829],{"class":359},[35,16847,2065],{"class":495},[35,16849,16815],{"class":359},[35,16851,16693],{"class":48},[35,16853,13384],{"class":359},[35,16855,3283],{"class":495},[35,16857,16824],{"class":359},[35,16859,16693],{"class":48},[35,16861,16862],{"class":359},"());\n",[35,16864,16865],{"class":37,"line":10178},[35,16866,1926],{"class":359},[35,16868,16869,16871,16873],{"class":37,"line":10184},[35,16870,502],{"class":495},[35,16872,2314],{"class":48},[35,16874,2317],{"class":359},[35,16876,16877],{"class":37,"line":10198},[35,16878,1907],{"class":359},[35,16880,16881],{"class":37,"line":10204},[35,16882,16883],{"class":359},"    Cube c1;\n",[35,16885,16886],{"class":37,"line":10231},[35,16887,16888],{"class":41},"    \u002F\u002F输入立方体的长宽高\n",[35,16890,16891,16893,16895,16898,16900],{"class":37,"line":10240},[35,16892,1912],{"class":359},[35,16894,1538],{"class":495},[35,16896,16897],{"class":306},"\"请输入第一个立方体的长、宽、高：\"",[35,16899,1538],{"class":495},[35,16901,1560],{"class":359},[35,16903,16904,16906],{"class":37,"line":10246},[35,16905,2326],{"class":495},[35,16907,16908],{"class":359}," l,w,h,l1,w1,h1;\n",[35,16910,16911,16913,16915,16917,16919,16921,16923],{"class":37,"line":10254},[35,16912,2353],{"class":359},[35,16914,1790],{"class":495},[35,16916,1012],{"class":359},[35,16918,1790],{"class":495},[35,16920,1289],{"class":359},[35,16922,1790],{"class":495},[35,16924,16461],{"class":359},[35,16926,16927,16930,16933],{"class":37,"line":10259},[35,16928,16929],{"class":359},"    c1.",[35,16931,16932],{"class":48},"setLwh",[35,16934,16935],{"class":359},"(l,w,h);\n",[35,16937,16939],{"class":37,"line":16938},66,[35,16940,16941],{"class":41},"    \u002F\u002F面积\n",[35,16943,16945,16947,16949,16952,16954,16956,16959,16961,16963],{"class":37,"line":16944},67,[35,16946,1912],{"class":359},[35,16948,1538],{"class":495},[35,16950,16951],{"class":306},"\"立方体的表面积为：\"",[35,16953,1538],{"class":495},[35,16955,15164],{"class":359},[35,16957,16958],{"class":48},"mianji",[35,16960,2767],{"class":359},[35,16962,1538],{"class":495},[35,16964,1560],{"class":359},[35,16966,16968],{"class":37,"line":16967},68,[35,16969,16970],{"class":41},"    \u002F\u002F体积\n",[35,16972,16974,16976,16978,16981,16983,16985,16988,16990,16992],{"class":37,"line":16973},69,[35,16975,1912],{"class":359},[35,16977,1538],{"class":495},[35,16979,16980],{"class":306},"\"立方体的体积为：\"",[35,16982,1538],{"class":495},[35,16984,15164],{"class":359},[35,16986,16987],{"class":48},"tiji",[35,16989,2767],{"class":359},[35,16991,1538],{"class":495},[35,16993,1560],{"class":359},[35,16995,16997,16999,17001,17004,17006],{"class":37,"line":16996},70,[35,16998,1912],{"class":359},[35,17000,1538],{"class":495},[35,17002,17003],{"class":306},"\"请输入第二个立方体的长、宽、高：\"",[35,17005,1538],{"class":495},[35,17007,1560],{"class":359},[35,17009,17011,17013,17015,17018,17020,17023,17025],{"class":37,"line":17010},71,[35,17012,2353],{"class":359},[35,17014,1790],{"class":495},[35,17016,17017],{"class":359},"l1",[35,17019,1790],{"class":495},[35,17021,17022],{"class":359},"w1",[35,17024,1790],{"class":495},[35,17026,17027],{"class":359},"h1;\n",[35,17029,17031],{"class":37,"line":17030},72,[35,17032,17033],{"class":359},"    Cube c2;\n",[35,17035,17037,17040,17042],{"class":37,"line":17036},73,[35,17038,17039],{"class":359},"    c2.",[35,17041,16932],{"class":48},[35,17043,17044],{"class":359},"(l1,w1,h1);\n",[35,17046,17048,17050,17052,17055,17057,17060,17062,17064,17066],{"class":37,"line":17047},74,[35,17049,1912],{"class":359},[35,17051,1538],{"class":495},[35,17053,17054],{"class":306},"\"第二个立方体的表面积为：\"",[35,17056,1538],{"class":495},[35,17058,17059],{"class":359},"c2.",[35,17061,16958],{"class":48},[35,17063,2767],{"class":359},[35,17065,1538],{"class":495},[35,17067,1560],{"class":359},[35,17069,17071,17073,17075,17078,17080,17082,17084,17086,17088],{"class":37,"line":17070},75,[35,17072,1912],{"class":359},[35,17074,1538],{"class":495},[35,17076,17077],{"class":306},"\"第二个立方体的体积为：\"",[35,17079,1538],{"class":495},[35,17081,17059],{"class":359},[35,17083,16987],{"class":48},[35,17085,2767],{"class":359},[35,17087,1538],{"class":495},[35,17089,1560],{"class":359},[35,17091,17093],{"class":37,"line":17092},76,[35,17094,141],{"emptyLinePlaceholder":140},[35,17096,17098],{"class":37,"line":17097},77,[35,17099,17100],{"class":41},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[35,17102,17104,17106,17108,17111,17113],{"class":37,"line":17103},78,[35,17105,1912],{"class":359},[35,17107,1538],{"class":495},[35,17109,17110],{"class":306},"\"内部函数判断结果：\"",[35,17112,1538],{"class":495},[35,17114,1560],{"class":359},[35,17116,17118,17120,17122,17125],{"class":37,"line":17117},79,[35,17119,3435],{"class":495},[35,17121,16815],{"class":359},[35,17123,17124],{"class":48},"isEqual",[35,17126,17127],{"class":359},"(c2))\n",[35,17129,17131],{"class":37,"line":17130},80,[35,17132,2371],{"class":359},[35,17134,17136,17138,17140,17143,17145],{"class":37,"line":17135},81,[35,17137,3785],{"class":359},[35,17139,1538],{"class":495},[35,17141,17142],{"class":306},"\"两个立方体相等\"",[35,17144,1538],{"class":495},[35,17146,1560],{"class":359},[35,17148,17150],{"class":37,"line":17149},82,[35,17151,2528],{"class":359},[35,17153,17155],{"class":37,"line":17154},83,[35,17156,17157],{"class":495},"    else\n",[35,17159,17161],{"class":37,"line":17160},84,[35,17162,2371],{"class":359},[35,17164,17166,17168,17170,17173,17175],{"class":37,"line":17165},85,[35,17167,3785],{"class":359},[35,17169,1538],{"class":495},[35,17171,17172],{"class":306},"\"两个立方体不相等\"",[35,17174,1538],{"class":495},[35,17176,1560],{"class":359},[35,17178,17180],{"class":37,"line":17179},86,[35,17181,2528],{"class":359},[35,17183,17185],{"class":37,"line":17184},87,[35,17186,141],{"emptyLinePlaceholder":140},[35,17188,17190,17192,17194,17197,17199],{"class":37,"line":17189},88,[35,17191,1912],{"class":359},[35,17193,1538],{"class":495},[35,17195,17196],{"class":306},"\"全局函数判断结果：\"",[35,17198,1538],{"class":495},[35,17200,1560],{"class":359},[35,17202,17204,17206,17208,17210],{"class":37,"line":17203},89,[35,17205,3435],{"class":495},[35,17207,2012],{"class":359},[35,17209,17124],{"class":48},[35,17211,17212],{"class":359},"(c1, c2))\n",[35,17214,17216],{"class":37,"line":17215},90,[35,17217,2371],{"class":359},[35,17219,17221,17223,17225,17227,17229],{"class":37,"line":17220},91,[35,17222,3785],{"class":359},[35,17224,1538],{"class":495},[35,17226,17142],{"class":306},[35,17228,1538],{"class":495},[35,17230,1560],{"class":359},[35,17232,17234],{"class":37,"line":17233},92,[35,17235,2528],{"class":359},[35,17237,17239],{"class":37,"line":17238},93,[35,17240,17157],{"class":495},[35,17242,17244],{"class":37,"line":17243},94,[35,17245,2371],{"class":359},[35,17247,17249,17251,17253,17255,17257],{"class":37,"line":17248},95,[35,17250,3785],{"class":359},[35,17252,1538],{"class":495},[35,17254,17172],{"class":306},[35,17256,1538],{"class":495},[35,17258,1560],{"class":359},[35,17260,17262],{"class":37,"line":17261},96,[35,17263,2528],{"class":359},[35,17265,17267],{"class":37,"line":17266},97,[35,17268,1926],{"class":359},[14,17270,17271],{"start":45},[17,17272,17273],{},[645,17274,17275],{},"练习案例2：点和圆的关系",[1501,17277,17278],{},[17,17279,17280],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[25,17282,17284],{"className":486,"code":17283,"language":488,"meta":30,"style":30},"#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",[32,17285,17286,17292,17302,17309,17316,17320,17324,17329,17363,17368,17384,17398,17402,17406,17413,17420,17424,17430,17434,17438,17442,17464,17487,17492,17506,17521,17525,17529,17535,17540,17545,17549,17575,17579,17609,17637,17665,17682,17686,17699,17703,17707,17711,17724,17728,17732,17740,17744,17748,17752,17757,17761,17772,17779,17788,17798,17809,17816,17829,17840,17850,17861,17868,17882,17887,17897,17905],{"__ignoreMap":30},[35,17287,17288,17290],{"class":37,"line":38},[35,17289,2291],{"class":495},[35,17291,2294],{"class":306},[35,17293,17294,17296,17298,17300],{"class":37,"line":45},[35,17295,2299],{"class":495},[35,17297,2302],{"class":495},[35,17299,2305],{"class":48},[35,17301,1655],{"class":359},[35,17303,17304,17306],{"class":37,"line":55},[35,17305,2291],{"class":495},[35,17307,17308],{"class":306},"\u003Ccmath>\n",[35,17310,17311,17313],{"class":37,"line":65},[35,17312,15028],{"class":495},[35,17314,17315],{"class":48}," Point\n",[35,17317,17318],{"class":37,"line":74},[35,17319,1907],{"class":359},[35,17321,17322],{"class":37,"line":83},[35,17323,15050],{"class":495},[35,17325,17326],{"class":37,"line":92},[35,17327,17328],{"class":41},"    \u002F\u002F赋值\n",[35,17330,17331,17333,17336,17338,17340,17343,17345,17347,17350,17353,17355,17358,17360],{"class":37,"line":101},[35,17332,15243],{"class":495},[35,17334,17335],{"class":48}," setPoint",[35,17337,499],{"class":359},[35,17339,14371],{"class":495},[35,17341,17342],{"class":5550}," x",[35,17344,12769],{"class":359},[35,17346,14371],{"class":495},[35,17348,17349],{"class":5550}," y",[35,17351,17352],{"class":359},") { m_x ",[35,17354,544],{"class":495},[35,17356,17357],{"class":359}," x; m_y ",[35,17359,544],{"class":495},[35,17361,17362],{"class":359}," y; }\n",[35,17364,17365],{"class":37,"line":110},[35,17366,17367],{"class":41},"    \u002F\u002F获取坐标\n",[35,17369,17370,17372,17375,17378,17381],{"class":37,"line":119},[35,17371,15072],{"class":495},[35,17373,17374],{"class":48}," getX",[35,17376,17377],{"class":359},"() { ",[35,17379,17380],{"class":495},"return",[35,17382,17383],{"class":359}," m_x; }\n",[35,17385,17386,17388,17391,17393,17395],{"class":37,"line":128},[35,17387,15072],{"class":495},[35,17389,17390],{"class":48}," getY",[35,17392,17377],{"class":359},[35,17394,17380],{"class":495},[35,17396,17397],{"class":359}," m_y; }\n",[35,17399,17400],{"class":37,"line":137},[35,17401,141],{"emptyLinePlaceholder":140},[35,17403,17404],{"class":37,"line":144},[35,17405,15556],{"class":495},[35,17407,17408,17410],{"class":37,"line":150},[35,17409,15072],{"class":495},[35,17411,17412],{"class":359}," m_x;\n",[35,17414,17415,17417],{"class":37,"line":159},[35,17416,15072],{"class":495},[35,17418,17419],{"class":359}," m_y;\n",[35,17421,17422],{"class":37,"line":168},[35,17423,4329],{"class":359},[35,17425,17426,17428],{"class":37,"line":177},[35,17427,15028],{"class":495},[35,17429,15031],{"class":48},[35,17431,17432],{"class":37,"line":182},[35,17433,1907],{"class":359},[35,17435,17436],{"class":37,"line":188},[35,17437,15050],{"class":495},[35,17439,17440],{"class":37,"line":197},[35,17441,17328],{"class":41},[35,17443,17444,17446,17449,17451,17453,17456,17459,17461],{"class":37,"line":206},[35,17445,15243],{"class":495},[35,17447,17448],{"class":48}," setRadius",[35,17450,499],{"class":359},[35,17452,14371],{"class":495},[35,17454,17455],{"class":5550}," r",[35,17457,17458],{"class":359},") { m_r ",[35,17460,544],{"class":495},[35,17462,17463],{"class":359}," r; }\n",[35,17465,17466,17468,17471,17473,17476,17479,17482,17484],{"class":37,"line":215},[35,17467,15243],{"class":495},[35,17469,17470],{"class":48}," setCenter",[35,17472,499],{"class":359},[35,17474,17475],{"class":48},"Point",[35,17477,17478],{"class":5550}," center",[35,17480,17481],{"class":359},") { m_center ",[35,17483,544],{"class":495},[35,17485,17486],{"class":359}," center; }\n",[35,17488,17489],{"class":37,"line":224},[35,17490,17491],{"class":41},"    \u002F\u002F获取属性\n",[35,17493,17494,17496,17499,17501,17503],{"class":37,"line":233},[35,17495,15072],{"class":495},[35,17497,17498],{"class":48}," getRadius",[35,17500,17377],{"class":359},[35,17502,17380],{"class":495},[35,17504,17505],{"class":359}," m_r; }\n",[35,17507,17508,17511,17514,17516,17518],{"class":37,"line":238},[35,17509,17510],{"class":48},"    Point",[35,17512,17513],{"class":48}," getCenter",[35,17515,17377],{"class":359},[35,17517,17380],{"class":495},[35,17519,17520],{"class":359}," m_center; }\n",[35,17522,17523],{"class":37,"line":244},[35,17524,141],{"emptyLinePlaceholder":140},[35,17526,17527],{"class":37,"line":253},[35,17528,15556],{"class":495},[35,17530,17531,17533],{"class":37,"line":262},[35,17532,15072],{"class":495},[35,17534,15062],{"class":359},[35,17536,17537],{"class":37,"line":271},[35,17538,17539],{"class":41},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[35,17541,17542],{"class":37,"line":280},[35,17543,17544],{"class":359},"    Point m_center;\n",[35,17546,17547],{"class":37,"line":289},[35,17548,4329],{"class":359},[35,17550,17551,17553,17556,17558,17561,17563,17565,17567,17569,17571,17573],{"class":37,"line":294},[35,17552,5698],{"class":495},[35,17554,17555],{"class":48}," isInCircle",[35,17557,499],{"class":359},[35,17559,17560],{"class":48},"Circle",[35,17562,10918],{"class":495},[35,17564,784],{"class":5550},[35,17566,872],{"class":359},[35,17568,17475],{"class":48},[35,17570,10918],{"class":495},[35,17572,21],{"class":5550},[35,17574,505],{"class":359},[35,17576,17577],{"class":37,"line":300},[35,17578,1907],{"class":359},[35,17580,17581,17583,17586,17588,17590,17593,17596,17599,17601,17603,17605,17607],{"class":37,"line":313},[35,17582,15072],{"class":495},[35,17584,17585],{"class":359}," dx ",[35,17587,544],{"class":495},[35,17589,16676],{"class":359},[35,17591,17592],{"class":48},"getCenter",[35,17594,17595],{"class":359},"().",[35,17597,17598],{"class":48},"getX",[35,17600,13384],{"class":359},[35,17602,1026],{"class":495},[35,17604,16222],{"class":359},[35,17606,17598],{"class":48},[35,17608,5970],{"class":359},[35,17610,17611,17613,17616,17618,17620,17622,17624,17627,17629,17631,17633,17635],{"class":37,"line":324},[35,17612,15072],{"class":495},[35,17614,17615],{"class":359}," dy ",[35,17617,544],{"class":495},[35,17619,16676],{"class":359},[35,17621,17592],{"class":48},[35,17623,17595],{"class":359},[35,17625,17626],{"class":48},"getY",[35,17628,13384],{"class":359},[35,17630,1026],{"class":495},[35,17632,16222],{"class":359},[35,17634,17626],{"class":48},[35,17636,5970],{"class":359},[35,17638,17639,17641,17644,17646,17649,17652,17654,17656,17658,17660,17662],{"class":37,"line":2955},[35,17640,15072],{"class":495},[35,17642,17643],{"class":359}," distance ",[35,17645,544],{"class":495},[35,17647,17648],{"class":48}," sqrt",[35,17650,17651],{"class":359},"(dx ",[35,17653,949],{"class":495},[35,17655,17585],{"class":359},[35,17657,975],{"class":495},[35,17659,17615],{"class":359},[35,17661,949],{"class":495},[35,17663,17664],{"class":359}," dy);\n",[35,17666,17667,17669,17672,17674,17676,17679],{"class":37,"line":8282},[35,17668,3435],{"class":495},[35,17670,17671],{"class":359}," (distance ",[35,17673,1404],{"class":495},[35,17675,16676],{"class":359},[35,17677,17678],{"class":48},"getRadius",[35,17680,17681],{"class":359},"())\n",[35,17683,17684],{"class":37,"line":8306},[35,17685,2371],{"class":359},[35,17687,17688,17690,17692,17695,17697],{"class":37,"line":8311},[35,17689,10003],{"class":359},[35,17691,1538],{"class":495},[35,17693,17694],{"class":306}," \"点在圆内\"",[35,17696,1805],{"class":495},[35,17698,9174],{"class":359},[35,17700,17701],{"class":37,"line":8317},[35,17702,2528],{"class":359},[35,17704,17705],{"class":37,"line":8344},[35,17706,17157],{"class":495},[35,17708,17709],{"class":37,"line":8349},[35,17710,2371],{"class":359},[35,17712,17713,17715,17717,17720,17722],{"class":37,"line":8355},[35,17714,10003],{"class":359},[35,17716,1538],{"class":495},[35,17718,17719],{"class":306}," \"点在圆外\"",[35,17721,1805],{"class":495},[35,17723,9174],{"class":359},[35,17725,17726],{"class":37,"line":8367},[35,17727,2528],{"class":359},[35,17729,17730],{"class":37,"line":8379},[35,17731,1926],{"class":359},[35,17733,17734,17736,17738],{"class":37,"line":8391},[35,17735,502],{"class":495},[35,17737,2314],{"class":48},[35,17739,2317],{"class":359},[35,17741,17742],{"class":37,"line":10050},[35,17743,1907],{"class":359},[35,17745,17746],{"class":37,"line":10075},[35,17747,15387],{"class":41},[35,17749,17750],{"class":37,"line":10098},[35,17751,15134],{"class":359},[35,17753,17754],{"class":37,"line":10122},[35,17755,17756],{"class":359},"    Point p1;\n",[35,17758,17759],{"class":37,"line":10127},[35,17760,17328],{"class":41},[35,17762,17763,17765,17767,17770],{"class":37,"line":10132},[35,17764,1912],{"class":359},[35,17766,1538],{"class":495},[35,17768,17769],{"class":306},"\"请输入圆的半径：\"",[35,17771,1655],{"class":359},[35,17773,17774,17776],{"class":37,"line":10137},[35,17775,15072],{"class":495},[35,17777,17778],{"class":359}," r;\n",[35,17780,17781,17783,17785],{"class":37,"line":10146},[35,17782,2353],{"class":359},[35,17784,1790],{"class":495},[35,17786,17787],{"class":359},"r;\n",[35,17789,17790,17792,17795],{"class":37,"line":10151},[35,17791,16929],{"class":359},[35,17793,17794],{"class":48},"setRadius",[35,17796,17797],{"class":359},"(r);\n",[35,17799,17800,17802,17804,17807],{"class":37,"line":10157},[35,17801,1912],{"class":359},[35,17803,1538],{"class":495},[35,17805,17806],{"class":306},"\"请输入圆心坐标：\"",[35,17808,1655],{"class":359},[35,17810,17811,17813],{"class":37,"line":10178},[35,17812,15072],{"class":495},[35,17814,17815],{"class":359}," x, y;\n",[35,17817,17818,17820,17822,17824,17826],{"class":37,"line":10184},[35,17819,2353],{"class":359},[35,17821,1790],{"class":495},[35,17823,1314],{"class":359},[35,17825,1790],{"class":495},[35,17827,17828],{"class":359},"y;\n",[35,17830,17831,17834,17837],{"class":37,"line":10198},[35,17832,17833],{"class":359},"    p1.",[35,17835,17836],{"class":48},"setPoint",[35,17838,17839],{"class":359},"(x, y);\n",[35,17841,17842,17844,17847],{"class":37,"line":10204},[35,17843,16929],{"class":359},[35,17845,17846],{"class":48},"setCenter",[35,17848,17849],{"class":359},"(p1);\n",[35,17851,17852,17854,17856,17859],{"class":37,"line":10231},[35,17853,1912],{"class":359},[35,17855,1538],{"class":495},[35,17857,17858],{"class":306},"\"请输入测试点坐标：\"",[35,17860,1655],{"class":359},[35,17862,17863,17865],{"class":37,"line":10240},[35,17864,15072],{"class":495},[35,17866,17867],{"class":359}," x1, y1;\n",[35,17869,17870,17872,17874,17877,17879],{"class":37,"line":10246},[35,17871,2353],{"class":359},[35,17873,1790],{"class":495},[35,17875,17876],{"class":359},"x1",[35,17878,1790],{"class":495},[35,17880,17881],{"class":359},"y1;\n",[35,17883,17884],{"class":37,"line":10254},[35,17885,17886],{"class":359},"    Point p2;\n",[35,17888,17889,17892,17894],{"class":37,"line":10259},[35,17890,17891],{"class":359},"    p2.",[35,17893,17836],{"class":48},[35,17895,17896],{"class":359},"(x1, y1);\n",[35,17898,17899,17902],{"class":37,"line":16938},[35,17900,17901],{"class":48},"    isInCircle",[35,17903,17904],{"class":359},"(c1, p2);\n",[35,17906,17907],{"class":37,"line":16944},[35,17908,1926],{"class":359},[21,17910,17911],{},"在类中可以让另一个类作为本来的成员",[21,17913,17914],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[21,17916,17917],{},"创建point.h",[25,17919,17921],{"className":486,"code":17920,"language":488,"meta":30,"style":30},"#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",[32,17922,17923,17934,17940,17950,17956,17960,17965,17969,17973,17993,17997,18005,18013,18017,18021,18027,18033],{"__ignoreMap":30},[35,17924,17925,17928,17931],{"class":37,"line":38},[35,17926,17927],{"class":495},"#pragma",[35,17929,17930],{"class":48}," once",[35,17932,17933],{"class":41}," \u002F\u002F防止头文件重复包含\n",[35,17935,17936,17938],{"class":37,"line":45},[35,17937,2291],{"class":495},[35,17939,2294],{"class":306},[35,17941,17942,17944,17946,17948],{"class":37,"line":55},[35,17943,2299],{"class":495},[35,17945,2302],{"class":495},[35,17947,2305],{"class":48},[35,17949,1655],{"class":359},[35,17951,17952,17954],{"class":37,"line":65},[35,17953,15028],{"class":495},[35,17955,17315],{"class":48},[35,17957,17958],{"class":37,"line":74},[35,17959,1907],{"class":359},[35,17961,17962],{"class":37,"line":83},[35,17963,17964],{"class":41},"\u002F\u002F做好声明与变量定义就可以\n",[35,17966,17967],{"class":37,"line":92},[35,17968,15050],{"class":495},[35,17970,17971],{"class":37,"line":101},[35,17972,17328],{"class":41},[35,17974,17975,17977,17979,17981,17983,17985,17987,17989,17991],{"class":37,"line":110},[35,17976,15243],{"class":495},[35,17978,17335],{"class":48},[35,17980,499],{"class":359},[35,17982,14371],{"class":495},[35,17984,17342],{"class":5550},[35,17986,12769],{"class":359},[35,17988,14371],{"class":495},[35,17990,17349],{"class":5550},[35,17992,3053],{"class":359},[35,17994,17995],{"class":37,"line":119},[35,17996,17367],{"class":41},[35,17998,17999,18001,18003],{"class":37,"line":128},[35,18000,15072],{"class":495},[35,18002,17374],{"class":48},[35,18004,5970],{"class":359},[35,18006,18007,18009,18011],{"class":37,"line":137},[35,18008,15072],{"class":495},[35,18010,17390],{"class":48},[35,18012,5970],{"class":359},[35,18014,18015],{"class":37,"line":144},[35,18016,141],{"emptyLinePlaceholder":140},[35,18018,18019],{"class":37,"line":150},[35,18020,15556],{"class":495},[35,18022,18023,18025],{"class":37,"line":159},[35,18024,15072],{"class":495},[35,18026,17412],{"class":359},[35,18028,18029,18031],{"class":37,"line":168},[35,18030,15072],{"class":495},[35,18032,17419],{"class":359},[35,18034,18035],{"class":37,"line":177},[35,18036,4329],{"class":359},[21,18038,18039],{},"创建point.cpp",[25,18041,18043],{"className":486,"code":18042,"language":488,"meta":30,"style":30},"#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",[32,18044,18045,18052,18057,18091,18095,18111],{"__ignoreMap":30},[35,18046,18047,18049],{"class":37,"line":38},[35,18048,2291],{"class":495},[35,18050,18051],{"class":306},"\u003Cpoint.h>\n",[35,18053,18054],{"class":37,"line":45},[35,18055,18056],{"class":41},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[35,18058,18059,18061,18064,18067,18069,18071,18073,18075,18077,18079,18081,18083,18085,18087,18089],{"class":37,"line":55},[35,18060,15243],{"class":495},[35,18062,18063],{"class":48}," Point",[35,18065,18066],{"class":359},"::",[35,18068,17836],{"class":48},[35,18070,499],{"class":359},[35,18072,14371],{"class":495},[35,18074,17342],{"class":5550},[35,18076,12769],{"class":359},[35,18078,14371],{"class":495},[35,18080,17349],{"class":5550},[35,18082,17352],{"class":359},[35,18084,544],{"class":495},[35,18086,17357],{"class":359},[35,18088,544],{"class":495},[35,18090,17362],{"class":359},[35,18092,18093],{"class":37,"line":65},[35,18094,17367],{"class":41},[35,18096,18097,18099,18101,18103,18105,18107,18109],{"class":37,"line":74},[35,18098,15072],{"class":495},[35,18100,18063],{"class":48},[35,18102,18066],{"class":359},[35,18104,17598],{"class":48},[35,18106,17377],{"class":359},[35,18108,17380],{"class":495},[35,18110,17383],{"class":359},[35,18112,18113,18115,18117,18119,18121,18123,18125],{"class":37,"line":83},[35,18114,15072],{"class":495},[35,18116,18063],{"class":48},[35,18118,18066],{"class":359},[35,18120,17626],{"class":48},[35,18122,17377],{"class":359},[35,18124,17380],{"class":495},[35,18126,17397],{"class":359},[21,18128,18129],{},"创建circle.h",[25,18131,18133],{"className":486,"code":18132,"language":488,"meta":30,"style":30},"#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",[32,18134,18135,18142,18148,18158,18164,18170,18174,18178,18182,18196,18210,18214,18222,18230,18234,18238,18244,18248,18252],{"__ignoreMap":30},[35,18136,18137,18139],{"class":37,"line":38},[35,18138,17927],{"class":495},[35,18140,18141],{"class":48}," once\n",[35,18143,18144,18146],{"class":37,"line":45},[35,18145,2291],{"class":495},[35,18147,2294],{"class":306},[35,18149,18150,18152,18154,18156],{"class":37,"line":55},[35,18151,2299],{"class":495},[35,18153,2302],{"class":495},[35,18155,2305],{"class":48},[35,18157,1655],{"class":359},[35,18159,18160,18162],{"class":37,"line":65},[35,18161,2291],{"class":495},[35,18163,18051],{"class":306},[35,18165,18166,18168],{"class":37,"line":74},[35,18167,15028],{"class":495},[35,18169,15031],{"class":48},[35,18171,18172],{"class":37,"line":83},[35,18173,1907],{"class":359},[35,18175,18176],{"class":37,"line":92},[35,18177,15050],{"class":495},[35,18179,18180],{"class":37,"line":101},[35,18181,17328],{"class":41},[35,18183,18184,18186,18188,18190,18192,18194],{"class":37,"line":110},[35,18185,15243],{"class":495},[35,18187,17448],{"class":48},[35,18189,499],{"class":359},[35,18191,14371],{"class":495},[35,18193,17455],{"class":5550},[35,18195,3053],{"class":359},[35,18197,18198,18200,18202,18204,18206,18208],{"class":37,"line":119},[35,18199,15243],{"class":495},[35,18201,17470],{"class":48},[35,18203,499],{"class":359},[35,18205,17475],{"class":48},[35,18207,17478],{"class":5550},[35,18209,3053],{"class":359},[35,18211,18212],{"class":37,"line":128},[35,18213,17491],{"class":41},[35,18215,18216,18218,18220],{"class":37,"line":137},[35,18217,15072],{"class":495},[35,18219,17498],{"class":48},[35,18221,5970],{"class":359},[35,18223,18224,18226,18228],{"class":37,"line":144},[35,18225,17510],{"class":48},[35,18227,17513],{"class":48},[35,18229,5970],{"class":359},[35,18231,18232],{"class":37,"line":150},[35,18233,141],{"emptyLinePlaceholder":140},[35,18235,18236],{"class":37,"line":159},[35,18237,15556],{"class":495},[35,18239,18240,18242],{"class":37,"line":168},[35,18241,15072],{"class":495},[35,18243,15062],{"class":359},[35,18245,18246],{"class":37,"line":177},[35,18247,17539],{"class":41},[35,18249,18250],{"class":37,"line":182},[35,18251,17544],{"class":359},[35,18253,18254],{"class":37,"line":188},[35,18255,4329],{"class":359},[21,18257,18258],{},"创建circle.cpp",[25,18260,18262],{"className":486,"code":18261,"language":488,"meta":30,"style":30},"#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",[32,18263,18264,18271,18294,18316,18321,18337],{"__ignoreMap":30},[35,18265,18266,18268],{"class":37,"line":38},[35,18267,2291],{"class":495},[35,18269,18270],{"class":306},"\u003Ccircle.h>\n",[35,18272,18273,18275,18278,18280,18282,18284,18286,18288,18290,18292],{"class":37,"line":45},[35,18274,5698],{"class":495},[35,18276,18277],{"class":48}," Circle",[35,18279,18066],{"class":359},[35,18281,17794],{"class":48},[35,18283,499],{"class":359},[35,18285,14371],{"class":495},[35,18287,17455],{"class":5550},[35,18289,17458],{"class":359},[35,18291,544],{"class":495},[35,18293,17463],{"class":359},[35,18295,18296,18298,18300,18302,18304,18306,18308,18310,18312,18314],{"class":37,"line":55},[35,18297,5698],{"class":495},[35,18299,18277],{"class":48},[35,18301,18066],{"class":359},[35,18303,17846],{"class":48},[35,18305,499],{"class":359},[35,18307,17475],{"class":48},[35,18309,17478],{"class":5550},[35,18311,17481],{"class":359},[35,18313,544],{"class":495},[35,18315,17486],{"class":359},[35,18317,18318],{"class":37,"line":65},[35,18319,18320],{"class":41},"\u002F\u002F获取属性\n",[35,18322,18323,18325,18327,18329,18331,18333,18335],{"class":37,"line":74},[35,18324,14371],{"class":495},[35,18326,18277],{"class":48},[35,18328,18066],{"class":359},[35,18330,17678],{"class":48},[35,18332,17377],{"class":359},[35,18334,17380],{"class":495},[35,18336,17505],{"class":359},[35,18338,18339,18341,18343,18345,18347,18349,18351],{"class":37,"line":83},[35,18340,17475],{"class":48},[35,18342,18277],{"class":48},[35,18344,18066],{"class":359},[35,18346,17592],{"class":48},[35,18348,17377],{"class":359},[35,18350,17380],{"class":495},[35,18352,17520],{"class":359},[21,18354,18355],{},"使用封装的类",[25,18357,18359],{"className":486,"code":18358,"language":488,"meta":30,"style":30},"#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",[32,18360,18361,18367,18377,18383,18389,18413,18417,18443,18469,18493,18507,18511,18523,18527,18531,18535,18547,18551,18555,18563,18567,18571,18575,18579,18583,18593,18599,18607,18615,18625,18631,18643,18651,18659,18669,18675,18687,18691,18699,18705],{"__ignoreMap":30},[35,18362,18363,18365],{"class":37,"line":38},[35,18364,2291],{"class":495},[35,18366,2294],{"class":306},[35,18368,18369,18371,18373,18375],{"class":37,"line":45},[35,18370,2299],{"class":495},[35,18372,2302],{"class":495},[35,18374,2305],{"class":48},[35,18376,1655],{"class":359},[35,18378,18379,18381],{"class":37,"line":55},[35,18380,2291],{"class":495},[35,18382,18270],{"class":306},[35,18384,18385,18387],{"class":37,"line":65},[35,18386,2291],{"class":495},[35,18388,18051],{"class":306},[35,18390,18391,18393,18395,18397,18399,18401,18403,18405,18407,18409,18411],{"class":37,"line":74},[35,18392,5698],{"class":495},[35,18394,17555],{"class":48},[35,18396,499],{"class":359},[35,18398,17560],{"class":48},[35,18400,10918],{"class":495},[35,18402,784],{"class":5550},[35,18404,872],{"class":359},[35,18406,17475],{"class":48},[35,18408,10918],{"class":495},[35,18410,21],{"class":5550},[35,18412,505],{"class":359},[35,18414,18415],{"class":37,"line":83},[35,18416,1907],{"class":359},[35,18418,18419,18421,18423,18425,18427,18429,18431,18433,18435,18437,18439,18441],{"class":37,"line":92},[35,18420,15072],{"class":495},[35,18422,17585],{"class":359},[35,18424,544],{"class":495},[35,18426,16676],{"class":359},[35,18428,17592],{"class":48},[35,18430,17595],{"class":359},[35,18432,17598],{"class":48},[35,18434,13384],{"class":359},[35,18436,1026],{"class":495},[35,18438,16222],{"class":359},[35,18440,17598],{"class":48},[35,18442,5970],{"class":359},[35,18444,18445,18447,18449,18451,18453,18455,18457,18459,18461,18463,18465,18467],{"class":37,"line":101},[35,18446,15072],{"class":495},[35,18448,17615],{"class":359},[35,18450,544],{"class":495},[35,18452,16676],{"class":359},[35,18454,17592],{"class":48},[35,18456,17595],{"class":359},[35,18458,17626],{"class":48},[35,18460,13384],{"class":359},[35,18462,1026],{"class":495},[35,18464,16222],{"class":359},[35,18466,17626],{"class":48},[35,18468,5970],{"class":359},[35,18470,18471,18473,18475,18477,18479,18481,18483,18485,18487,18489,18491],{"class":37,"line":110},[35,18472,15072],{"class":495},[35,18474,17643],{"class":359},[35,18476,544],{"class":495},[35,18478,17648],{"class":48},[35,18480,17651],{"class":359},[35,18482,949],{"class":495},[35,18484,17585],{"class":359},[35,18486,975],{"class":495},[35,18488,17615],{"class":359},[35,18490,949],{"class":495},[35,18492,17664],{"class":359},[35,18494,18495,18497,18499,18501,18503,18505],{"class":37,"line":119},[35,18496,3435],{"class":495},[35,18498,17671],{"class":359},[35,18500,1404],{"class":495},[35,18502,16676],{"class":359},[35,18504,17678],{"class":48},[35,18506,17681],{"class":359},[35,18508,18509],{"class":37,"line":128},[35,18510,2371],{"class":359},[35,18512,18513,18515,18517,18519,18521],{"class":37,"line":137},[35,18514,10003],{"class":359},[35,18516,1538],{"class":495},[35,18518,17694],{"class":306},[35,18520,1805],{"class":495},[35,18522,9174],{"class":359},[35,18524,18525],{"class":37,"line":144},[35,18526,2528],{"class":359},[35,18528,18529],{"class":37,"line":150},[35,18530,17157],{"class":495},[35,18532,18533],{"class":37,"line":159},[35,18534,2371],{"class":359},[35,18536,18537,18539,18541,18543,18545],{"class":37,"line":168},[35,18538,10003],{"class":359},[35,18540,1538],{"class":495},[35,18542,17719],{"class":306},[35,18544,1805],{"class":495},[35,18546,9174],{"class":359},[35,18548,18549],{"class":37,"line":177},[35,18550,2528],{"class":359},[35,18552,18553],{"class":37,"line":182},[35,18554,1926],{"class":359},[35,18556,18557,18559,18561],{"class":37,"line":188},[35,18558,502],{"class":495},[35,18560,2314],{"class":48},[35,18562,2317],{"class":359},[35,18564,18565],{"class":37,"line":197},[35,18566,1907],{"class":359},[35,18568,18569],{"class":37,"line":206},[35,18570,15387],{"class":41},[35,18572,18573],{"class":37,"line":215},[35,18574,15134],{"class":359},[35,18576,18577],{"class":37,"line":224},[35,18578,17756],{"class":359},[35,18580,18581],{"class":37,"line":233},[35,18582,17328],{"class":41},[35,18584,18585,18587,18589,18591],{"class":37,"line":238},[35,18586,1912],{"class":359},[35,18588,1538],{"class":495},[35,18590,17769],{"class":306},[35,18592,1655],{"class":359},[35,18594,18595,18597],{"class":37,"line":244},[35,18596,15072],{"class":495},[35,18598,17778],{"class":359},[35,18600,18601,18603,18605],{"class":37,"line":253},[35,18602,2353],{"class":359},[35,18604,1790],{"class":495},[35,18606,17787],{"class":359},[35,18608,18609,18611,18613],{"class":37,"line":262},[35,18610,16929],{"class":359},[35,18612,17794],{"class":48},[35,18614,17797],{"class":359},[35,18616,18617,18619,18621,18623],{"class":37,"line":271},[35,18618,1912],{"class":359},[35,18620,1538],{"class":495},[35,18622,17806],{"class":306},[35,18624,1655],{"class":359},[35,18626,18627,18629],{"class":37,"line":280},[35,18628,15072],{"class":495},[35,18630,17815],{"class":359},[35,18632,18633,18635,18637,18639,18641],{"class":37,"line":289},[35,18634,2353],{"class":359},[35,18636,1790],{"class":495},[35,18638,1314],{"class":359},[35,18640,1790],{"class":495},[35,18642,17828],{"class":359},[35,18644,18645,18647,18649],{"class":37,"line":294},[35,18646,17833],{"class":359},[35,18648,17836],{"class":48},[35,18650,17839],{"class":359},[35,18652,18653,18655,18657],{"class":37,"line":300},[35,18654,16929],{"class":359},[35,18656,17846],{"class":48},[35,18658,17849],{"class":359},[35,18660,18661,18663,18665,18667],{"class":37,"line":313},[35,18662,1912],{"class":359},[35,18664,1538],{"class":495},[35,18666,17858],{"class":306},[35,18668,1655],{"class":359},[35,18670,18671,18673],{"class":37,"line":324},[35,18672,15072],{"class":495},[35,18674,17867],{"class":359},[35,18676,18677,18679,18681,18683,18685],{"class":37,"line":2955},[35,18678,2353],{"class":359},[35,18680,1790],{"class":495},[35,18682,17876],{"class":359},[35,18684,1790],{"class":495},[35,18686,17881],{"class":359},[35,18688,18689],{"class":37,"line":8282},[35,18690,17886],{"class":359},[35,18692,18693,18695,18697],{"class":37,"line":8306},[35,18694,17891],{"class":359},[35,18696,17836],{"class":48},[35,18698,17896],{"class":359},[35,18700,18701,18703],{"class":37,"line":8311},[35,18702,17901],{"class":48},[35,18704,17904],{"class":359},[35,18706,18707],{"class":37,"line":8317},[35,18708,1926],{"class":359},[438,18710,18712],{"id":18711},"_82对象的初始化清理","8.2对象的初始化清理",[1501,18714,18715,18718],{},[17,18716,18717],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[17,18719,18720],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[465,18722,18724],{"id":18723},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[21,18726,18727,18728,18731],{},"对象的",[645,18729,18730],{},"初始化和清理","也是两个非常重要的安全问题",[21,18733,18734],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[21,18736,18737],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[21,18739,18740,18741,18744,18745,18748],{},"c++利用了",[645,18742,18743],{},"构造函数","和",[645,18746,18747],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[21,18750,18751,18752],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[645,18753,18754],{},"我们不提供构造和析构，编译器会提供",[21,18756,18757],{},[645,18758,18759],{},"编译器提供的构造函数和析构函数是空实现。",[1501,18761,18762,18765],{},[17,18763,18764],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[17,18766,18767,18768,18771],{},"析构函数：主要作用在于对象",[645,18769,18770],{},"销毁前","系统自动调用，执行一些清理工作。",[21,18773,18774,18777],{},[645,18775,18776],{},"构造函数语法：",[32,18778,18779],{},"类名(){}",[14,18781,18782,18785,18788,18791,18794],{},[17,18783,18784],{},"构造函数，没有返回值也不写void",[17,18786,18787],{},"函数名称与类名相同",[17,18789,18790],{},"构造函数可以有参数，因此可以发生重载",[17,18792,18793],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[17,18795,18796,18797,923],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[32,18798,18799],{},"Person(){}",[21,18801,18802,14129,18805],{},[645,18803,18804],{},"析构函数语法：",[32,18806,18807],{},"~类名(){}",[14,18809,18810,18813,18816,18822],{},[17,18811,18812],{},"析构函数，没有返回值也不写void",[17,18814,18815],{},"函数名称与类名相同,在名称前加上符号  ~",[17,18817,18818,18819],{},"析构函数不可以有参数，因此",[645,18820,18821],{},"不可以发生重载",[17,18823,18824],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[25,18826,18828],{"className":486,"code":18827,"language":488,"meta":30,"style":30},"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",[32,18829,18830,18836,18840,18844,18849,18856,18860,18873,18877,18882,18889,18893,18906,18910,18914,18918,18922,18930,18934,18942,18946,18950,18958,18962,18967,18971,18978,18982,18995,18999,19007],{"__ignoreMap":30},[35,18831,18832,18834],{"class":37,"line":38},[35,18833,15028],{"class":495},[35,18835,15505],{"class":48},[35,18837,18838],{"class":37,"line":45},[35,18839,1907],{"class":359},[35,18841,18842],{"class":37,"line":55},[35,18843,15050],{"class":495},[35,18845,18846],{"class":37,"line":65},[35,18847,18848],{"class":41},"    \u002F\u002F构造函数\n",[35,18850,18851,18854],{"class":37,"line":74},[35,18852,18853],{"class":48},"    Person",[35,18855,2317],{"class":359},[35,18857,18858],{"class":37,"line":83},[35,18859,2371],{"class":359},[35,18861,18862,18864,18866,18869,18871],{"class":37,"line":92},[35,18863,10003],{"class":359},[35,18865,1538],{"class":495},[35,18867,18868],{"class":306}," \"Person的构造函数调用\"",[35,18870,1805],{"class":495},[35,18872,9174],{"class":359},[35,18874,18875],{"class":37,"line":101},[35,18876,2528],{"class":359},[35,18878,18879],{"class":37,"line":110},[35,18880,18881],{"class":41},"    \u002F\u002F析构函数\n",[35,18883,18884,18887],{"class":37,"line":119},[35,18885,18886],{"class":48},"    ~Person",[35,18888,2317],{"class":359},[35,18890,18891],{"class":37,"line":128},[35,18892,2371],{"class":359},[35,18894,18895,18897,18899,18902,18904],{"class":37,"line":137},[35,18896,10003],{"class":359},[35,18898,1538],{"class":495},[35,18900,18901],{"class":306}," \"Person的析构函数调用\"",[35,18903,1805],{"class":495},[35,18905,9174],{"class":359},[35,18907,18908],{"class":37,"line":144},[35,18909,2528],{"class":359},[35,18911,18912],{"class":37,"line":150},[35,18913,141],{"emptyLinePlaceholder":140},[35,18915,18916],{"class":37,"line":159},[35,18917,4329],{"class":359},[35,18919,18920],{"class":37,"line":168},[35,18921,141],{"emptyLinePlaceholder":140},[35,18923,18924,18926,18928],{"class":37,"line":177},[35,18925,5698],{"class":495},[35,18927,5922],{"class":48},[35,18929,2317],{"class":359},[35,18931,18932],{"class":37,"line":182},[35,18933,1907],{"class":359},[35,18935,18936,18939],{"class":37,"line":188},[35,18937,18938],{"class":359},"    Person p;",[35,18940,18941],{"class":41},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[35,18943,18944],{"class":37,"line":197},[35,18945,1926],{"class":359},[35,18947,18948],{"class":37,"line":206},[35,18949,141],{"emptyLinePlaceholder":140},[35,18951,18952,18954,18956],{"class":37,"line":215},[35,18953,502],{"class":495},[35,18955,2314],{"class":48},[35,18957,11187],{"class":359},[35,18959,18960],{"class":37,"line":224},[35,18961,13544],{"class":359},[35,18963,18964],{"class":37,"line":233},[35,18965,18966],{"class":41},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[35,18968,18969],{"class":37,"line":238},[35,18970,141],{"emptyLinePlaceholder":140},[35,18972,18973,18975],{"class":37,"line":244},[35,18974,18938],{"class":359},[35,18976,18977],{"class":41},"\u002F\u002F只有构造函数\n",[35,18979,18980],{"class":37,"line":253},[35,18981,141],{"emptyLinePlaceholder":140},[35,18983,18984,18986,18988,18990,18992],{"class":37,"line":262},[35,18985,2644],{"class":48},[35,18987,499],{"class":359},[35,18989,2649],{"class":306},[35,18991,6300],{"class":359},[35,18993,18994],{"class":41},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[35,18996,18997],{"class":37,"line":271},[35,18998,141],{"emptyLinePlaceholder":140},[35,19000,19001,19003,19005],{"class":37,"line":280},[35,19002,4424],{"class":495},[35,19004,4427],{"class":58},[35,19006,1655],{"class":359},[35,19008,19009],{"class":37,"line":289},[35,19010,1926],{"class":359},[21,19012,19013],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[465,19015,19017],{"id":19016},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[21,19019,19020],{},"两种分类方式：",[21,19022,19023],{},"​\t按参数分为： 有参构造和无参构造",[21,19025,19026],{},"​\t按类型分为： 普通构造和拷贝构造",[21,19028,19029],{},"三种调用方式：",[21,19031,19032],{},"​\t括号法",[21,19034,19035],{},"​\t显示法",[21,19037,19038],{},"​\t隐式转换法",[25,19040,19042],{"className":486,"code":19041,"language":488,"meta":30,"style":30},"#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",[32,19043,19044,19050,19060,19065,19070,19075,19080,19084,19092,19096,19100,19104,19110,19114,19127,19131,19143,19147,19156,19169,19173,19177,19183,19187,19200,19204,19209,19225,19229,19234,19243,19256,19260,19266,19270,19275,19283,19287,19292,19296,19304,19308,19313,19318,19323,19328,19333,19337,19342,19347,19352,19357,19361,19366,19371,19387,19399,19404,19408,19413,19418,19423,19427,19432,19446,19459,19463,19471,19475,19481,19487,19495],{"__ignoreMap":30},[35,19045,19046,19048],{"class":37,"line":38},[35,19047,2291],{"class":495},[35,19049,2294],{"class":306},[35,19051,19052,19054,19056,19058],{"class":37,"line":45},[35,19053,2299],{"class":495},[35,19055,2302],{"class":495},[35,19057,2305],{"class":48},[35,19059,1655],{"class":359},[35,19061,19062],{"class":37,"line":55},[35,19063,19064],{"class":41},"\u002F\u002F1.构造函数的分类及调用\n",[35,19066,19067],{"class":37,"line":65},[35,19068,19069],{"class":41},"\u002F\u002F分类\n",[35,19071,19072],{"class":37,"line":74},[35,19073,19074],{"class":41},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[35,19076,19077],{"class":37,"line":83},[35,19078,19079],{"class":41},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[35,19081,19082],{"class":37,"line":92},[35,19083,141],{"emptyLinePlaceholder":140},[35,19085,19086,19088,19090],{"class":37,"line":101},[35,19087,15028],{"class":495},[35,19089,15903],{"class":48},[35,19091,3008],{"class":359},[35,19093,19094],{"class":37,"line":110},[35,19095,1907],{"class":359},[35,19097,19098],{"class":37,"line":119},[35,19099,15050],{"class":495},[35,19101,19102],{"class":37,"line":128},[35,19103,18848],{"class":41},[35,19105,19106,19108],{"class":37,"line":137},[35,19107,18853],{"class":48},[35,19109,2317],{"class":359},[35,19111,19112],{"class":37,"line":144},[35,19113,2371],{"class":359},[35,19115,19116,19118,19120,19123,19125],{"class":37,"line":150},[35,19117,3785],{"class":359},[35,19119,1538],{"class":495},[35,19121,19122],{"class":306},"\"Person构造函数无参构造\"",[35,19124,1538],{"class":495},[35,19126,1560],{"class":359},[35,19128,19129],{"class":37,"line":159},[35,19130,2528],{"class":359},[35,19132,19133,19135,19137,19139,19141],{"class":37,"line":168},[35,19134,18853],{"class":48},[35,19136,499],{"class":359},[35,19138,502],{"class":495},[35,19140,1759],{"class":5550},[35,19142,505],{"class":359},[35,19144,19145],{"class":37,"line":177},[35,19146,2371],{"class":359},[35,19148,19149,19152,19154],{"class":37,"line":182},[35,19150,19151],{"class":359},"        age",[35,19153,544],{"class":495},[35,19155,6531],{"class":359},[35,19157,19158,19160,19162,19165,19167],{"class":37,"line":188},[35,19159,3785],{"class":359},[35,19161,1538],{"class":495},[35,19163,19164],{"class":306},"\"Person构造函数有参构造\"",[35,19166,1538],{"class":495},[35,19168,1560],{"class":359},[35,19170,19171],{"class":37,"line":197},[35,19172,2528],{"class":359},[35,19174,19175],{"class":37,"line":206},[35,19176,18881],{"class":41},[35,19178,19179,19181],{"class":37,"line":215},[35,19180,18886],{"class":48},[35,19182,2317],{"class":359},[35,19184,19185],{"class":37,"line":224},[35,19186,2371],{"class":359},[35,19188,19189,19191,19193,19196,19198],{"class":37,"line":233},[35,19190,3785],{"class":359},[35,19192,1538],{"class":495},[35,19194,19195],{"class":306},"\"Person析构函数被调用\"",[35,19197,1538],{"class":495},[35,19199,1560],{"class":359},[35,19201,19202],{"class":37,"line":238},[35,19203,2528],{"class":359},[35,19205,19206],{"class":37,"line":244},[35,19207,19208],{"class":41},"    \u002F\u002F拷贝构造函数\n",[35,19210,19211,19213,19215,19217,19219,19221,19223],{"class":37,"line":253},[35,19212,18853],{"class":48},[35,19214,499],{"class":359},[35,19216,7126],{"class":495},[35,19218,15903],{"class":48},[35,19220,10918],{"class":495},[35,19222,21],{"class":5550},[35,19224,505],{"class":359},[35,19226,19227],{"class":37,"line":262},[35,19228,2371],{"class":359},[35,19230,19231],{"class":37,"line":271},[35,19232,19233],{"class":41},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[35,19235,19236,19238,19240],{"class":37,"line":280},[35,19237,19151],{"class":359},[35,19239,544],{"class":495},[35,19241,19242],{"class":359},"p.age;\n",[35,19244,19245,19247,19249,19252,19254],{"class":37,"line":289},[35,19246,3785],{"class":359},[35,19248,1538],{"class":495},[35,19250,19251],{"class":306},"\"Person拷贝构造函数被调用\"",[35,19253,1538],{"class":495},[35,19255,1560],{"class":359},[35,19257,19258],{"class":37,"line":294},[35,19259,2528],{"class":359},[35,19261,19262,19264],{"class":37,"line":300},[35,19263,2326],{"class":495},[35,19265,8131],{"class":359},[35,19267,19268],{"class":37,"line":313},[35,19269,4329],{"class":359},[35,19271,19272],{"class":37,"line":324},[35,19273,19274],{"class":41},"\u002F\u002F调用\n",[35,19276,19277,19279,19281],{"class":37,"line":2955},[35,19278,5698],{"class":495},[35,19280,5922],{"class":48},[35,19282,2317],{"class":359},[35,19284,19285],{"class":37,"line":8282},[35,19286,1907],{"class":359},[35,19288,19289],{"class":37,"line":8306},[35,19290,19291],{"class":41},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[35,19293,19294],{"class":37,"line":8311},[35,19295,1926],{"class":359},[35,19297,19298,19300,19302],{"class":37,"line":8317},[35,19299,5698],{"class":495},[35,19301,5991],{"class":48},[35,19303,2317],{"class":359},[35,19305,19306],{"class":37,"line":8344},[35,19307,1907],{"class":359},[35,19309,19310],{"class":37,"line":8349},[35,19311,19312],{"class":41},"    \u002F\u002F1.括号法\n",[35,19314,19315],{"class":37,"line":8355},[35,19316,19317],{"class":41},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[35,19319,19320],{"class":37,"line":8367},[35,19321,19322],{"class":41},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[35,19324,19325],{"class":37,"line":8379},[35,19326,19327],{"class":41},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[35,19329,19330],{"class":37,"line":8391},[35,19331,19332],{"class":41},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[35,19334,19335],{"class":37,"line":10050},[35,19336,141],{"emptyLinePlaceholder":140},[35,19338,19339],{"class":37,"line":10075},[35,19340,19341],{"class":41},"    \u002F\u002F注意事项\n",[35,19343,19344],{"class":37,"line":10098},[35,19345,19346],{"class":41},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[35,19348,19349],{"class":37,"line":10122},[35,19350,19351],{"class":41},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[35,19353,19354],{"class":37,"line":10127},[35,19355,19356],{"class":41},"    \u002F\u002F Person p4();\n",[35,19358,19359],{"class":37,"line":10132},[35,19360,141],{"emptyLinePlaceholder":140},[35,19362,19363],{"class":37,"line":10137},[35,19364,19365],{"class":41},"    \u002F\u002F2.显示法\n",[35,19367,19368],{"class":37,"line":10146},[35,19369,19370],{"class":359},"    Person p1;\n",[35,19372,19373,19376,19378,19381,19383,19385],{"class":37,"line":10151},[35,19374,19375],{"class":359},"    Person p2",[35,19377,544],{"class":495},[35,19379,19380],{"class":48},"Person",[35,19382,499],{"class":359},[35,19384,940],{"class":58},[35,19386,3053],{"class":359},[35,19388,19389,19392,19394,19396],{"class":37,"line":10157},[35,19390,19391],{"class":359},"    Person p3",[35,19393,544],{"class":495},[35,19395,19380],{"class":48},[35,19397,19398],{"class":359},"(p2);\n",[35,19400,19401],{"class":37,"line":10178},[35,19402,19403],{"class":41},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[35,19405,19406],{"class":37,"line":10184},[35,19407,141],{"emptyLinePlaceholder":140},[35,19409,19410],{"class":37,"line":10198},[35,19411,19412],{"class":41},"    \u002F\u002F 注意事项2\n",[35,19414,19415],{"class":37,"line":10204},[35,19416,19417],{"class":41},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[35,19419,19420],{"class":37,"line":10231},[35,19421,19422],{"class":41},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[35,19424,19425],{"class":37,"line":10240},[35,19426,141],{"emptyLinePlaceholder":140},[35,19428,19429],{"class":37,"line":10246},[35,19430,19431],{"class":41},"    \u002F\u002F3.隐士转换法\n",[35,19433,19434,19437,19439,19441,19443],{"class":37,"line":10254},[35,19435,19436],{"class":359},"    Person p4",[35,19438,544],{"class":495},[35,19440,940],{"class":58},[35,19442,553],{"class":359},[35,19444,19445],{"class":41},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[35,19447,19448,19451,19453,19456],{"class":37,"line":10259},[35,19449,19450],{"class":359},"    Person p5",[35,19452,544],{"class":495},[35,19454,19455],{"class":359},"p4;",[35,19457,19458],{"class":41}," \u002F\u002F 这里会调用拷贝构造函数\n",[35,19460,19461],{"class":37,"line":16938},[35,19462,1926],{"class":359},[35,19464,19465,19467,19469],{"class":37,"line":16944},[35,19466,502],{"class":495},[35,19468,2314],{"class":48},[35,19470,2317],{"class":359},[35,19472,19473],{"class":37,"line":16967},[35,19474,1907],{"class":359},[35,19476,19477,19479],{"class":37,"line":16973},[35,19478,5967],{"class":48},[35,19480,5970],{"class":359},[35,19482,19483,19485],{"class":37,"line":16996},[35,19484,6036],{"class":48},[35,19486,5970],{"class":359},[35,19488,19489,19491,19493],{"class":37,"line":17010},[35,19490,4424],{"class":495},[35,19492,4427],{"class":58},[35,19494,1655],{"class":359},[35,19496,19497],{"class":37,"line":17030},[35,19498,1926],{"class":359},[21,19500,19501,19504],{},[645,19502,19503],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[465,19506,19508],{"id":19507},"_823拷贝构造函数","8.2.3拷贝构造函数",[21,19510,19511],{},"C++中拷贝构造函数调用时机通常有三种情况",[1501,19513,19514,19517,19520],{},[17,19515,19516],{},"使用一个已经创建完毕的对象来初始化一个新对象",[17,19518,19519],{},"值传递的方式给函数参数传值",[17,19521,19522],{},"以值方式返回局部对象",[25,19524,19526],{"className":486,"code":19525,"language":488,"meta":30,"style":30},"#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",[32,19527,19528,19534,19544,19548,19553,19557,19562,19567,19572,19578,19582,19586,19592,19596,19609,19613,19618,19630,19634,19642,19655,19659,19663,19679,19683,19692,19705,19709,19715,19719,19731,19735,19741,19745,19749,19757,19761,19774,19782,19800,19804,19809,19814,19829,19833,19846,19850,19858,19862,19866,19874,19878,19883,19892,19896,19900,19925,19935,19939,19947,19951,19962,19987,19991,19995,19999,20007,20011,20016,20021,20028,20033,20038,20043,20048,20052,20057,20061,20066,20070,20075,20080,20084,20088,20093,20098,20106],{"__ignoreMap":30},[35,19529,19530,19532],{"class":37,"line":38},[35,19531,2291],{"class":495},[35,19533,2294],{"class":306},[35,19535,19536,19538,19540,19542],{"class":37,"line":45},[35,19537,2299],{"class":495},[35,19539,2302],{"class":495},[35,19541,2305],{"class":48},[35,19543,1655],{"class":359},[35,19545,19546],{"class":37,"line":55},[35,19547,141],{"emptyLinePlaceholder":140},[35,19549,19550],{"class":37,"line":65},[35,19551,19552],{"class":41},"\u002F\u002F拷贝构造函数调用时机\n",[35,19554,19555],{"class":37,"line":74},[35,19556,141],{"emptyLinePlaceholder":140},[35,19558,19559],{"class":37,"line":83},[35,19560,19561],{"class":41},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[35,19563,19564],{"class":37,"line":92},[35,19565,19566],{"class":41},"\u002F\u002F2.值传递的方式给函数参数传值\n",[35,19568,19569],{"class":37,"line":101},[35,19570,19571],{"class":41},"\u002F\u002F3.以值方式返回局部对象\n",[35,19573,19574,19576],{"class":37,"line":110},[35,19575,15028],{"class":495},[35,19577,15505],{"class":48},[35,19579,19580],{"class":37,"line":119},[35,19581,1907],{"class":359},[35,19583,19584],{"class":37,"line":128},[35,19585,15050],{"class":495},[35,19587,19588,19590],{"class":37,"line":137},[35,19589,18853],{"class":48},[35,19591,2317],{"class":359},[35,19593,19594],{"class":37,"line":144},[35,19595,2371],{"class":359},[35,19597,19598,19600,19602,19605,19607],{"class":37,"line":150},[35,19599,10003],{"class":359},[35,19601,1538],{"class":495},[35,19603,19604],{"class":306}," \"Person的默认构造函数调用\"",[35,19606,1805],{"class":495},[35,19608,9174],{"class":359},[35,19610,19611],{"class":37,"line":159},[35,19612,2528],{"class":359},[35,19614,19615],{"class":37,"line":168},[35,19616,19617],{"class":41},"    \u002F\u002F有参构造\n",[35,19619,19620,19622,19624,19626,19628],{"class":37,"line":177},[35,19621,18853],{"class":48},[35,19623,499],{"class":359},[35,19625,502],{"class":495},[35,19627,16023],{"class":5550},[35,19629,505],{"class":359},[35,19631,19632],{"class":37,"line":182},[35,19633,2371],{"class":359},[35,19635,19636,19638,19640],{"class":37,"line":188},[35,19637,16077],{"class":359},[35,19639,544],{"class":495},[35,19641,8131],{"class":359},[35,19643,19644,19646,19648,19651,19653],{"class":37,"line":197},[35,19645,10003],{"class":359},[35,19647,1538],{"class":495},[35,19649,19650],{"class":306}," \"Person的有参构造函数调用\"",[35,19652,1805],{"class":495},[35,19654,9174],{"class":359},[35,19656,19657],{"class":37,"line":206},[35,19658,2528],{"class":359},[35,19660,19661],{"class":37,"line":215},[35,19662,19208],{"class":41},[35,19664,19665,19667,19669,19671,19673,19675,19677],{"class":37,"line":224},[35,19666,18853],{"class":48},[35,19668,499],{"class":359},[35,19670,7126],{"class":495},[35,19672,15903],{"class":48},[35,19674,10918],{"class":495},[35,19676,21],{"class":5550},[35,19678,505],{"class":359},[35,19680,19681],{"class":37,"line":233},[35,19682,2371],{"class":359},[35,19684,19685,19687,19689],{"class":37,"line":238},[35,19686,16077],{"class":359},[35,19688,544],{"class":495},[35,19690,19691],{"class":359}," p.m_Age;\n",[35,19693,19694,19696,19698,19701,19703],{"class":37,"line":244},[35,19695,10003],{"class":359},[35,19697,1538],{"class":495},[35,19699,19700],{"class":306}," \"Person的拷贝构造函数调用\"",[35,19702,1805],{"class":495},[35,19704,9174],{"class":359},[35,19706,19707],{"class":37,"line":253},[35,19708,2528],{"class":359},[35,19710,19711,19713],{"class":37,"line":262},[35,19712,18886],{"class":48},[35,19714,2317],{"class":359},[35,19716,19717],{"class":37,"line":271},[35,19718,2371],{"class":359},[35,19720,19721,19723,19725,19727,19729],{"class":37,"line":280},[35,19722,10003],{"class":359},[35,19724,1538],{"class":495},[35,19726,18901],{"class":306},[35,19728,1805],{"class":495},[35,19730,9174],{"class":359},[35,19732,19733],{"class":37,"line":289},[35,19734,2528],{"class":359},[35,19736,19737,19739],{"class":37,"line":294},[35,19738,2326],{"class":495},[35,19740,16000],{"class":359},[35,19742,19743],{"class":37,"line":300},[35,19744,4329],{"class":359},[35,19746,19747],{"class":37,"line":313},[35,19748,19561],{"class":41},[35,19750,19751,19753,19755],{"class":37,"line":324},[35,19752,5698],{"class":495},[35,19754,5922],{"class":48},[35,19756,2317],{"class":359},[35,19758,19759],{"class":37,"line":2955},[35,19760,1907],{"class":359},[35,19762,19763,19766,19768,19770,19772],{"class":37,"line":8282},[35,19764,19765],{"class":359},"    Person ",[35,19767,7464],{"class":48},[35,19769,499],{"class":359},[35,19771,1194],{"class":58},[35,19773,3053],{"class":359},[35,19775,19776,19778,19780],{"class":37,"line":8306},[35,19777,19765],{"class":359},[35,19779,7367],{"class":48},[35,19781,17849],{"class":359},[35,19783,19784,19786,19788,19791,19793,19796,19798],{"class":37,"line":8311},[35,19785,1912],{"class":359},[35,19787,1538],{"class":495},[35,19789,19790],{"class":306},"\"P2的年龄为：\"",[35,19792,1538],{"class":495},[35,19794,19795],{"class":359},"p2.m_Age",[35,19797,1538],{"class":495},[35,19799,1560],{"class":359},[35,19801,19802],{"class":37,"line":8317},[35,19803,1926],{"class":359},[35,19805,19806],{"class":37,"line":8344},[35,19807,19808],{"class":41},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[35,19810,19811],{"class":37,"line":8349},[35,19812,19813],{"class":41},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[35,19815,19816,19818,19821,19823,19825,19827],{"class":37,"line":8355},[35,19817,5698],{"class":495},[35,19819,19820],{"class":48}," doWork",[35,19822,499],{"class":359},[35,19824,19380],{"class":48},[35,19826,7159],{"class":5550},[35,19828,505],{"class":359},[35,19830,19831],{"class":37,"line":8367},[35,19832,1907],{"class":359},[35,19834,19835,19837,19839,19842,19844],{"class":37,"line":8379},[35,19836,6863],{"class":359},[35,19838,1538],{"class":495},[35,19840,19841],{"class":306}," \"doWork函数调用\"",[35,19843,1805],{"class":495},[35,19845,9174],{"class":359},[35,19847,19848],{"class":37,"line":8391},[35,19849,1926],{"class":359},[35,19851,19852,19854,19856],{"class":37,"line":10050},[35,19853,5698],{"class":495},[35,19855,5991],{"class":48},[35,19857,2317],{"class":359},[35,19859,19860],{"class":37,"line":10075},[35,19861,1907],{"class":359},[35,19863,19864],{"class":37,"line":10098},[35,19865,15647],{"class":359},[35,19867,19868,19871],{"class":37,"line":10122},[35,19869,19870],{"class":48},"    doWork",[35,19872,19873],{"class":359},"(p);\n",[35,19875,19876],{"class":37,"line":10127},[35,19877,1926],{"class":359},[35,19879,19880],{"class":37,"line":10132},[35,19881,19882],{"class":41},"\u002F\u002F 3.以值方式返回局部对象\n",[35,19884,19885,19887,19890],{"class":37,"line":10137},[35,19886,19380],{"class":48},[35,19888,19889],{"class":48}," doWork2",[35,19891,2317],{"class":359},[35,19893,19894],{"class":37,"line":10146},[35,19895,1907],{"class":359},[35,19897,19898],{"class":37,"line":10151},[35,19899,19370],{"class":359},[35,19901,19902,19904,19906,19908,19910,19912,19914,19916,19918,19920,19922],{"class":37,"line":10157},[35,19903,1912],{"class":359},[35,19905,1538],{"class":495},[35,19907,499],{"class":359},[35,19909,502],{"class":495},[35,19911,6852],{"class":495},[35,19913,923],{"class":359},[35,19915,847],{"class":495},[35,19917,7464],{"class":359},[35,19919,1538],{"class":495},[35,19921,1603],{"class":359},[35,19923,19924],{"class":41},"\u002F\u002F打印p1的地址\n",[35,19926,19927,19929,19932],{"class":37,"line":10178},[35,19928,4424],{"class":495},[35,19930,19931],{"class":359}," p1;",[35,19933,19934],{"class":41},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[35,19936,19937],{"class":37,"line":10184},[35,19938,1926],{"class":359},[35,19940,19941,19943,19945],{"class":37,"line":10198},[35,19942,5698],{"class":495},[35,19944,6063],{"class":48},[35,19946,2317],{"class":359},[35,19948,19949],{"class":37,"line":10204},[35,19950,1907],{"class":359},[35,19952,19953,19956,19958,19960],{"class":37,"line":10231},[35,19954,19955],{"class":359},"    Person p ",[35,19957,544],{"class":495},[35,19959,19889],{"class":48},[35,19961,5970],{"class":359},[35,19963,19964,19966,19968,19970,19972,19974,19976,19978,19980,19982,19984],{"class":37,"line":10240},[35,19965,1912],{"class":359},[35,19967,1538],{"class":495},[35,19969,499],{"class":359},[35,19971,502],{"class":495},[35,19973,6852],{"class":495},[35,19975,923],{"class":359},[35,19977,847],{"class":495},[35,19979,21],{"class":359},[35,19981,1538],{"class":495},[35,19983,1603],{"class":359},[35,19985,19986],{"class":41},"\u002F\u002F打印p的地址\n",[35,19988,19989],{"class":37,"line":10246},[35,19990,1926],{"class":359},[35,19992,19993],{"class":37,"line":10254},[35,19994,141],{"emptyLinePlaceholder":140},[35,19996,19997],{"class":37,"line":10259},[35,19998,141],{"emptyLinePlaceholder":140},[35,20000,20001,20003,20005],{"class":37,"line":16938},[35,20002,502],{"class":495},[35,20004,2314],{"class":48},[35,20006,2317],{"class":359},[35,20008,20009],{"class":37,"line":16944},[35,20010,1907],{"class":359},[35,20012,20013],{"class":37,"line":16967},[35,20014,20015],{"class":41},"    \u002F\u002F test01();\n",[35,20017,20018],{"class":37,"line":16973},[35,20019,20020],{"class":41},"    \u002F\u002F test02();\n",[35,20022,20023,20026],{"class":37,"line":16996},[35,20024,20025],{"class":48},"    test03",[35,20027,5970],{"class":359},[35,20029,20030],{"class":37,"line":17010},[35,20031,20032],{"class":41},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[35,20034,20035],{"class":37,"line":17030},[35,20036,20037],{"class":41},"\u002F\u002F 输出结果如下：\n",[35,20039,20040],{"class":37,"line":17036},[35,20041,20042],{"class":41},"\u002F\u002F Person的默认构造函数调用\n",[35,20044,20045],{"class":37,"line":17047},[35,20046,20047],{"class":41},"\u002F\u002F 0x7fffffffceec\n",[35,20049,20050],{"class":37,"line":17070},[35,20051,20047],{"class":41},[35,20053,20054],{"class":37,"line":17092},[35,20055,20056],{"class":41},"\u002F\u002F Person的析构函数调用\n",[35,20058,20059],{"class":37,"line":17097},[35,20060,141],{"emptyLinePlaceholder":140},[35,20062,20063],{"class":37,"line":17103},[35,20064,20065],{"class":41},"\u002F\u002F 之前的输出结果如下：\n",[35,20067,20068],{"class":37,"line":17117},[35,20069,20042],{"class":41},[35,20071,20072],{"class":37,"line":17130},[35,20073,20074],{"class":41},"\u002F\u002F 地址\n",[35,20076,20077],{"class":37,"line":17135},[35,20078,20079],{"class":41},"\u002F\u002F Person的拷贝构造函数调用\n",[35,20081,20082],{"class":37,"line":17149},[35,20083,20056],{"class":41},[35,20085,20086],{"class":37,"line":17154},[35,20087,20074],{"class":41},[35,20089,20090],{"class":37,"line":17160},[35,20091,20092],{"class":41},"\u002F\u002F (这两次输出的地址也是不同的) \n",[35,20094,20095],{"class":37,"line":17165},[35,20096,20097],{"class":41},"\u002F\u002F Person的析构函数调用     \n",[35,20099,20100,20102,20104],{"class":37,"line":17179},[35,20101,4424],{"class":495},[35,20103,4427],{"class":58},[35,20105,1655],{"class":359},[35,20107,20108],{"class":37,"line":17184},[35,20109,1926],{"class":359},[21,20111,20112],{},"简化版理解",[25,20114,20116],{"className":486,"code":20115,"language":488,"meta":30,"style":30},"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",[32,20117,20118,20126,20130,20136,20149,20160,20164,20176,20189,20197,20201,20217,20230,20239,20243,20248,20254,20267,20271,20275,20282,20286,20290,20295,20303,20307,20323,20336,20349,20353,20358,20366,20370,20374,20379,20384,20400,20408,20415,20421,20425,20429,20434,20442,20446,20450,20473,20480,20484,20488,20496,20500,20510,20532,20536,20540,20544,20552,20556,20561,20566,20572,20576,20586,20590,20598],{"__ignoreMap":30},[35,20119,20120,20122,20124],{"class":37,"line":38},[35,20121,15028],{"class":495},[35,20123,15903],{"class":48},[35,20125,15906],{"class":359},[35,20127,20128],{"class":37,"line":45},[35,20129,15050],{"class":495},[35,20131,20132,20134],{"class":37,"line":55},[35,20133,18853],{"class":48},[35,20135,11187],{"class":359},[35,20137,20138,20140,20142,20145,20147],{"class":37,"line":65},[35,20139,10003],{"class":359},[35,20141,1538],{"class":495},[35,20143,20144],{"class":306}," \"无参构造函数!\"",[35,20146,1805],{"class":495},[35,20148,9174],{"class":359},[35,20150,20151,20154,20156,20158],{"class":37,"line":74},[35,20152,20153],{"class":359},"        mAge ",[35,20155,544],{"class":495},[35,20157,4427],{"class":58},[35,20159,1655],{"class":359},[35,20161,20162],{"class":37,"line":83},[35,20163,2528],{"class":359},[35,20165,20166,20168,20170,20172,20174],{"class":37,"line":92},[35,20167,18853],{"class":48},[35,20169,499],{"class":359},[35,20171,502],{"class":495},[35,20173,16023],{"class":5550},[35,20175,12776],{"class":359},[35,20177,20178,20180,20182,20185,20187],{"class":37,"line":101},[35,20179,10003],{"class":359},[35,20181,1538],{"class":495},[35,20183,20184],{"class":306}," \"有参构造函数!\"",[35,20186,1805],{"class":495},[35,20188,9174],{"class":359},[35,20190,20191,20193,20195],{"class":37,"line":110},[35,20192,20153],{"class":359},[35,20194,544],{"class":495},[35,20196,8131],{"class":359},[35,20198,20199],{"class":37,"line":119},[35,20200,2528],{"class":359},[35,20202,20203,20205,20207,20209,20211,20213,20215],{"class":37,"line":128},[35,20204,18853],{"class":48},[35,20206,499],{"class":359},[35,20208,7126],{"class":495},[35,20210,15903],{"class":48},[35,20212,847],{"class":495},[35,20214,7159],{"class":5550},[35,20216,12776],{"class":359},[35,20218,20219,20221,20223,20226,20228],{"class":37,"line":137},[35,20220,10003],{"class":359},[35,20222,1538],{"class":495},[35,20224,20225],{"class":306}," \"拷贝构造函数!\"",[35,20227,1805],{"class":495},[35,20229,9174],{"class":359},[35,20231,20232,20234,20236],{"class":37,"line":144},[35,20233,20153],{"class":359},[35,20235,544],{"class":495},[35,20237,20238],{"class":359}," p.mAge;\n",[35,20240,20241],{"class":37,"line":150},[35,20242,2528],{"class":359},[35,20244,20245],{"class":37,"line":159},[35,20246,20247],{"class":41},"    \u002F\u002F析构函数在释放内存之前调用\n",[35,20249,20250,20252],{"class":37,"line":168},[35,20251,18886],{"class":48},[35,20253,11187],{"class":359},[35,20255,20256,20258,20260,20263,20265],{"class":37,"line":177},[35,20257,10003],{"class":359},[35,20259,1538],{"class":495},[35,20261,20262],{"class":306}," \"析构函数!\"",[35,20264,1805],{"class":495},[35,20266,9174],{"class":359},[35,20268,20269],{"class":37,"line":182},[35,20270,2528],{"class":359},[35,20272,20273],{"class":37,"line":188},[35,20274,15050],{"class":495},[35,20276,20277,20279],{"class":37,"line":197},[35,20278,2326],{"class":495},[35,20280,20281],{"class":359}," mAge;\n",[35,20283,20284],{"class":37,"line":206},[35,20285,4329],{"class":359},[35,20287,20288],{"class":37,"line":215},[35,20289,141],{"emptyLinePlaceholder":140},[35,20291,20292],{"class":37,"line":224},[35,20293,20294],{"class":41},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[35,20296,20297,20299,20301],{"class":37,"line":233},[35,20298,5698],{"class":495},[35,20300,5922],{"class":48},[35,20302,11187],{"class":359},[35,20304,20305],{"class":37,"line":238},[35,20306,141],{"emptyLinePlaceholder":140},[35,20308,20309,20311,20314,20316,20318,20320],{"class":37,"line":244},[35,20310,19765],{"class":359},[35,20312,20313],{"class":48},"man",[35,20315,499],{"class":359},[35,20317,807],{"class":58},[35,20319,6300],{"class":359},[35,20321,20322],{"class":41}," \u002F\u002Fp对象已经创建完毕\n",[35,20324,20325,20327,20330,20333],{"class":37,"line":253},[35,20326,19765],{"class":359},[35,20328,20329],{"class":48},"newman",[35,20331,20332],{"class":359},"(man);",[35,20334,20335],{"class":41}," \u002F\u002F调用拷贝构造函数\n",[35,20337,20338,20341,20343,20346],{"class":37,"line":262},[35,20339,20340],{"class":359},"    Person newman2 ",[35,20342,544],{"class":495},[35,20344,20345],{"class":359}," man;",[35,20347,20348],{"class":41}," \u002F\u002F拷贝构造\n",[35,20350,20351],{"class":37,"line":271},[35,20352,141],{"emptyLinePlaceholder":140},[35,20354,20355],{"class":37,"line":280},[35,20356,20357],{"class":41},"    \u002F\u002FPerson newman3;\n",[35,20359,20360,20363],{"class":37,"line":289},[35,20361,20362],{"class":41},"    \u002F\u002Fnewman3 = man;",[35,20364,20365],{"class":41}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[35,20367,20368],{"class":37,"line":294},[35,20369,1926],{"class":359},[35,20371,20372],{"class":37,"line":300},[35,20373,141],{"emptyLinePlaceholder":140},[35,20375,20376],{"class":37,"line":313},[35,20377,20378],{"class":41},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[35,20380,20381],{"class":37,"line":324},[35,20382,20383],{"class":41},"\u002F\u002F相当于Person p1 = p;\n",[35,20385,20386,20388,20390,20392,20394,20397],{"class":37,"line":2955},[35,20387,5698],{"class":495},[35,20389,19820],{"class":48},[35,20391,499],{"class":359},[35,20393,19380],{"class":48},[35,20395,20396],{"class":5550}," p1",[35,20398,20399],{"class":359},") {}\n",[35,20401,20402,20404,20406],{"class":37,"line":8282},[35,20403,5698],{"class":495},[35,20405,5991],{"class":48},[35,20407,11187],{"class":359},[35,20409,20410,20412],{"class":37,"line":8306},[35,20411,18938],{"class":359},[35,20413,20414],{"class":41}," \u002F\u002F无参构造函数\n",[35,20416,20417,20419],{"class":37,"line":8311},[35,20418,19870],{"class":48},[35,20420,19873],{"class":359},[35,20422,20423],{"class":37,"line":8317},[35,20424,1926],{"class":359},[35,20426,20427],{"class":37,"line":8344},[35,20428,141],{"emptyLinePlaceholder":140},[35,20430,20431],{"class":37,"line":8349},[35,20432,20433],{"class":41},"\u002F\u002F3. 以值方式返回局部对象\n",[35,20435,20436,20438,20440],{"class":37,"line":8355},[35,20437,19380],{"class":48},[35,20439,19889],{"class":48},[35,20441,2317],{"class":359},[35,20443,20444],{"class":37,"line":8367},[35,20445,1907],{"class":359},[35,20447,20448],{"class":37,"line":8379},[35,20449,19370],{"class":359},[35,20451,20452,20454,20456,20458,20460,20462,20464,20466,20469,20471],{"class":37,"line":8391},[35,20453,6863],{"class":359},[35,20455,1538],{"class":495},[35,20457,2012],{"class":359},[35,20459,502],{"class":495},[35,20461,6852],{"class":495},[35,20463,923],{"class":359},[35,20465,847],{"class":495},[35,20467,20468],{"class":359},"p1 ",[35,20470,1538],{"class":495},[35,20472,9174],{"class":359},[35,20474,20475,20477],{"class":37,"line":10050},[35,20476,4424],{"class":495},[35,20478,20479],{"class":359}," p1;\n",[35,20481,20482],{"class":37,"line":10075},[35,20483,1926],{"class":359},[35,20485,20486],{"class":37,"line":10098},[35,20487,141],{"emptyLinePlaceholder":140},[35,20489,20490,20492,20494],{"class":37,"line":10122},[35,20491,5698],{"class":495},[35,20493,6063],{"class":48},[35,20495,2317],{"class":359},[35,20497,20498],{"class":37,"line":10127},[35,20499,1907],{"class":359},[35,20501,20502,20504,20506,20508],{"class":37,"line":10132},[35,20503,19955],{"class":359},[35,20505,544],{"class":495},[35,20507,19889],{"class":48},[35,20509,5970],{"class":359},[35,20511,20512,20514,20516,20518,20520,20522,20524,20526,20528,20530],{"class":37,"line":10137},[35,20513,6863],{"class":359},[35,20515,1538],{"class":495},[35,20517,2012],{"class":359},[35,20519,502],{"class":495},[35,20521,6852],{"class":495},[35,20523,923],{"class":359},[35,20525,847],{"class":495},[35,20527,11782],{"class":359},[35,20529,1538],{"class":495},[35,20531,9174],{"class":359},[35,20533,20534],{"class":37,"line":10146},[35,20535,1926],{"class":359},[35,20537,20538],{"class":37,"line":10151},[35,20539,141],{"emptyLinePlaceholder":140},[35,20541,20542],{"class":37,"line":10157},[35,20543,141],{"emptyLinePlaceholder":140},[35,20545,20546,20548,20550],{"class":37,"line":10178},[35,20547,502],{"class":495},[35,20549,2314],{"class":48},[35,20551,11187],{"class":359},[35,20553,20554],{"class":37,"line":10184},[35,20555,141],{"emptyLinePlaceholder":140},[35,20557,20558],{"class":37,"line":10198},[35,20559,20560],{"class":41},"    \u002F\u002Ftest01();\n",[35,20562,20563],{"class":37,"line":10204},[35,20564,20565],{"class":41},"    \u002F\u002Ftest02();\n",[35,20567,20568,20570],{"class":37,"line":10231},[35,20569,20025],{"class":48},[35,20571,5970],{"class":359},[35,20573,20574],{"class":37,"line":10240},[35,20575,141],{"emptyLinePlaceholder":140},[35,20577,20578,20580,20582,20584],{"class":37,"line":10246},[35,20579,2644],{"class":48},[35,20581,499],{"class":359},[35,20583,2649],{"class":306},[35,20585,3053],{"class":359},[35,20587,20588],{"class":37,"line":10254},[35,20589,141],{"emptyLinePlaceholder":140},[35,20591,20592,20594,20596],{"class":37,"line":10259},[35,20593,4424],{"class":495},[35,20595,4427],{"class":58},[35,20597,1655],{"class":359},[35,20599,20600],{"class":37,"line":16938},[35,20601,1926],{"class":359},[465,20603,20605],{"id":20604},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[21,20607,20608],{},"默认情况下，c++编译器至少给一个类添加3个函数",[21,20610,20611],{},"1．默认构造函数(无参，函数体为空)",[21,20613,20614],{},"2．默认析构函数(无参，函数体为空)",[21,20616,20617],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[21,20619,20620],{},"构造函数调用规则如下：",[1501,20622,20623,20626],{},[17,20624,20625],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[17,20627,20628],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[25,20630,20632],{"className":486,"code":20631,"language":488,"meta":30,"style":30},"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",[32,20633,20634,20642,20646,20651,20657,20669,20673,20678,20690,20699,20711,20715,20719,20735,20744,20756,20760,20764,20770,20782,20786,20790,20796,20800,20804,20812,20816,20828,20833,20841,20845,20863,20867,20871,20879,20883,20888,20896,20911,20924,20928,20933,20940,20956,20969,20973,20977,20985,20989,20995,20999,21009,21013,21021],{"__ignoreMap":30},[35,20635,20636,20638,20640],{"class":37,"line":38},[35,20637,15028],{"class":495},[35,20639,15903],{"class":48},[35,20641,15906],{"class":359},[35,20643,20644],{"class":37,"line":45},[35,20645,15050],{"class":495},[35,20647,20648],{"class":37,"line":55},[35,20649,20650],{"class":41},"    \u002F\u002F无参（默认）构造函数\n",[35,20652,20653,20655],{"class":37,"line":65},[35,20654,18853],{"class":48},[35,20656,11187],{"class":359},[35,20658,20659,20661,20663,20665,20667],{"class":37,"line":74},[35,20660,10003],{"class":359},[35,20662,1538],{"class":495},[35,20664,20144],{"class":306},[35,20666,1805],{"class":495},[35,20668,9174],{"class":359},[35,20670,20671],{"class":37,"line":83},[35,20672,2528],{"class":359},[35,20674,20675],{"class":37,"line":92},[35,20676,20677],{"class":41},"    \u002F\u002F有参构造函数\n",[35,20679,20680,20682,20684,20686,20688],{"class":37,"line":101},[35,20681,18853],{"class":48},[35,20683,499],{"class":359},[35,20685,502],{"class":495},[35,20687,1759],{"class":5550},[35,20689,12776],{"class":359},[35,20691,20692,20695,20697],{"class":37,"line":110},[35,20693,20694],{"class":359},"        age ",[35,20696,544],{"class":495},[35,20698,1793],{"class":359},[35,20700,20701,20703,20705,20707,20709],{"class":37,"line":119},[35,20702,10003],{"class":359},[35,20704,1538],{"class":495},[35,20706,20184],{"class":306},[35,20708,1805],{"class":495},[35,20710,9174],{"class":359},[35,20712,20713],{"class":37,"line":128},[35,20714,2528],{"class":359},[35,20716,20717],{"class":37,"line":137},[35,20718,19208],{"class":41},[35,20720,20721,20723,20725,20727,20729,20731,20733],{"class":37,"line":144},[35,20722,18853],{"class":48},[35,20724,499],{"class":359},[35,20726,7126],{"class":495},[35,20728,15903],{"class":48},[35,20730,847],{"class":495},[35,20732,7159],{"class":5550},[35,20734,12776],{"class":359},[35,20736,20737,20739,20741],{"class":37,"line":150},[35,20738,20694],{"class":359},[35,20740,544],{"class":495},[35,20742,20743],{"class":359}," p.age;\n",[35,20745,20746,20748,20750,20752,20754],{"class":37,"line":159},[35,20747,10003],{"class":359},[35,20749,1538],{"class":495},[35,20751,20225],{"class":306},[35,20753,1805],{"class":495},[35,20755,9174],{"class":359},[35,20757,20758],{"class":37,"line":168},[35,20759,2528],{"class":359},[35,20761,20762],{"class":37,"line":177},[35,20763,18881],{"class":41},[35,20765,20766,20768],{"class":37,"line":182},[35,20767,18886],{"class":48},[35,20769,11187],{"class":359},[35,20771,20772,20774,20776,20778,20780],{"class":37,"line":188},[35,20773,10003],{"class":359},[35,20775,1538],{"class":495},[35,20777,20262],{"class":306},[35,20779,1805],{"class":495},[35,20781,9174],{"class":359},[35,20783,20784],{"class":37,"line":197},[35,20785,2528],{"class":359},[35,20787,20788],{"class":37,"line":206},[35,20789,15050],{"class":495},[35,20791,20792,20794],{"class":37,"line":215},[35,20793,2326],{"class":495},[35,20795,8131],{"class":359},[35,20797,20798],{"class":37,"line":224},[35,20799,4329],{"class":359},[35,20801,20802],{"class":37,"line":233},[35,20803,141],{"emptyLinePlaceholder":140},[35,20805,20806,20808,20810],{"class":37,"line":238},[35,20807,5698],{"class":495},[35,20809,5922],{"class":48},[35,20811,2317],{"class":359},[35,20813,20814],{"class":37,"line":244},[35,20815,1907],{"class":359},[35,20817,20818,20820,20822,20824,20826],{"class":37,"line":253},[35,20819,19765],{"class":359},[35,20821,7464],{"class":48},[35,20823,499],{"class":359},[35,20825,1144],{"class":58},[35,20827,3053],{"class":359},[35,20829,20830],{"class":37,"line":262},[35,20831,20832],{"class":41},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[35,20834,20835,20837,20839],{"class":37,"line":271},[35,20836,19765],{"class":359},[35,20838,7367],{"class":48},[35,20840,17849],{"class":359},[35,20842,20843],{"class":37,"line":280},[35,20844,141],{"emptyLinePlaceholder":140},[35,20846,20847,20849,20851,20854,20856,20859,20861],{"class":37,"line":289},[35,20848,6863],{"class":359},[35,20850,1538],{"class":495},[35,20852,20853],{"class":306}," \"p2的年龄为： \"",[35,20855,1805],{"class":495},[35,20857,20858],{"class":359}," p2.age ",[35,20860,1538],{"class":495},[35,20862,9174],{"class":359},[35,20864,20865],{"class":37,"line":294},[35,20866,1926],{"class":359},[35,20868,20869],{"class":37,"line":300},[35,20870,141],{"emptyLinePlaceholder":140},[35,20872,20873,20875,20877],{"class":37,"line":313},[35,20874,5698],{"class":495},[35,20876,5991],{"class":48},[35,20878,2317],{"class":359},[35,20880,20881],{"class":37,"line":324},[35,20882,1907],{"class":359},[35,20884,20885],{"class":37,"line":2955},[35,20886,20887],{"class":41},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[35,20889,20890,20893],{"class":37,"line":8282},[35,20891,20892],{"class":359},"    Person p1;",[35,20894,20895],{"class":41}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[35,20897,20898,20900,20902,20904,20906,20908],{"class":37,"line":8306},[35,20899,19765],{"class":359},[35,20901,7367],{"class":48},[35,20903,499],{"class":359},[35,20905,940],{"class":58},[35,20907,6300],{"class":359},[35,20909,20910],{"class":41}," \u002F\u002F用户提供的有参\n",[35,20912,20913,20915,20918,20921],{"class":37,"line":8311},[35,20914,19765],{"class":359},[35,20916,20917],{"class":48},"p3",[35,20919,20920],{"class":359},"(p2);",[35,20922,20923],{"class":41}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[35,20925,20926],{"class":37,"line":8317},[35,20927,141],{"emptyLinePlaceholder":140},[35,20929,20930],{"class":37,"line":8344},[35,20931,20932],{"class":41},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[35,20934,20935,20938],{"class":37,"line":8349},[35,20936,20937],{"class":359},"    Person p4;",[35,20939,20895],{"class":41},[35,20941,20942,20944,20947,20949,20951,20953],{"class":37,"line":8355},[35,20943,19765],{"class":359},[35,20945,20946],{"class":48},"p5",[35,20948,499],{"class":359},[35,20950,940],{"class":58},[35,20952,6300],{"class":359},[35,20954,20955],{"class":41}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[35,20957,20958,20960,20963,20966],{"class":37,"line":8367},[35,20959,19765],{"class":359},[35,20961,20962],{"class":48},"p6",[35,20964,20965],{"class":359},"(p5);",[35,20967,20968],{"class":41}," \u002F\u002F用户自己提供拷贝构造\n",[35,20970,20971],{"class":37,"line":8379},[35,20972,1926],{"class":359},[35,20974,20975],{"class":37,"line":8391},[35,20976,141],{"emptyLinePlaceholder":140},[35,20978,20979,20981,20983],{"class":37,"line":10050},[35,20980,502],{"class":495},[35,20982,2314],{"class":48},[35,20984,11187],{"class":359},[35,20986,20987],{"class":37,"line":10075},[35,20988,141],{"emptyLinePlaceholder":140},[35,20990,20991,20993],{"class":37,"line":10098},[35,20992,5967],{"class":48},[35,20994,5970],{"class":359},[35,20996,20997],{"class":37,"line":10122},[35,20998,141],{"emptyLinePlaceholder":140},[35,21000,21001,21003,21005,21007],{"class":37,"line":10127},[35,21002,2644],{"class":48},[35,21004,499],{"class":359},[35,21006,2649],{"class":306},[35,21008,3053],{"class":359},[35,21010,21011],{"class":37,"line":10132},[35,21012,141],{"emptyLinePlaceholder":140},[35,21014,21015,21017,21019],{"class":37,"line":10137},[35,21016,4424],{"class":495},[35,21018,4427],{"class":58},[35,21020,1655],{"class":359},[35,21022,21023],{"class":37,"line":10146},[35,21024,1926],{"class":359},[465,21026,21028],{"id":21027},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[21,21030,21031],{},"浅拷贝：简单的赋值拷贝操作",[21,21033,21034],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[25,21036,21038],{"className":486,"code":21037,"language":488,"meta":30,"style":30},"#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",[32,21039,21040,21046,21056,21062,21066,21070,21075,21081,21085,21098,21102,21106,21113,21117,21127,21142,21155,21159,21164,21169,21185,21189,21202,21207,21212,21217,21226,21231,21246,21250,21254,21258,21264,21268,21273,21288,21292,21303,21317,21321,21330,21334,21340,21352,21356,21364,21368,21385,21416,21424,21452,21456,21460,21468,21472,21478],{"__ignoreMap":30},[35,21041,21042,21044],{"class":37,"line":38},[35,21043,2291],{"class":495},[35,21045,2294],{"class":306},[35,21047,21048,21050,21052,21054],{"class":37,"line":45},[35,21049,2299],{"class":495},[35,21051,2302],{"class":495},[35,21053,2305],{"class":48},[35,21055,1655],{"class":359},[35,21057,21058,21060],{"class":37,"line":55},[35,21059,15028],{"class":495},[35,21061,15505],{"class":48},[35,21063,21064],{"class":37,"line":65},[35,21065,1907],{"class":359},[35,21067,21068],{"class":37,"line":74},[35,21069,15050],{"class":495},[35,21071,21072],{"class":37,"line":83},[35,21073,21074],{"class":41},"    \u002F\u002F默认构造函数\n",[35,21076,21077,21079],{"class":37,"line":92},[35,21078,18853],{"class":48},[35,21080,2317],{"class":359},[35,21082,21083],{"class":37,"line":101},[35,21084,2371],{"class":359},[35,21086,21087,21089,21091,21094,21096],{"class":37,"line":110},[35,21088,3785],{"class":359},[35,21090,1538],{"class":495},[35,21092,21093],{"class":306},"\"默认构造函数\"",[35,21095,1538],{"class":495},[35,21097,1560],{"class":359},[35,21099,21100],{"class":37,"line":119},[35,21101,2528],{"class":359},[35,21103,21104],{"class":37,"line":128},[35,21105,20677],{"class":41},[35,21107,21108,21110],{"class":37,"line":137},[35,21109,18886],{"class":48},[35,21111,21112],{"class":359},"(int age,int height)\n",[35,21114,21115],{"class":37,"line":144},[35,21116,2371],{"class":359},[35,21118,21119,21122,21124],{"class":37,"line":150},[35,21120,21121],{"class":359},"        m_Age",[35,21123,544],{"class":495},[35,21125,21126],{"class":359},"age;\n",[35,21128,21129,21132,21134,21136,21139],{"class":37,"line":159},[35,21130,21131],{"class":359},"        m_Height",[35,21133,12051],{"class":495},[35,21135,2723],{"class":495},[35,21137,21138],{"class":359},"(height);",[35,21140,21141],{"class":41},"\u002F\u002F放到堆区\n",[35,21143,21144,21146,21148,21151,21153],{"class":37,"line":168},[35,21145,3785],{"class":359},[35,21147,1538],{"class":495},[35,21149,21150],{"class":306},"\"有参构造函数\"",[35,21152,1538],{"class":495},[35,21154,1560],{"class":359},[35,21156,21157],{"class":37,"line":177},[35,21158,2528],{"class":359},[35,21160,21161],{"class":37,"line":182},[35,21162,21163],{"class":41},"    \u002F\u002F深拷贝解决上述问题\n",[35,21165,21166],{"class":37,"line":188},[35,21167,21168],{"class":41},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[35,21170,21171,21173,21175,21177,21179,21181,21183],{"class":37,"line":197},[35,21172,18853],{"class":48},[35,21174,499],{"class":359},[35,21176,7126],{"class":495},[35,21178,15903],{"class":48},[35,21180,10918],{"class":495},[35,21182,21],{"class":5550},[35,21184,505],{"class":359},[35,21186,21187],{"class":37,"line":206},[35,21188,2371],{"class":359},[35,21190,21191,21193,21195,21198,21200],{"class":37,"line":215},[35,21192,3785],{"class":359},[35,21194,1538],{"class":495},[35,21196,21197],{"class":306},"\"拷贝构造函数\"",[35,21199,1538],{"class":495},[35,21201,1560],{"class":359},[35,21203,21204],{"class":37,"line":224},[35,21205,21206],{"class":41},"        \u002F\u002F编译器默认的写如下注释部分\n",[35,21208,21209],{"class":37,"line":233},[35,21210,21211],{"class":41},"        \u002F\u002Fm_Age=p.m_Age;\n",[35,21213,21214],{"class":37,"line":238},[35,21215,21216],{"class":41},"        \u002F\u002Fm_Height=p.m_Height;\n",[35,21218,21219,21221,21223],{"class":37,"line":244},[35,21220,21121],{"class":359},[35,21222,544],{"class":495},[35,21224,21225],{"class":359},"p.m_Age;\n",[35,21227,21228],{"class":37,"line":253},[35,21229,21230],{"class":41},"        \u002F\u002F深拷贝操作\n",[35,21232,21233,21235,21237,21239,21241,21243],{"class":37,"line":262},[35,21234,21131],{"class":359},[35,21236,12051],{"class":495},[35,21238,2723],{"class":495},[35,21240,499],{"class":359},[35,21242,949],{"class":495},[35,21244,21245],{"class":359},"p.m_Height);\n",[35,21247,21248],{"class":37,"line":271},[35,21249,2528],{"class":359},[35,21251,21252],{"class":37,"line":280},[35,21253,141],{"emptyLinePlaceholder":140},[35,21255,21256],{"class":37,"line":289},[35,21257,18881],{"class":41},[35,21259,21260,21262],{"class":37,"line":294},[35,21261,18886],{"class":48},[35,21263,2317],{"class":359},[35,21265,21266],{"class":37,"line":300},[35,21267,2371],{"class":359},[35,21269,21270],{"class":37,"line":313},[35,21271,21272],{"class":41},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[35,21274,21275,21277,21280,21283,21286],{"class":37,"line":324},[35,21276,2837],{"class":495},[35,21278,21279],{"class":359},"(m_Height ",[35,21281,21282],{"class":495},"!=",[35,21284,21285],{"class":58}," NULL",[35,21287,505],{"class":359},[35,21289,21290],{"class":37,"line":2955},[35,21291,2850],{"class":359},[35,21293,21294,21297,21300],{"class":37,"line":8282},[35,21295,21296],{"class":495},"            delete",[35,21298,21299],{"class":359}," m_Height;",[35,21301,21302],{"class":41}," \u002F\u002F释放堆区内存\n",[35,21304,21305,21308,21310,21312,21314],{"class":37,"line":8306},[35,21306,21307],{"class":359},"            m_Height",[35,21309,544],{"class":495},[35,21311,2733],{"class":58},[35,21313,553],{"class":359},[35,21315,21316],{"class":41}," \u002F\u002F防止野指针\n",[35,21318,21319],{"class":37,"line":8311},[35,21320,2869],{"class":359},[35,21322,21323,21325,21327],{"class":37,"line":8317},[35,21324,3785],{"class":359},[35,21326,1538],{"class":495},[35,21328,21329],{"class":306},"\"Person的析构函数调用\"\n",[35,21331,21332],{"class":37,"line":8344},[35,21333,2528],{"class":359},[35,21335,21336,21338],{"class":37,"line":8349},[35,21337,2326],{"class":495},[35,21339,16000],{"class":359},[35,21341,21342,21344,21346,21349],{"class":37,"line":8355},[35,21343,2326],{"class":495},[35,21345,6852],{"class":495},[35,21347,21348],{"class":359},"m_Height;",[35,21350,21351],{"class":41}," \u002F\u002F定义一个指针，指向身高\n",[35,21353,21354],{"class":37,"line":8367},[35,21355,4329],{"class":359},[35,21357,21358,21360,21362],{"class":37,"line":8379},[35,21359,5698],{"class":495},[35,21361,5922],{"class":48},[35,21363,2317],{"class":359},[35,21365,21366],{"class":37,"line":8391},[35,21367,1907],{"class":359},[35,21369,21370,21372,21374,21376,21378,21380,21383],{"class":37,"line":10050},[35,21371,19765],{"class":359},[35,21373,7464],{"class":48},[35,21375,499],{"class":359},[35,21377,1144],{"class":58},[35,21379,872],{"class":359},[35,21381,21382],{"class":58},"160",[35,21384,3053],{"class":359},[35,21386,21387,21389,21391,21394,21396,21399,21401,21404,21406,21409,21411,21413],{"class":37,"line":10075},[35,21388,1912],{"class":359},[35,21390,1538],{"class":495},[35,21392,21393],{"class":306},"\"p1的年龄为:\"",[35,21395,1538],{"class":495},[35,21397,21398],{"class":359},"p1.m_Age",[35,21400,1538],{"class":495},[35,21402,21403],{"class":306},"\"身高为：\"",[35,21405,6753],{"class":495},[35,21407,21408],{"class":359},"p1.m_Height",[35,21410,1538],{"class":495},[35,21412,1603],{"class":359},[35,21414,21415],{"class":41},"  \u002F\u002F18\n",[35,21417,21418,21420,21422],{"class":37,"line":10098},[35,21419,19765],{"class":359},[35,21421,7367],{"class":48},[35,21423,17849],{"class":359},[35,21425,21426,21428,21430,21433,21435,21437,21439,21441,21443,21446,21448,21450],{"class":37,"line":10122},[35,21427,1912],{"class":359},[35,21429,1538],{"class":495},[35,21431,21432],{"class":306},"\"p2的年龄为：\"",[35,21434,1538],{"class":495},[35,21436,19795],{"class":359},[35,21438,1538],{"class":495},[35,21440,21403],{"class":306},[35,21442,6753],{"class":495},[35,21444,21445],{"class":359},"p2.m_Height",[35,21447,1538],{"class":495},[35,21449,1603],{"class":359},[35,21451,21415],{"class":41},[35,21453,21454],{"class":37,"line":10127},[35,21455,13544],{"class":359},[35,21457,21458],{"class":37,"line":10132},[35,21459,1926],{"class":359},[35,21461,21462,21464,21466],{"class":37,"line":10137},[35,21463,502],{"class":495},[35,21465,2314],{"class":48},[35,21467,2317],{"class":359},[35,21469,21470],{"class":37,"line":10146},[35,21471,1907],{"class":359},[35,21473,21474,21476],{"class":37,"line":10151},[35,21475,5967],{"class":48},[35,21477,5970],{"class":359},[35,21479,21480],{"class":37,"line":10157},[35,21481,1926],{"class":359},[21,21483,21484],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[21,21486,21487],{},"浅拷贝带来的问题是堆区的内存重复释放",[21,21489,21490],{},[1823,21491],{"alt":30,"src":21492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[21,21494,21495],{},"浅拷贝问题要使用深拷贝来解决",[21,21497,21498],{},[1823,21499],{"alt":30,"src":21500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[21,21502,21503],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[465,21505,21507],{"id":21506},"_826初始化列表","8.2.6初始化列表",[21,21509,21510],{},"作用：初始化属性",[21,21512,5515],{},[25,21514,21517],{"className":21515,"code":21516,"language":5521},[5519],"构造函数():属性1(值1),属性2(值2).....{}\n",[32,21518,21516],{"__ignoreMap":30},[21,21520,21521],{},"例子",[25,21523,21525],{"className":486,"code":21524,"language":488,"meta":30,"style":30},"#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",[32,21526,21527,21533,21543,21549,21553,21558,21562,21567,21572,21577,21582,21587,21592,21596,21601,21606,21649,21658,21676,21694,21712,21716,21720,21727,21734,21741,21745,21749,21757,21761,21765,21785,21794,21798,21802,21812,21816,21824],{"__ignoreMap":30},[35,21528,21529,21531],{"class":37,"line":38},[35,21530,2291],{"class":495},[35,21532,2294],{"class":306},[35,21534,21535,21537,21539,21541],{"class":37,"line":45},[35,21536,2299],{"class":495},[35,21538,2302],{"class":495},[35,21540,2305],{"class":48},[35,21542,1655],{"class":359},[35,21544,21545,21547],{"class":37,"line":55},[35,21546,15028],{"class":495},[35,21548,15505],{"class":48},[35,21550,21551],{"class":37,"line":65},[35,21552,1907],{"class":359},[35,21554,21555],{"class":37,"line":74},[35,21556,21557],{"class":495},"    public:\n",[35,21559,21560],{"class":37,"line":83},[35,21561,141],{"emptyLinePlaceholder":140},[35,21563,21564],{"class":37,"line":92},[35,21565,21566],{"class":41},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[35,21568,21569],{"class":37,"line":101},[35,21570,21571],{"class":41},"    \u002F\u002FPerson(int a, int b, int c) {\n",[35,21573,21574],{"class":37,"line":110},[35,21575,21576],{"class":41},"    \u002F\u002F  m_A = a;\n",[35,21578,21579],{"class":37,"line":119},[35,21580,21581],{"class":41},"    \u002F\u002F  m_B = b;\n",[35,21583,21584],{"class":37,"line":128},[35,21585,21586],{"class":41},"    \u002F\u002F  m_C = c;\n",[35,21588,21589],{"class":37,"line":137},[35,21590,21591],{"class":41},"    \u002F\u002F}\n",[35,21593,21594],{"class":37,"line":144},[35,21595,141],{"emptyLinePlaceholder":140},[35,21597,21598],{"class":37,"line":150},[35,21599,21600],{"class":41},"    \u002F\u002F初始化列表方式初始化\n",[35,21602,21603],{"class":37,"line":159},[35,21604,21605],{"class":41},"    \u002F\u002F使用有参构造函数\n",[35,21607,21608,21610,21612,21614,21616,21618,21620,21622,21624,21626,21628,21631,21634,21637,21640,21643,21646],{"class":37,"line":168},[35,21609,18853],{"class":48},[35,21611,499],{"class":359},[35,21613,502],{"class":495},[35,21615,1759],{"class":5550},[35,21617,12769],{"class":359},[35,21619,502],{"class":495},[35,21621,3167],{"class":5550},[35,21623,12769],{"class":359},[35,21625,502],{"class":495},[35,21627,3183],{"class":5550},[35,21629,21630],{"class":359},") :",[35,21632,21633],{"class":48},"m_A",[35,21635,21636],{"class":359},"(a), ",[35,21638,21639],{"class":48},"m_B",[35,21641,21642],{"class":359},"(b), ",[35,21644,21645],{"class":48},"m_C",[35,21647,21648],{"class":359},"(c) {}\n",[35,21650,21651,21653,21656],{"class":37,"line":177},[35,21652,15243],{"class":495},[35,21654,21655],{"class":48}," PrintPerson",[35,21657,11187],{"class":359},[35,21659,21660,21662,21664,21667,21669,21672,21674],{"class":37,"line":182},[35,21661,10003],{"class":359},[35,21663,1538],{"class":495},[35,21665,21666],{"class":306}," \"mA:\"",[35,21668,1805],{"class":495},[35,21670,21671],{"class":359}," m_A ",[35,21673,1538],{"class":495},[35,21675,9174],{"class":359},[35,21677,21678,21680,21682,21685,21687,21690,21692],{"class":37,"line":188},[35,21679,10003],{"class":359},[35,21681,1538],{"class":495},[35,21683,21684],{"class":306}," \"mB:\"",[35,21686,1805],{"class":495},[35,21688,21689],{"class":359}," m_B ",[35,21691,1538],{"class":495},[35,21693,9174],{"class":359},[35,21695,21696,21698,21700,21703,21705,21708,21710],{"class":37,"line":197},[35,21697,10003],{"class":359},[35,21699,1538],{"class":495},[35,21701,21702],{"class":306}," \"mC:\"",[35,21704,1805],{"class":495},[35,21706,21707],{"class":359}," m_C ",[35,21709,1538],{"class":495},[35,21711,9174],{"class":359},[35,21713,21714],{"class":37,"line":206},[35,21715,2528],{"class":359},[35,21717,21718],{"class":37,"line":215},[35,21719,15556],{"class":495},[35,21721,21722,21724],{"class":37,"line":224},[35,21723,2326],{"class":495},[35,21725,21726],{"class":359}," m_A;\n",[35,21728,21729,21731],{"class":37,"line":233},[35,21730,2326],{"class":495},[35,21732,21733],{"class":359}," m_B;\n",[35,21735,21736,21738],{"class":37,"line":238},[35,21737,2326],{"class":495},[35,21739,21740],{"class":359}," m_C;\n",[35,21742,21743],{"class":37,"line":244},[35,21744,4329],{"class":359},[35,21746,21747],{"class":37,"line":253},[35,21748,141],{"emptyLinePlaceholder":140},[35,21750,21751,21753,21755],{"class":37,"line":262},[35,21752,502],{"class":495},[35,21754,2314],{"class":48},[35,21756,6312],{"class":359},[35,21758,21759],{"class":37,"line":271},[35,21760,1907],{"class":359},[35,21762,21763],{"class":37,"line":280},[35,21764,141],{"emptyLinePlaceholder":140},[35,21766,21767,21769,21771,21773,21775,21777,21779,21781,21783],{"class":37,"line":289},[35,21768,19765],{"class":359},[35,21770,21],{"class":48},[35,21772,499],{"class":359},[35,21774,713],{"class":58},[35,21776,12769],{"class":359},[35,21778,574],{"class":58},[35,21780,12769],{"class":359},[35,21782,568],{"class":58},[35,21784,3053],{"class":359},[35,21786,21787,21789,21792],{"class":37,"line":294},[35,21788,16200],{"class":359},[35,21790,21791],{"class":48},"PrintPerson",[35,21793,5970],{"class":359},[35,21795,21796],{"class":37,"line":300},[35,21797,141],{"emptyLinePlaceholder":140},[35,21799,21800],{"class":37,"line":313},[35,21801,141],{"emptyLinePlaceholder":140},[35,21803,21804,21806,21808,21810],{"class":37,"line":324},[35,21805,2644],{"class":48},[35,21807,499],{"class":359},[35,21809,2649],{"class":306},[35,21811,3053],{"class":359},[35,21813,21814],{"class":37,"line":2955},[35,21815,141],{"emptyLinePlaceholder":140},[35,21817,21818,21820,21822],{"class":37,"line":8282},[35,21819,4424],{"class":495},[35,21821,4427],{"class":58},[35,21823,1655],{"class":359},[35,21825,21826],{"class":37,"line":8306},[35,21827,1926],{"class":359},[21,21829,21830,21831,21834,21835],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[645,21832,21833],{},"参数名就是定义的对象属性","，",[645,21836,21837],{},"属性后面的值为有参构造函数的形参",[25,21839,21841],{"className":486,"code":21840,"language":488,"meta":30,"style":30},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[32,21842,21843],{"__ignoreMap":30},[35,21844,21845,21847,21849,21851,21854,21856,21859,21861,21864,21866,21869,21871,21874,21876],{"class":37,"line":38},[35,21846,19380],{"class":48},[35,21848,499],{"class":359},[35,21850,502],{"class":495},[35,21852,21853],{"class":359}," a.",[35,21855,502],{"class":495},[35,21857,21858],{"class":359}," b,",[35,21860,502],{"class":495},[35,21862,21863],{"class":359}," b):",[35,21865,21633],{"class":48},[35,21867,21868],{"class":359},"(a),",[35,21870,21639],{"class":48},[35,21872,21873],{"class":359},"(c),",[35,21875,21645],{"class":48},[35,21877,21878],{"class":359},"(b) {}\n",[465,21880,21882],{"id":21881},"_827类对象作为类成员","8.2.7类对象作为类成员",[21,21884,21885],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[21,21887,14967],{},[25,21889,21891],{"className":486,"code":21890,"language":488,"meta":30,"style":30},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[32,21892,21893,21898,21903,21907,21912,21916],{"__ignoreMap":30},[35,21894,21895],{"class":37,"line":38},[35,21896,21897],{"class":359},"A{};\n",[35,21899,21900],{"class":37,"line":45},[35,21901,21902],{"class":359},"B\n",[35,21904,21905],{"class":37,"line":55},[35,21906,1907],{"class":359},[35,21908,21909],{"class":37,"line":65},[35,21910,21911],{"class":359},"    A a;\n",[35,21913,21914],{"class":37,"line":74},[35,21915,1926],{"class":359},[35,21917,21918],{"class":37,"line":83},[35,21919,21920],{"class":41},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[21,21922,21923],{},"案例",[25,21925,21927],{"className":486,"code":21926,"language":488,"meta":30,"style":30},"\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",[32,21928,21929,21934,21941,21945,21950,21955,21969,21973,21983,21994,21998,22005,22009,22022,22026,22031,22036,22040,22046,22050,22054,22058,22089,22093,22104,22108,22114,22118,22131,22135,22139,22143,22148,22153,22157,22165,22169,22186,22205,22209,22217,22221,22227],{"__ignoreMap":30},[35,21930,21931],{"class":37,"line":38},[35,21932,21933],{"class":41},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[35,21935,21936,21938],{"class":37,"line":45},[35,21937,15028],{"class":495},[35,21939,21940],{"class":48}," Phone\n",[35,21942,21943],{"class":37,"line":55},[35,21944,1907],{"class":359},[35,21946,21947],{"class":37,"line":65},[35,21948,21949],{"class":359},"public：\n",[35,21951,21952],{"class":37,"line":74},[35,21953,21954],{"class":41},"    \u002F\u002F 赋值(构造函数)\n",[35,21956,21957,21960,21962,21964,21967],{"class":37,"line":83},[35,21958,21959],{"class":48},"    Phone",[35,21961,499],{"class":359},[35,21963,15251],{"class":48},[35,21965,21966],{"class":5550}," pName",[35,21968,505],{"class":359},[35,21970,21971],{"class":37,"line":92},[35,21972,2371],{"class":359},[35,21974,21975,21978,21980],{"class":37,"line":101},[35,21976,21977],{"class":359},"        m_pName",[35,21979,544],{"class":495},[35,21981,21982],{"class":359},"pName;\n",[35,21984,21985,21987,21989,21992],{"class":37,"line":110},[35,21986,3785],{"class":359},[35,21988,1538],{"class":495},[35,21990,21991],{"class":306},"\"Phone的构造函数调用\"",[35,21993,1655],{"class":359},[35,21995,21996],{"class":37,"line":119},[35,21997,2528],{"class":359},[35,21999,22000,22003],{"class":37,"line":128},[35,22001,22002],{"class":48},"    ~Phone",[35,22004,2317],{"class":359},[35,22006,22007],{"class":37,"line":137},[35,22008,2371],{"class":359},[35,22010,22011,22013,22015,22018,22020],{"class":37,"line":144},[35,22012,3785],{"class":359},[35,22014,1538],{"class":495},[35,22016,22017],{"class":306},"\"Phone析构函数调用\"",[35,22019,1538],{"class":495},[35,22021,1560],{"class":359},[35,22023,22024],{"class":37,"line":150},[35,22025,2528],{"class":359},[35,22027,22028],{"class":37,"line":159},[35,22029,22030],{"class":41},"    \u002F\u002F\n",[35,22032,22033],{"class":37,"line":168},[35,22034,22035],{"class":359},"    string m_PName;\n",[35,22037,22038],{"class":37,"line":177},[35,22039,4329],{"class":359},[35,22041,22042,22044],{"class":37,"line":182},[35,22043,15028],{"class":495},[35,22045,15505],{"class":48},[35,22047,22048],{"class":37,"line":188},[35,22049,1907],{"class":359},[35,22051,22052],{"class":37,"line":197},[35,22053,15050],{"class":495},[35,22055,22056],{"class":37,"line":206},[35,22057,17328],{"class":41},[35,22059,22060,22062,22064,22066,22068,22070,22072,22075,22078,22080,22083,22086],{"class":37,"line":215},[35,22061,18853],{"class":48},[35,22063,499],{"class":359},[35,22065,15251],{"class":48},[35,22067,15254],{"class":5550},[35,22069,872],{"class":359},[35,22071,15251],{"class":48},[35,22073,22074],{"class":5550}," pname",[35,22076,22077],{"class":359},"):",[35,22079,15344],{"class":48},[35,22081,22082],{"class":359},"(name),m_phone.",[35,22084,22085],{"class":48},"m_PName",[35,22087,22088],{"class":359},"(pname) \n",[35,22090,22091],{"class":37,"line":224},[35,22092,2371],{"class":359},[35,22094,22095,22097,22099,22102],{"class":37,"line":233},[35,22096,3785],{"class":359},[35,22098,1538],{"class":495},[35,22100,22101],{"class":306},"\"Person的构造函数调用\"",[35,22103,1655],{"class":359},[35,22105,22106],{"class":37,"line":238},[35,22107,2528],{"class":359},[35,22109,22110,22112],{"class":37,"line":244},[35,22111,18886],{"class":48},[35,22113,2317],{"class":359},[35,22115,22116],{"class":37,"line":253},[35,22117,2371],{"class":359},[35,22119,22120,22122,22124,22127,22129],{"class":37,"line":262},[35,22121,3785],{"class":359},[35,22123,1538],{"class":495},[35,22125,22126],{"class":306},"\"Person析构函数调用\"",[35,22128,1538],{"class":495},[35,22130,1560],{"class":359},[35,22132,22133],{"class":37,"line":271},[35,22134,2528],{"class":359},[35,22136,22137],{"class":37,"line":280},[35,22138,8114],{"class":41},[35,22140,22141],{"class":37,"line":289},[35,22142,15226],{"class":359},[35,22144,22145],{"class":37,"line":294},[35,22146,22147],{"class":41},"    \u002F\u002F手机\n",[35,22149,22150],{"class":37,"line":300},[35,22151,22152],{"class":359},"    Phone m_Phone;\n",[35,22154,22155],{"class":37,"line":313},[35,22156,4329],{"class":359},[35,22158,22159,22161,22163],{"class":37,"line":324},[35,22160,5698],{"class":495},[35,22162,5922],{"class":48},[35,22164,2317],{"class":359},[35,22166,22167],{"class":37,"line":2955},[35,22168,1907],{"class":359},[35,22170,22171,22173,22175,22177,22179,22181,22184],{"class":37,"line":8282},[35,22172,19765],{"class":359},[35,22174,21],{"class":48},[35,22176,499],{"class":359},[35,22178,8250],{"class":306},[35,22180,872],{"class":359},[35,22182,22183],{"class":306},"\"安卓\"",[35,22185,3053],{"class":359},[35,22187,22188,22190,22192,22195,22197,22200,22202],{"class":37,"line":8306},[35,22189,1912],{"class":359},[35,22191,1538],{"class":495},[35,22193,22194],{"class":359},"p.Name",[35,22196,1538],{"class":495},[35,22198,22199],{"class":306},"\"拿着：\"",[35,22201,1538],{"class":495},[35,22203,22204],{"class":359},"p.m_phone.m_PName;\n",[35,22206,22207],{"class":37,"line":8311},[35,22208,1926],{"class":359},[35,22210,22211,22213,22215],{"class":37,"line":8317},[35,22212,502],{"class":495},[35,22214,2314],{"class":48},[35,22216,2317],{"class":359},[35,22218,22219],{"class":37,"line":8344},[35,22220,1907],{"class":359},[35,22222,22223,22225],{"class":37,"line":8349},[35,22224,5967],{"class":48},[35,22226,5970],{"class":359},[35,22228,22229],{"class":37,"line":8355},[35,22230,1926],{"class":359},[21,22232,9359],{},[25,22234,22236],{"className":486,"code":22235,"language":488,"meta":30,"style":30},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[32,22237,22238,22243],{"__ignoreMap":30},[35,22239,22240],{"class":37,"line":38},[35,22241,22242],{"class":41},"    \u002F\u002F不需要写这个：\n",[35,22244,22245],{"class":37,"line":45},[35,22246,22247],{"class":41},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[21,22249,22250],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[25,22252,22254],{"className":486,"code":22253,"language":488,"meta":30,"style":30},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[32,22255,22256],{"__ignoreMap":30},[35,22257,22258,22260,22263,22265,22268,22271],{"class":37,"line":38},[35,22259,19380],{"class":48},[35,22261,22262],{"class":359},"(string name.string pname):",[35,22264,15344],{"class":48},[35,22266,22267],{"class":359},"(name),",[35,22269,22270],{"class":48},"m_phone",[35,22272,22273],{"class":359},"(pname) {}\n",[21,22275,22276,22277,544,22280],{},"采用的是隐式转换法，实际为如下：\n",[32,22278,22279],{},"m_phone(pname)",[32,22281,22282],{},"Phone m_phone=pname",[21,22284,22285,22288],{},[645,22286,22287],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[21,22290,22291],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[465,22293,22295],{"id":22294},"_828静态对象","8.2.8静态对象",[21,22297,22298],{},"静态对象在成员对象前static，称为静态对象",[21,22300,22301],{},"静态对象分为两类：",[14,22303,22304],{},[17,22305,22306],{},"静态成员变量",[1501,22308,22309,22312,22315],{},[17,22310,22311],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[17,22313,22314],{},"②在编译阶段分配内存",[17,22316,22317],{},"③类内声明，类外初始化",[14,22319,22320],{"start":45},[17,22321,22322],{},"静态成员函数",[1501,22324,22325,22328],{},[17,22326,22327],{},"①所有对象共享同一个函数",[17,22329,22330],{},"②静态成员函数只能访问静态成员变量",[22332,22333,22335],"h4",{"id":22334},"_8281静态成员变量","8.2.8.1静态成员变量",[25,22337,22339],{"className":486,"code":22338,"language":488,"meta":30,"style":30},"#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",[32,22340,22341,22347,22357,22363,22367,22371,22376,22381,22386,22394,22398,22402,22406,22414,22418,22422,22427,22440,22444,22452,22456,22462],{"__ignoreMap":30},[35,22342,22343,22345],{"class":37,"line":38},[35,22344,2291],{"class":495},[35,22346,2294],{"class":306},[35,22348,22349,22351,22353,22355],{"class":37,"line":45},[35,22350,2299],{"class":495},[35,22352,2302],{"class":495},[35,22354,2305],{"class":48},[35,22356,1655],{"class":359},[35,22358,22359,22361],{"class":37,"line":55},[35,22360,15028],{"class":495},[35,22362,15505],{"class":48},[35,22364,22365],{"class":37,"line":65},[35,22366,1907],{"class":359},[35,22368,22369],{"class":37,"line":74},[35,22370,15050],{"class":495},[35,22372,22373],{"class":37,"line":83},[35,22374,22375],{"class":41},"    \u002F\u002F非静态成员变量\n",[35,22377,22378],{"class":37,"line":92},[35,22379,22380],{"class":41},"    \u002F\u002F int m_A;\n",[35,22382,22383],{"class":37,"line":101},[35,22384,22385],{"class":41},"    \u002F\u002F定义静态成员变量\n",[35,22387,22388,22390,22392],{"class":37,"line":110},[35,22389,11354],{"class":495},[35,22391,2723],{"class":495},[35,22393,21726],{"class":359},[35,22395,22396],{"class":37,"line":119},[35,22397,141],{"emptyLinePlaceholder":140},[35,22399,22400],{"class":37,"line":128},[35,22401,141],{"emptyLinePlaceholder":140},[35,22403,22404],{"class":37,"line":137},[35,22405,4329],{"class":359},[35,22407,22408,22410,22412],{"class":37,"line":144},[35,22409,5698],{"class":495},[35,22411,5922],{"class":48},[35,22413,2317],{"class":359},[35,22415,22416],{"class":37,"line":150},[35,22417,1907],{"class":359},[35,22419,22420],{"class":37,"line":159},[35,22421,15647],{"class":359},[35,22423,22424],{"class":37,"line":168},[35,22425,22426],{"class":41},"    \u002F\u002F输出类成员变量这块内存\n",[35,22428,22429,22431,22433,22436,22438],{"class":37,"line":177},[35,22430,1912],{"class":359},[35,22432,1538],{"class":495},[35,22434,22435],{"class":359},"p.m_A",[35,22437,1538],{"class":495},[35,22439,1560],{"class":359},[35,22441,22442],{"class":37,"line":182},[35,22443,1926],{"class":359},[35,22445,22446,22448,22450],{"class":37,"line":188},[35,22447,502],{"class":495},[35,22449,2314],{"class":48},[35,22451,2317],{"class":359},[35,22453,22454],{"class":37,"line":197},[35,22455,1907],{"class":359},[35,22457,22458,22460],{"class":37,"line":206},[35,22459,5967],{"class":48},[35,22461,2317],{"class":359},[35,22463,22464],{"class":37,"line":215},[35,22465,1926],{"class":359},[21,22467,22468],{},"此时输出是报错的：无法解析外部命令",[21,22470,22471],{},"解决这一问题：必须用到类内声明，类外初始化操作",[25,22473,22475],{"className":486,"code":22474,"language":488,"meta":30,"style":30},"#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",[32,22476,22477,22483,22493,22499,22503,22507,22512,22520,22524,22529,22544,22552,22556,22560,22565,22570,22582,22587,22598,22603,22608,22621,22625,22633,22637,22643],{"__ignoreMap":30},[35,22478,22479,22481],{"class":37,"line":38},[35,22480,2291],{"class":495},[35,22482,2294],{"class":306},[35,22484,22485,22487,22489,22491],{"class":37,"line":45},[35,22486,2299],{"class":495},[35,22488,2302],{"class":495},[35,22490,2305],{"class":48},[35,22492,1655],{"class":359},[35,22494,22495,22497],{"class":37,"line":55},[35,22496,15028],{"class":495},[35,22498,15505],{"class":48},[35,22500,22501],{"class":37,"line":65},[35,22502,1907],{"class":359},[35,22504,22505],{"class":37,"line":74},[35,22506,15050],{"class":495},[35,22508,22509],{"class":37,"line":83},[35,22510,22511],{"class":41},"    \u002F\u002F类内声明\n",[35,22513,22514,22516,22518],{"class":37,"line":92},[35,22515,11354],{"class":495},[35,22517,2723],{"class":495},[35,22519,21726],{"class":359},[35,22521,22522],{"class":37,"line":101},[35,22523,4329],{"class":359},[35,22525,22526],{"class":37,"line":110},[35,22527,22528],{"class":41},"\u002F\u002F类外初始化\n",[35,22530,22531,22533,22535,22538,22540,22542],{"class":37,"line":119},[35,22532,502],{"class":495},[35,22534,15903],{"class":48},[35,22536,22537],{"class":359},"::m_A",[35,22539,544],{"class":495},[35,22541,940],{"class":58},[35,22543,1655],{"class":359},[35,22545,22546,22548,22550],{"class":37,"line":128},[35,22547,5698],{"class":495},[35,22549,5922],{"class":48},[35,22551,2317],{"class":359},[35,22553,22554],{"class":37,"line":137},[35,22555,1907],{"class":359},[35,22557,22558],{"class":37,"line":144},[35,22559,15647],{"class":359},[35,22561,22562],{"class":37,"line":150},[35,22563,22564],{"class":41},"    \u002F\u002F访问变量的原内存空间\n",[35,22566,22567],{"class":37,"line":159},[35,22568,22569],{"class":41},"    \u002F\u002F100\n",[35,22571,22572,22574,22576,22578,22580],{"class":37,"line":168},[35,22573,1912],{"class":359},[35,22575,1538],{"class":495},[35,22577,22435],{"class":359},[35,22579,1538],{"class":495},[35,22581,1560],{"class":359},[35,22583,22584],{"class":37,"line":177},[35,22585,22586],{"class":359},"    Person p2;\n",[35,22588,22589,22592,22594,22596],{"class":37,"line":182},[35,22590,22591],{"class":359},"    p2.m_A",[35,22593,544],{"class":495},[35,22595,2072],{"class":58},[35,22597,1655],{"class":359},[35,22599,22600],{"class":37,"line":188},[35,22601,22602],{"class":41},"    \u002F\u002F继续访问这片空间\n",[35,22604,22605],{"class":37,"line":197},[35,22606,22607],{"class":41},"    \u002F\u002F200\n",[35,22609,22610,22612,22614,22617,22619],{"class":37,"line":206},[35,22611,1912],{"class":359},[35,22613,1538],{"class":495},[35,22615,22616],{"class":359},"p2.m_A",[35,22618,1538],{"class":495},[35,22620,1560],{"class":359},[35,22622,22623],{"class":37,"line":215},[35,22624,1926],{"class":359},[35,22626,22627,22629,22631],{"class":37,"line":224},[35,22628,502],{"class":495},[35,22630,2314],{"class":48},[35,22632,2317],{"class":359},[35,22634,22635],{"class":37,"line":233},[35,22636,1907],{"class":359},[35,22638,22639,22641],{"class":37,"line":238},[35,22640,5967],{"class":48},[35,22642,5970],{"class":359},[35,22644,22645],{"class":37,"line":244},[35,22646,1926],{"class":359},[21,22648,22649],{},[645,22650,22651],{},"静态变量的访问",[25,22653,22655],{"className":486,"code":22654,"language":488,"meta":30,"style":30},"#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",[32,22656,22657,22663,22673,22679,22683,22687,22691,22699,22703,22708,22716,22720,22724,22738,22753,22761,22765,22770,22775,22780,22785,22797,22802,22807,22821,22838,22842,22850,22854,22860],{"__ignoreMap":30},[35,22658,22659,22661],{"class":37,"line":38},[35,22660,2291],{"class":495},[35,22662,2294],{"class":306},[35,22664,22665,22667,22669,22671],{"class":37,"line":45},[35,22666,2299],{"class":495},[35,22668,2302],{"class":495},[35,22670,2305],{"class":48},[35,22672,1655],{"class":359},[35,22674,22675,22677],{"class":37,"line":55},[35,22676,15028],{"class":495},[35,22678,15505],{"class":48},[35,22680,22681],{"class":37,"line":65},[35,22682,1907],{"class":359},[35,22684,22685],{"class":37,"line":74},[35,22686,15050],{"class":495},[35,22688,22689],{"class":37,"line":83},[35,22690,22511],{"class":41},[35,22692,22693,22695,22697],{"class":37,"line":92},[35,22694,11354],{"class":495},[35,22696,2723],{"class":495},[35,22698,21726],{"class":359},[35,22700,22701],{"class":37,"line":101},[35,22702,15556],{"class":495},[35,22704,22705],{"class":37,"line":110},[35,22706,22707],{"class":41},"    \u002F\u002F静态成员变量也是有访问权限的\n",[35,22709,22710,22712,22714],{"class":37,"line":119},[35,22711,11354],{"class":495},[35,22713,2723],{"class":495},[35,22715,21733],{"class":359},[35,22717,22718],{"class":37,"line":128},[35,22719,4329],{"class":359},[35,22721,22722],{"class":37,"line":137},[35,22723,22528],{"class":41},[35,22725,22726,22728,22730,22732,22734,22736],{"class":37,"line":144},[35,22727,502],{"class":495},[35,22729,15903],{"class":48},[35,22731,22537],{"class":359},[35,22733,544],{"class":495},[35,22735,940],{"class":58},[35,22737,1655],{"class":359},[35,22739,22740,22742,22744,22747,22749,22751],{"class":37,"line":150},[35,22741,502],{"class":495},[35,22743,15903],{"class":48},[35,22745,22746],{"class":359},"::m_B",[35,22748,544],{"class":495},[35,22750,1194],{"class":58},[35,22752,1655],{"class":359},[35,22754,22755,22757,22759],{"class":37,"line":159},[35,22756,5698],{"class":495},[35,22758,5991],{"class":48},[35,22760,2317],{"class":359},[35,22762,22763],{"class":37,"line":168},[35,22764,1907],{"class":359},[35,22766,22767],{"class":37,"line":177},[35,22768,22769],{"class":41},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[35,22771,22772],{"class":37,"line":182},[35,22773,22774],{"class":41},"    \u002F\u002F静态成员变量有两种访问方式：\n",[35,22776,22777],{"class":37,"line":188},[35,22778,22779],{"class":41},"    \u002F\u002F1.通过对象进行访问\n",[35,22781,22782],{"class":37,"line":197},[35,22783,22784],{"class":359},"    Person p;  \n",[35,22786,22787,22789,22791,22793,22795],{"class":37,"line":206},[35,22788,1912],{"class":359},[35,22790,1538],{"class":495},[35,22792,22435],{"class":359},[35,22794,1538],{"class":495},[35,22796,1560],{"class":359},[35,22798,22799],{"class":37,"line":215},[35,22800,22801],{"class":41},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[35,22803,22804],{"class":37,"line":224},[35,22805,22806],{"class":41},"    \u002F\u002F2.通过类名进行访问\n",[35,22808,22809,22811,22813,22815,22817,22819],{"class":37,"line":233},[35,22810,1912],{"class":359},[35,22812,1538],{"class":495},[35,22814,19380],{"class":48},[35,22816,22537],{"class":359},[35,22818,1538],{"class":495},[35,22820,1560],{"class":359},[35,22822,22823,22825,22827,22829,22831,22833,22835],{"class":37,"line":238},[35,22824,1912],{"class":359},[35,22826,1538],{"class":495},[35,22828,19380],{"class":48},[35,22830,22746],{"class":359},[35,22832,1538],{"class":495},[35,22834,1603],{"class":359},[35,22836,22837],{"class":41}," \u002F\u002F没有访问权限，报错\n",[35,22839,22840],{"class":37,"line":244},[35,22841,1926],{"class":359},[35,22843,22844,22846,22848],{"class":37,"line":253},[35,22845,502],{"class":495},[35,22847,2314],{"class":48},[35,22849,2317],{"class":359},[35,22851,22852],{"class":37,"line":262},[35,22853,1907],{"class":359},[35,22855,22856,22858],{"class":37,"line":271},[35,22857,6036],{"class":48},[35,22859,5970],{"class":359},[35,22861,22862],{"class":37,"line":280},[35,22863,1926],{"class":359},[22332,22865,22867],{"id":22866},"_8282静态成员函数","8.2.8.2静态成员函数",[21,22869,22870],{},"1.静态成员函数定义与访问",[25,22872,22874],{"className":486,"code":22873,"language":488,"meta":30,"style":30},"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",[32,22875,22876,22882,22886,22890,22895,22906,22910,22924,22928,22932,22940,22944,22949,22954,22958,22966,22971,22981],{"__ignoreMap":30},[35,22877,22878,22880],{"class":37,"line":38},[35,22879,15028],{"class":495},[35,22881,15505],{"class":48},[35,22883,22884],{"class":37,"line":45},[35,22885,1907],{"class":359},[35,22887,22888],{"class":37,"line":55},[35,22889,15050],{"class":495},[35,22891,22892],{"class":37,"line":65},[35,22893,22894],{"class":41},"    \u002F\u002F在公共权限下定义静态成员函数\n",[35,22896,22897,22899,22902,22904],{"class":37,"line":74},[35,22898,11354],{"class":495},[35,22900,22901],{"class":495}," void",[35,22903,11719],{"class":48},[35,22905,2317],{"class":359},[35,22907,22908],{"class":37,"line":83},[35,22909,2371],{"class":359},[35,22911,22912,22915,22917,22920,22922],{"class":37,"line":92},[35,22913,22914],{"class":359},"        coout",[35,22916,1538],{"class":495},[35,22918,22919],{"class":306},"\"静态成员函数的调用\"",[35,22921,1538],{"class":495},[35,22923,1560],{"class":359},[35,22925,22926],{"class":37,"line":101},[35,22927,2528],{"class":359},[35,22929,22930],{"class":37,"line":110},[35,22931,4329],{"class":359},[35,22933,22934,22936,22938],{"class":37,"line":119},[35,22935,5698],{"class":495},[35,22937,5922],{"class":48},[35,22939,2317],{"class":359},[35,22941,22942],{"class":37,"line":128},[35,22943,1907],{"class":359},[35,22945,22946],{"class":37,"line":137},[35,22947,22948],{"class":41},"    \u002F\u002F静态成员函数的调用方式:\n",[35,22950,22951],{"class":37,"line":144},[35,22952,22953],{"class":41},"    \u002F\u002F1.通过对象访问\n",[35,22955,22956],{"class":37,"line":150},[35,22957,15647],{"class":359},[35,22959,22960,22962,22964],{"class":37,"line":159},[35,22961,16200],{"class":359},[35,22963,11885],{"class":48},[35,22965,5970],{"class":359},[35,22967,22968],{"class":37,"line":168},[35,22969,22970],{"class":41},"    \u002F\u002F2.通过类名访问\n",[35,22972,22973,22975,22977,22979],{"class":37,"line":177},[35,22974,18853],{"class":48},[35,22976,18066],{"class":359},[35,22978,11885],{"class":48},[35,22980,5970],{"class":359},[35,22982,22983],{"class":37,"line":182},[35,22984,1926],{"class":359},[14,22986,22987],{"start":45},[17,22988,22989],{},"静态成员函数只能访问静态成员变量",[25,22991,22993],{"className":486,"code":22992,"language":488,"meta":30,"style":30},"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",[32,22994,22995,23001,23005,23009,23013,23023,23027,23041,23046,23058,23062,23073,23083,23087,23091,23095,23105,23109,23122,23126,23130,23134,23138,23152,23160,23164,23168,23172,23176,23184,23188,23198,23203,23207,23215,23219,23225],{"__ignoreMap":30},[35,22996,22997,22999],{"class":37,"line":38},[35,22998,15028],{"class":495},[35,23000,15505],{"class":48},[35,23002,23003],{"class":37,"line":45},[35,23004,1907],{"class":359},[35,23006,23007],{"class":37,"line":55},[35,23008,15050],{"class":495},[35,23010,23011],{"class":37,"line":65},[35,23012,22894],{"class":41},[35,23014,23015,23017,23019,23021],{"class":37,"line":74},[35,23016,11354],{"class":495},[35,23018,22901],{"class":495},[35,23020,11719],{"class":48},[35,23022,2317],{"class":359},[35,23024,23025],{"class":37,"line":83},[35,23026,2371],{"class":359},[35,23028,23029,23032,23034,23036,23038],{"class":37,"line":92},[35,23030,23031],{"class":359},"        m_A",[35,23033,544],{"class":495},[35,23035,807],{"class":58},[35,23037,553],{"class":359},[35,23039,23040],{"class":41}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[35,23042,23043],{"class":37,"line":101},[35,23044,23045],{"class":41},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[35,23047,23048,23050,23052,23054,23056],{"class":37,"line":110},[35,23049,22914],{"class":359},[35,23051,1538],{"class":495},[35,23053,22919],{"class":306},[35,23055,1538],{"class":495},[35,23057,1560],{"class":359},[35,23059,23060],{"class":37,"line":119},[35,23061,2528],{"class":359},[35,23063,23064,23066,23068,23070],{"class":37,"line":128},[35,23065,11354],{"class":495},[35,23067,2723],{"class":495},[35,23069,15782],{"class":359},[35,23071,23072],{"class":41}," \u002F\u002F静态成员变量\n",[35,23074,23075,23077,23080],{"class":37,"line":137},[35,23076,2326],{"class":495},[35,23078,23079],{"class":359}," m_B;",[35,23081,23082],{"class":41}," \u002F\u002F非静态成员变量\n",[35,23084,23085],{"class":37,"line":144},[35,23086,141],{"emptyLinePlaceholder":140},[35,23088,23089],{"class":37,"line":150},[35,23090,15556],{"class":495},[35,23092,23093],{"class":37,"line":159},[35,23094,22707],{"class":41},[35,23096,23097,23099,23101,23103],{"class":37,"line":168},[35,23098,11354],{"class":495},[35,23100,22901],{"class":495},[35,23102,13952],{"class":48},[35,23104,2317],{"class":359},[35,23106,23107],{"class":37,"line":177},[35,23108,2371],{"class":359},[35,23110,23111,23113,23115,23118,23120],{"class":37,"line":182},[35,23112,3785],{"class":359},[35,23114,1538],{"class":495},[35,23116,23117],{"class":306},"\"这是私有权限下的静态函数调用\"",[35,23119,1538],{"class":495},[35,23121,1560],{"class":359},[35,23123,23124],{"class":37,"line":188},[35,23125,2528],{"class":359},[35,23127,23128],{"class":37,"line":197},[35,23129,141],{"emptyLinePlaceholder":140},[35,23131,23132],{"class":37,"line":206},[35,23133,141],{"emptyLinePlaceholder":140},[35,23135,23136],{"class":37,"line":215},[35,23137,4329],{"class":359},[35,23139,23140,23142,23144,23146,23148,23150],{"class":37,"line":224},[35,23141,502],{"class":495},[35,23143,15903],{"class":48},[35,23145,22537],{"class":359},[35,23147,544],{"class":495},[35,23149,687],{"class":58},[35,23151,1655],{"class":359},[35,23153,23154,23156,23158],{"class":37,"line":233},[35,23155,5698],{"class":495},[35,23157,5922],{"class":48},[35,23159,2317],{"class":359},[35,23161,23162],{"class":37,"line":238},[35,23163,1907],{"class":359},[35,23165,23166],{"class":37,"line":244},[35,23167,22948],{"class":41},[35,23169,23170],{"class":37,"line":253},[35,23171,22953],{"class":41},[35,23173,23174],{"class":37,"line":262},[35,23175,15647],{"class":359},[35,23177,23178,23180,23182],{"class":37,"line":271},[35,23179,16200],{"class":359},[35,23181,11885],{"class":48},[35,23183,5970],{"class":359},[35,23185,23186],{"class":37,"line":280},[35,23187,22970],{"class":41},[35,23189,23190,23192,23194,23196],{"class":37,"line":289},[35,23191,18853],{"class":48},[35,23193,18066],{"class":359},[35,23195,11885],{"class":48},[35,23197,5970],{"class":359},[35,23199,23200],{"class":37,"line":294},[35,23201,23202],{"class":41},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[35,23204,23205],{"class":37,"line":300},[35,23206,1926],{"class":359},[35,23208,23209,23211,23213],{"class":37,"line":313},[35,23210,502],{"class":495},[35,23212,2314],{"class":48},[35,23214,2317],{"class":359},[35,23216,23217],{"class":37,"line":324},[35,23218,1907],{"class":359},[35,23220,23221,23223],{"class":37,"line":2955},[35,23222,5967],{"class":48},[35,23224,5970],{"class":359},[35,23226,23227],{"class":37,"line":8282},[35,23228,1926],{"class":359},[465,23230,23232],{"id":23231},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22332,23234,23236],{"id":23235},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[21,23238,23239],{},"在c++中，类内的成员变量和成员函数分开存储",[21,23241,23242],{},"只有非静态成员变量才属于类的对象上",[23244,23245,23247],"h5",{"id":23246},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[25,23249,23251],{"className":486,"code":23250,"language":488,"meta":30,"style":30},"#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",[32,23252,23253,23260,23270,23276,23280,23284,23288,23296,23300,23304,23327,23331,23339,23343,23349],{"__ignoreMap":30},[35,23254,23255,23257],{"class":37,"line":38},[35,23256,2291],{"class":495},[35,23258,23259],{"class":306},"\u003Ciostraem>\n",[35,23261,23262,23264,23266,23268],{"class":37,"line":45},[35,23263,2299],{"class":495},[35,23265,2302],{"class":495},[35,23267,2305],{"class":48},[35,23269,1655],{"class":359},[35,23271,23272,23274],{"class":37,"line":55},[35,23273,15028],{"class":495},[35,23275,15505],{"class":48},[35,23277,23278],{"class":37,"line":65},[35,23279,1907],{"class":359},[35,23281,23282],{"class":37,"line":74},[35,23283,141],{"emptyLinePlaceholder":140},[35,23285,23286],{"class":37,"line":83},[35,23287,4329],{"class":359},[35,23289,23290,23292,23294],{"class":37,"line":92},[35,23291,5698],{"class":495},[35,23293,5922],{"class":48},[35,23295,2317],{"class":359},[35,23297,23298],{"class":37,"line":101},[35,23299,1907],{"class":359},[35,23301,23302],{"class":37,"line":110},[35,23303,15647],{"class":359},[35,23305,23306,23308,23310,23313,23315,23318,23320,23322,23324],{"class":37,"line":119},[35,23307,1912],{"class":359},[35,23309,1538],{"class":495},[35,23311,23312],{"class":306},"\"size of p=\"",[35,23314,1538],{"class":495},[35,23316,23317],{"class":48},"sizeoif",[35,23319,6873],{"class":359},[35,23321,1538],{"class":495},[35,23323,1603],{"class":359},[35,23325,23326],{"class":41}," \u002F\u002F查看这个空类的占用的内存空间\n",[35,23328,23329],{"class":37,"line":128},[35,23330,1926],{"class":359},[35,23332,23333,23335,23337],{"class":37,"line":137},[35,23334,502],{"class":495},[35,23336,2314],{"class":48},[35,23338,2317],{"class":359},[35,23340,23341],{"class":37,"line":144},[35,23342,1907],{"class":359},[35,23344,23345,23347],{"class":37,"line":150},[35,23346,5967],{"class":48},[35,23348,5970],{"class":359},[35,23350,23351],{"class":37,"line":159},[35,23352,1926],{"class":359},[21,23354,23355],{},"输出结果为：size of p=1",[21,23357,23358],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[21,23360,23361],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23244,23363,23365],{"id":23364},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[25,23367,23369],{"className":486,"code":23368,"language":488,"meta":30,"style":30},"#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",[32,23370,23371,23377,23387,23395,23399,23408,23412,23420,23424,23428,23447,23451,23455,23463,23467,23473],{"__ignoreMap":30},[35,23372,23373,23375],{"class":37,"line":38},[35,23374,2291],{"class":495},[35,23376,2294],{"class":306},[35,23378,23379,23381,23383,23385],{"class":37,"line":45},[35,23380,2299],{"class":495},[35,23382,2302],{"class":495},[35,23384,2305],{"class":48},[35,23386,1655],{"class":359},[35,23388,23389,23391,23393],{"class":37,"line":55},[35,23390,15028],{"class":495},[35,23392,15903],{"class":48},[35,23394,3008],{"class":359},[35,23396,23397],{"class":37,"line":65},[35,23398,1907],{"class":359},[35,23400,23401,23403,23405],{"class":37,"line":74},[35,23402,2326],{"class":495},[35,23404,15782],{"class":359},[35,23406,23407],{"class":41},"\u002F\u002F非静态成员变量\n",[35,23409,23410],{"class":37,"line":83},[35,23411,4329],{"class":359},[35,23413,23414,23416,23418],{"class":37,"line":92},[35,23415,5698],{"class":495},[35,23417,5922],{"class":48},[35,23419,2317],{"class":359},[35,23421,23422],{"class":37,"line":101},[35,23423,1907],{"class":359},[35,23425,23426],{"class":37,"line":110},[35,23427,15647],{"class":359},[35,23429,23430,23432,23434,23436,23438,23440,23442,23444],{"class":37,"line":119},[35,23431,1912],{"class":359},[35,23433,1538],{"class":495},[35,23435,23312],{"class":306},[35,23437,1733],{"class":495},[35,23439,6873],{"class":359},[35,23441,1538],{"class":495},[35,23443,1603],{"class":359},[35,23445,23446],{"class":41}," \u002F\u002F查看不是空对象时占用多少内存\n",[35,23448,23449],{"class":37,"line":128},[35,23450,141],{"emptyLinePlaceholder":140},[35,23452,23453],{"class":37,"line":137},[35,23454,1926],{"class":359},[35,23456,23457,23459,23461],{"class":37,"line":144},[35,23458,502],{"class":495},[35,23460,2314],{"class":48},[35,23462,2317],{"class":359},[35,23464,23465],{"class":37,"line":150},[35,23466,1907],{"class":359},[35,23468,23469,23471],{"class":37,"line":159},[35,23470,5967],{"class":48},[35,23472,5970],{"class":359},[35,23474,23475],{"class":37,"line":168},[35,23476,1926],{"class":359},[21,23478,23479],{},"输出结果：size of p=4",[21,23481,23482],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[14,23484,23485],{},[17,23486,23487],{},"如果加上非静态成员变量，Person类修改如下",[25,23489,23491],{"className":486,"code":23490,"language":488,"meta":30,"style":30},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[32,23492,23493,23499,23503,23509,23517,23521,23526],{"__ignoreMap":30},[35,23494,23495,23497],{"class":37,"line":38},[35,23496,15028],{"class":495},[35,23498,15505],{"class":48},[35,23500,23501],{"class":37,"line":45},[35,23502,1907],{"class":359},[35,23504,23505,23507],{"class":37,"line":55},[35,23506,2326],{"class":495},[35,23508,21726],{"class":359},[35,23510,23511,23513,23515],{"class":37,"line":65},[35,23512,11354],{"class":495},[35,23514,2723],{"class":495},[35,23516,21733],{"class":359},[35,23518,23519],{"class":37,"line":74},[35,23520,4329],{"class":359},[35,23522,23523],{"class":37,"line":83},[35,23524,23525],{"class":41},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[35,23527,23528,23530,23532,23534,23536,23538],{"class":37,"line":92},[35,23529,502],{"class":495},[35,23531,15903],{"class":48},[35,23533,22746],{"class":359},[35,23535,544],{"class":495},[35,23537,687],{"class":58},[35,23539,1655],{"class":359},[21,23541,23542],{},"输出结果：4",[21,23544,23545],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[14,23547,23548],{"start":45},[17,23549,23550],{},"加上非静态成员函数",[25,23552,23554],{"className":486,"code":23553,"language":488,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[32,23555,23556,23563,23567,23573,23581,23585,23589,23593],{"__ignoreMap":30},[35,23557,23558,23560],{"class":37,"line":38},[35,23559,15028],{"class":495},[35,23561,23562],{"class":48},"  Person\n",[35,23564,23565],{"class":37,"line":45},[35,23566,1907],{"class":359},[35,23568,23569,23571],{"class":37,"line":55},[35,23570,2326],{"class":495},[35,23572,21726],{"class":359},[35,23574,23575,23577,23579],{"class":37,"line":65},[35,23576,15243],{"class":495},[35,23578,11719],{"class":48},[35,23580,2317],{"class":359},[35,23582,23583],{"class":37,"line":74},[35,23584,2371],{"class":359},[35,23586,23587],{"class":37,"line":83},[35,23588,141],{"emptyLinePlaceholder":140},[35,23590,23591],{"class":37,"line":92},[35,23592,2528],{"class":359},[35,23594,23595],{"class":37,"line":101},[35,23596,4329],{"class":359},[21,23598,23599],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[14,23601,23602],{"start":55},[17,23603,23604],{},"加上静态成员函数",[25,23606,23608],{"className":486,"code":23607,"language":488,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[32,23609,23610,23616,23620,23626,23634,23638,23642,23646,23657,23661,23665,23669],{"__ignoreMap":30},[35,23611,23612,23614],{"class":37,"line":38},[35,23613,15028],{"class":495},[35,23615,23562],{"class":48},[35,23617,23618],{"class":37,"line":45},[35,23619,1907],{"class":359},[35,23621,23622,23624],{"class":37,"line":55},[35,23623,2326],{"class":495},[35,23625,21726],{"class":359},[35,23627,23628,23630,23632],{"class":37,"line":65},[35,23629,15243],{"class":495},[35,23631,11719],{"class":48},[35,23633,2317],{"class":359},[35,23635,23636],{"class":37,"line":74},[35,23637,2371],{"class":359},[35,23639,23640],{"class":37,"line":83},[35,23641,141],{"emptyLinePlaceholder":140},[35,23643,23644],{"class":37,"line":92},[35,23645,2528],{"class":359},[35,23647,23648,23650,23652,23655],{"class":37,"line":101},[35,23649,11354],{"class":495},[35,23651,22901],{"class":495},[35,23653,23654],{"class":48}," func1",[35,23656,2317],{"class":359},[35,23658,23659],{"class":37,"line":110},[35,23660,2371],{"class":359},[35,23662,23663],{"class":37,"line":119},[35,23664,141],{"emptyLinePlaceholder":140},[35,23666,23667],{"class":37,"line":128},[35,23668,2528],{"class":359},[35,23670,23671],{"class":37,"line":137},[35,23672,4329],{"class":359},[21,23674,23542],{},[21,23676,23677],{},"解释：静态成员函数也不属于类上",[416,23679,8008],{},{"title":30,"searchDepth":45,"depth":45,"links":23681},[23682,23688],{"id":14979,"depth":45,"text":14980,"children":23683},[23684,23685,23686,23687],{"id":14983,"depth":55,"text":14984},{"id":15708,"depth":55,"text":15709},{"id":15880,"depth":55,"text":15881},{"id":16339,"depth":55,"text":16340},{"id":18711,"depth":45,"text":18712,"children":23689},[23690,23691,23692,23693,23694,23695,23696,23697,23698],{"id":18723,"depth":55,"text":18724},{"id":19016,"depth":55,"text":19017},{"id":19507,"depth":55,"text":19508},{"id":20604,"depth":55,"text":20605},{"id":21027,"depth":55,"text":21028},{"id":21506,"depth":55,"text":21507},{"id":21881,"depth":55,"text":21882},{"id":22294,"depth":55,"text":22295},{"id":23231,"depth":55,"text":23232},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14944,"description":23699},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23706,"title":488,"body":23707,"description":421,"extension":422,"meta":23711,"navigation":140,"path":23713,"seo":23714,"stem":23715,"__hash__":23716},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23708,"toc":23709},[],{"title":30,"searchDepth":45,"depth":45,"links":23710},[],{"category":23712},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":488,"description":421},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23718,"title":23719,"body":23720,"description":30,"extension":422,"meta":24310,"navigation":140,"path":24311,"seo":24312,"stem":24313,"__hash__":24314},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23721,"toc":24292},[23722,23725,23729,23732,23735,23738,23756,23761,23764,23767,23770,23773,23778,23781,23786,23789,23792,23796,23799,23802,23808,23811,23829,23833,23837,23840,23845,23848,23852,23855,23868,23871,23875,23878,23881,23884,23909,23912,23921,23932,23947,23979,23983,23990,23998,24002,24005,24008,24013,24017,24020,24023,24028,24031,24035,24038,24041,24046,24049,24053,24058,24062,24129,24133,24136,24139,24142,24145,24148,24154,24174,24177,24191,24200,24204,24207,24210,24215,24218,24223,24228,24231,24234,24239,24244,24247,24252,24257,24260,24265,24270,24273,24276,24281,24284,24289],[10,23723,23719],{"id":23724},"_1强化学习基本认识",[438,23726,23728],{"id":23727},"_11什么是强化学习","1.1.什么是强化学习",[21,23730,23731],{},"强化学习有两部分组成：智能体和环境；",[21,23733,23734],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[21,23736,23737],{},"强化学习与监督学习的区别:",[14,23739,23740,23743,23746,23749],{},[17,23741,23742],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[17,23744,23745],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[17,23747,23748],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[17,23750,23751,23752,23755],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[645,23753,23754],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[21,23757,23758],{},[1823,23759],{"alt":30,"src":23760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[21,23762,23763],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[21,23765,23766],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[21,23768,23769],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[21,23771,23772],{},"获取奖励",[21,23774,23775],{},[1823,23776],{"alt":30,"src":23777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[21,23779,23780],{},"强化学习可以分成标准强化学习和深度强化学习",[21,23782,23783],{},[1823,23784],{"alt":30,"src":23785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[21,23787,23788],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[21,23790,23791],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[438,23793,23795],{"id":23794},"_12强化学习应用场景","1.2.强化学习应用场景",[21,23797,23798],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[21,23800,23801],{},"具身智能中的应用",[21,23803,23804,23807],{},[645,23805,23806],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[21,23809,23810],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[21,23812,23813,23814,23817,23818,23821,23822,23825,23826],{},"机器人是",[645,23815,23816],{},"躯体","，深度学习是",[645,23819,23820],{},"神经元****网络","，VLA是",[645,23823,23824],{},"通用的行为逻辑","，而强化学习是",[645,23827,23828],{},"教练",[438,23830,23832],{"id":23831},"_13序列决策","1.3.序列决策",[465,23834,23836],{"id":23835},"_131智能体与环境","1.3.1.智能体与环境",[21,23838,23839],{},"强化学习研究的问题是智能体agent与环境交互的问题",[21,23841,23842],{},[1823,23843],{"alt":30,"src":23844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[21,23846,23847],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[465,23849,23851],{"id":23850},"_132奖励","1.3.2.奖励",[21,23853,23854],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[21,23856,23857,23858,23867],{},"取某个策略的表现如何。强化学习的目的就是",[645,23859,23860,23861,23866],{},"最大化",[645,23862,23863],{},[645,23864,23865],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[21,23869,23870],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[465,23872,23874],{"id":23873},"_133序列决策","1.3.3.序列决策",[21,23876,23877],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[21,23879,23880],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[21,23882,23883],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[21,23885,23886,23890,23891,23893,23894,23896,23897,23899,23900,14129,23903,14129,23906],{},[23887,23888,23889],"em",{},"Ht"," = ",[23887,23892,1090],{},"1*, a",[23887,23895,713],{},", r",[23887,23898,713],{},", . . . ,* ",[23887,23901,23902],{},"ot",[23887,23904,23905],{},", at ,",[23887,23907,23908],{},"rt",[21,23910,23911],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[21,23913,23914,23890,23917,2012,23919,923],{},[23887,23915,23916],{},"st",[23887,23918,550],{},[23887,23920,23889],{},[21,23922,23923,23924,23927,23928,23931],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[645,23925,23926],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[645,23929,23930],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[21,23933,23934,23935,23938,23939,23942,23943,23946],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[645,23936,23937],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[645,23940,23941],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23887,23944,23945],{},"S, A, T, R, Ω, O, γ",")。",[21,23948,23949,23950,23952,23953,23955,23956,499,23958,23961,23962,23964,23965,499,23968,23971,23972,23974,23975,23978],{},"其中 ",[23887,23951,1183],{}," 表示状态空间，为隐变量，",[23887,23954,728],{}," 为动作空间，",[23887,23957,1208],{},[23887,23959,23960],{},"s ′ |s, a",") 为状态转移概率，",[23887,23963,1158],{}," 为奖励函数，",[23887,23966,23967],{},"Ω",[23887,23969,23970],{},"o|s, a",") 为观测概率，",[23887,23973,1084],{}," 为观测空间，",[23887,23976,23977],{},"γ"," 为折扣因子。",[438,23980,23982],{"id":23981},"_14动作空间","1.4.动作空间",[21,23984,23985,23986,23989],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[645,23987,23988],{},"动作空间"," ，动作空间分为:",[14,23991,23992,23995],{},[17,23993,23994],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[17,23996,23997],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[438,23999,24001],{"id":24000},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[21,24003,24004],{},"由策略、价值函数、模型三部分组成",[21,24006,24007],{},"这三者组成马尔可夫决策过程",[21,24009,24010],{},[1823,24011],{"alt":30,"src":24012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[465,24014,24016],{"id":24015},"_151策略","1.5.1.策略",[21,24018,24019],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[21,24021,24022],{},"策略可分为两种：",[21,24024,24025],{},[1823,24026],{"alt":30,"src":24027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[21,24029,24030],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[465,24032,24034],{"id":24033},"_152价值函数","1.5.2.价值函数",[21,24036,24037],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[21,24039,24040],{},"价值函数中有一个折扣因子，类似于存款利息",[21,24042,24043],{},[1823,24044],{"alt":30,"src":24045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[21,24047,24048],{},"进入某个状态采取的最优动作可以通过Q函数得到",[465,24050,24052],{"id":24051},"_153模型","1.5.3.模型",[21,24054,24055],{},[1823,24056],{"alt":30,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[438,24059,24061],{"id":24060},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[633,24063,24064,24075],{},[636,24065,24066],{},[639,24067,24068,24072],{},[642,24069,24071],{"align":24070},"left","类型",[642,24073,24074],{"align":24070},"特点",[680,24076,24077,24087,24097,24107,24119],{},[639,24078,24079,24084],{},[685,24080,24081],{"align":24070},[645,24082,24083],{},"基于价值的智能体",[685,24085,24086],{"align":24070},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[639,24088,24089,24094],{},[685,24090,24091],{"align":24070},[645,24092,24093],{},"基于策略的智能体",[685,24095,24096],{"align":24070},"直接学习策略，没有学习价值函数",[639,24098,24099,24104],{},[685,24100,24101],{"align":24070},[645,24102,24103],{},"演员-评论员智能体",[685,24105,24106],{"align":24070},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[639,24108,24109,24114],{},[685,24110,24111],{"align":24070},[645,24112,24113],{},"有模型强化学习智能体",[685,24115,24116],{"align":24070},[1823,24117],{"alt":30,"src":24118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[639,24120,24121,24126],{},[685,24122,24123],{"align":24070},[645,24124,24125],{},"免模型强化学习智能体",[685,24127,24128],{"align":24070},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[438,24130,24132],{"id":24131},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[21,24134,24135],{},"学习和规划是序列决策的两个基本问题",[21,24137,24138],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[21,24140,24141],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[21,24143,24144],{},"强化学习用到的库：Gym",[21,24146,24147],{},"Gym可以检验强化学习算法的优劣",[21,24149,24150,24153],{},[645,24151,24152],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[25,24155,24159],{"className":24156,"code":24157,"language":24158,"meta":30,"style":30},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[32,24160,24161],{"__ignoreMap":30},[35,24162,24163,24166,24168,24171],{"class":37,"line":38},[35,24164,24165],{"class":48},"pip",[35,24167,318],{"class":306},[35,24169,24170],{"class":306}," gym==",[35,24172,24173],{"class":58},"0.25.2\n",[21,24175,24176],{},"显示图形界面需要",[25,24178,24180],{"className":24156,"code":24179,"language":24158,"meta":30,"style":30},"pip install pygame\n",[32,24181,24182],{"__ignoreMap":30},[35,24183,24184,24186,24188],{"class":37,"line":38},[35,24185,24165],{"class":48},[35,24187,318],{"class":306},[35,24189,24190],{"class":306}," pygame\n",[21,24192,24193,24194],{},"有关Gym库的相关文档介绍：",[734,24195,24199],{"href":24196,"rel":24197},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24198],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[438,24201,24203],{"id":24202},"_18一些补充基础概念","1.8.一些补充基础概念",[21,24205,24206],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[21,24208,24209],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[21,24211,24212],{},[1823,24213],{"alt":30,"src":24214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[21,24216,24217],{},"折扣率需要自己来设定",[21,24219,24220],{},[1823,24221],{"alt":30,"src":24222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[14,24224,24225],{},[17,24226,24227],{},"状态转移函数：",[21,24229,24230],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[21,24232,24233],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[21,24235,24236],{},[1823,24237],{"alt":30,"src":24238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[14,24240,24241],{"start":45},[17,24242,24243],{},"动作价值函数：",[21,24245,24246],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[21,24248,24249],{},[1823,24250],{"alt":30,"src":24251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[14,24253,24254],{"start":55},[17,24255,24256],{},"最优动作价值函数：",[21,24258,24259],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[21,24261,24262],{},[1823,24263],{"alt":30,"src":24264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[14,24266,24267],{"start":65},[17,24268,24269],{},"状态价值函数:",[21,24271,24272],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[21,24274,24275],{},"它衡量的是“一个具体动作”的长期价值",[21,24277,24278],{},[1823,24279],{"alt":30,"src":24280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[21,24282,24283],{},"几个价值函数之间的比较：",[21,24285,24286],{},[1823,24287],{"alt":30,"src":24288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[416,24290,24291],{},"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":30,"searchDepth":45,"depth":45,"links":24293},[24294,24295,24296,24301,24302,24307,24308,24309],{"id":23727,"depth":45,"text":23728},{"id":23794,"depth":45,"text":23795},{"id":23831,"depth":45,"text":23832,"children":24297},[24298,24299,24300],{"id":23835,"depth":55,"text":23836},{"id":23850,"depth":55,"text":23851},{"id":23873,"depth":55,"text":23874},{"id":23981,"depth":45,"text":23982},{"id":24000,"depth":45,"text":24001,"children":24303},[24304,24305,24306],{"id":24015,"depth":55,"text":24016},{"id":24033,"depth":55,"text":24034},{"id":24051,"depth":55,"text":24052},{"id":24060,"depth":45,"text":24061},{"id":24131,"depth":45,"text":24132},{"id":24202,"depth":45,"text":24203},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23719,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24316,"title":24317,"body":24318,"description":24325,"extension":422,"meta":24336,"navigation":140,"path":24337,"seo":24338,"stem":24339,"__hash__":24340},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24319,"toc":24334},[24320,24323,24326,24331],[10,24321,24317],{"id":24322},"_2马尔可夫决策过程",[21,24324,24325],{},"这是强化学习的基本框架",[21,24327,24328],{},[1823,24329],{"alt":30,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[21,24332,24333],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":30,"searchDepth":45,"depth":45,"links":24335},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24317,"description":24325},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24342,"title":24343,"body":24344,"description":30,"extension":422,"meta":24460,"navigation":140,"path":24461,"seo":24462,"stem":24463,"__hash__":24464},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24345,"toc":24455},[24346,24349,24353,24356,24361,24366,24369,24374,24377,24382,24385,24389,24394,24397,24402,24407,24412,24415,24419,24424,24427,24432,24437,24442,24447,24450],[10,24347,24343],{"id":24348},"_3动作价值函数",[438,24350,24352],{"id":24351},"_31dqn","3.1.DQN",[21,24354,24355],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[21,24357,24358],{},[1823,24359],{"alt":30,"src":24360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[21,24362,24363],{},[1823,24364],{"alt":30,"src":24365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[21,24367,24368],{},"DQN算法的描述：",[21,24370,24371],{},[1823,24372],{"alt":30,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[21,24375,24376],{},"这里的Dense指的是全连接层",[21,24378,24379],{},[1823,24380],{"alt":30,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[21,24383,24384],{},"当前观测的状态为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算法",[438,24386,24388],{"id":24387},"_32dqn的举例","3.2.DQN的举例",[21,24390,24391],{},[1823,24392],{"alt":30,"src":24393},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[21,24395,24396],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[21,24398,24399],{},[1823,24400],{"alt":30,"src":24401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[21,24403,24404],{},[1823,24405],{"alt":30,"src":24406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[21,24408,24409],{},[1823,24410],{"alt":30,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[21,24413,24414],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[438,24416,24418],{"id":24417},"_33td算法","3.3.TD算法",[21,24420,24421],{},[1823,24422],{"alt":30,"src":24423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[21,24425,24426],{},"强化学习TD算法公式的粗略解释：",[21,24428,24429],{},[1823,24430],{"alt":30,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[21,24433,24434],{},[1823,24435],{"alt":30,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[21,24438,24439],{},[1823,24440],{"alt":30,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[21,24443,24444],{},[1823,24445],{"alt":30,"src":24446},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[21,24448,24449],{},"TD算法总结：",[21,24451,24452],{},[1823,24453],{"alt":30,"src":24454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":30,"searchDepth":45,"depth":45,"links":24456},[24457,24458,24459],{"id":24351,"depth":45,"text":24352},{"id":24387,"depth":45,"text":24388},{"id":24417,"depth":45,"text":24418},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24343,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24466,"title":24467,"body":24468,"description":30,"extension":422,"meta":24701,"navigation":140,"path":24702,"seo":24703,"stem":24704,"__hash__":24705},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24469,"toc":24697},[24470,24473,24477,24480,24483,24488,24493,24496,24501,24506,24509,24514,24517,24522,24525,24530,24533,24538,24541,24546,24551,24554,24559,24562,24565,24570,24573,24578,24583,24587,24590,24593,24598,24603,24606,24611,24616,24619,24624,24627,24630,24635,24638,24643,24646,24651,24656,24659,24664,24669,24672,24677,24680,24685,24688],[10,24471,24467],{"id":24472},"_4策略学习",[438,24474,24476],{"id":24475},"_41概念描述","4.1.概念描述",[21,24478,24479],{},"用神经网络（策略网络）近似策略函数",[21,24481,24482],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[21,24484,24485],{},[1823,24486],{"alt":30,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[21,24489,24490],{},[1823,24491],{"alt":30,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[21,24494,24495],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[21,24497,24498],{},[1823,24499],{"alt":30,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[21,24502,24503],{},[1823,24504],{"alt":30,"src":24505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[21,24507,24508],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[21,24510,24511],{},[1823,24512],{"alt":30,"src":24513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[21,24515,24516],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[21,24518,24519],{},[1823,24520],{"alt":30,"src":24521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[21,24523,24524],{},"改进theta要用到策略梯度算法",[21,24526,24527],{},[1823,24528],{"alt":30,"src":24529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[21,24531,24532],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[21,24534,24535],{},[1823,24536],{"alt":30,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[21,24539,24540],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[21,24542,24543],{},[1823,24544],{"alt":30,"src":24545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[21,24547,24548],{},[1823,24549],{"alt":30,"src":24550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[21,24552,24553],{},"梯度公式总结：",[21,24555,24556],{},[1823,24557],{"alt":30,"src":24558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[21,24560,24561],{},"两个公式的分别应用场景：",[21,24563,24564],{},"对于离散的动作：",[21,24566,24567],{},[1823,24568],{"alt":30,"src":24569},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[21,24571,24572],{},"对于连续的动作：",[21,24574,24575],{},[1823,24576],{"alt":30,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[21,24579,24580],{},[1823,24581],{"alt":30,"src":24582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[438,24584,24586],{"id":24585},"_42概率梯度算法总结","4.2.概率梯度算法总结",[21,24588,24589],{},"使用蒙特卡洛来近似计算策略梯度",[21,24591,24592],{},"蒙特卡洛法的解释如下：",[21,24594,24595],{},[1823,24596],{"alt":30,"src":24597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[21,24599,24600],{},[1823,24601],{"alt":30,"src":24602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[21,24604,24605],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[14,24607,24608],{},[17,24609,24610],{},"方法一：reinforce算法",[21,24612,24613],{},[1823,24614],{"alt":30,"src":24615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[21,24617,24618],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[14,24620,24621],{"start":45},[17,24622,24623],{},"方法二：actor-critic算法",[21,24625,24626],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[21,24628,24629],{},"两个网络的构建：",[21,24631,24632],{},[1823,24633],{"alt":30,"src":24634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[21,24636,24637],{},"actor网路：",[21,24639,24640],{},[1823,24641],{"alt":30,"src":24642},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[21,24644,24645],{},"critic网络",[21,24647,24648],{},[1823,24649],{"alt":30,"src":24650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[14,24652,24653],{"start":55},[17,24654,24655],{},"网络的训练",[21,24657,24658],{},"网络描述",[21,24660,24661],{},[1823,24662],{"alt":30,"src":24663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[21,24665,24666],{},[1823,24667],{"alt":30,"src":24668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[21,24670,24671],{},"TD算法更新梯度：",[21,24673,24674],{},[1823,24675],{"alt":30,"src":24676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[21,24678,24679],{},"策略网络更新梯度：",[21,24681,24682],{},[1823,24683],{"alt":30,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[21,24686,24687],{},"训练整个流程的具体描述：",[21,24689,24690,24693,24694],{},[1823,24691],{"alt":30,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1823,24695],{"alt":30,"src":24696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":30,"searchDepth":45,"depth":45,"links":24698},[24699,24700],{"id":24475,"depth":45,"text":24476},{"id":24585,"depth":45,"text":24586},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24467,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24707,"title":24708,"body":24709,"description":24716,"extension":422,"meta":24766,"navigation":140,"path":24767,"seo":24768,"stem":24769,"__hash__":24770},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24710,"toc":24762},[24711,24714,24717,24721,24724,24729,24733,24736,24741,24744,24749,24754,24757],[10,24712,24708],{"id":24713},"_5alphago算法",[21,24715,24716],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[438,24718,24720],{"id":24719},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[21,24722,24723],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[21,24725,24726],{},[1823,24727],{"alt":30,"src":24728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[438,24730,24732],{"id":24731},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[21,24734,24735],{},"采用强化学习的方式训练策略网络",[21,24737,24738],{},[1823,24739],{"alt":30,"src":24740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[21,24742,24743],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[21,24745,24746],{},[1823,24747],{"alt":30,"src":24748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[21,24750,24751],{},[1823,24752],{"alt":30,"src":24753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[21,24755,24756],{},"强化学习训练策略网络的总结：",[21,24758,24759],{},[1823,24760],{"alt":30,"src":24761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":30,"searchDepth":45,"depth":45,"links":24763},[24764,24765],{"id":24719,"depth":45,"text":24720},{"id":24731,"depth":45,"text":24732},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24708,"description":24716},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24772,"title":24773,"body":24774,"description":24781,"extension":422,"meta":24784,"navigation":140,"path":24785,"seo":24786,"stem":24787,"__hash__":24788},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24775,"toc":24782},[24776,24779],[10,24777,24773],{"id":24778},"_6价值网络",[21,24780,24781],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":30,"searchDepth":45,"depth":45,"links":24783},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24773,"description":24781},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24790,"title":24791,"body":24792,"description":24796,"extension":422,"meta":24797,"navigation":140,"path":24798,"seo":24799,"stem":24800,"__hash__":24801},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24793,"toc":24794},[],{"title":30,"searchDepth":45,"depth":45,"links":24795},[],"记录自己的强化学习笔记。",{"category":23712},"\u002Fwiki\u002F2025-12-04",{"title":24791,"description":24796},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24803,"title":24804,"body":24805,"description":421,"extension":422,"meta":24844,"navigation":140,"path":24845,"seo":24846,"stem":24847,"__hash__":24848},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24806,"toc":24842},[24807,24810,24813,24819,24822,24828,24831,24836,24839],[10,24808,24804],{"id":24809},"_1-项目概览与官方资源",[21,24811,24812],{},"官方文档：",[21,24814,24815],{},[734,24816,24817],{"href":24817,"rel":24818},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24198],[21,24820,24821],{},"官方代码仓库：",[21,24823,24824],{},[734,24825,24826],{"href":24826,"rel":24827},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24198],[21,24829,24830],{},"复现大体流程：",[21,24832,24833],{},[1823,24834],{"alt":30,"src":24835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[21,24837,24838],{},"本教程的目标是打通这条链路：",[21,24840,24841],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":30,"searchDepth":45,"depth":45,"links":24843},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24804,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24850,"title":24851,"body":24852,"description":421,"extension":422,"meta":24966,"navigation":140,"path":24967,"seo":24968,"stem":24969,"__hash__":24970},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24853,"toc":24961},[24854,24857,24861,24864,24871,24875,24878,24887,24897,24901,24930,24933,24958],[10,24855,24851],{"id":24856},"_2-环境准备与设备连接",[438,24858,24860],{"id":24859},"_21-系统与环境","2.1 系统与环境",[21,24862,24863],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[21,24865,24866,24867,24870],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[32,24868,24869],{},"lerobot"," 依赖。",[438,24872,24874],{"id":24873},"_22-机械臂串口识别","2.2 机械臂串口识别",[21,24876,24877],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[25,24879,24881],{"className":24156,"code":24880,"language":24158,"meta":30,"style":30},"lerobot-find-out\n",[32,24882,24883],{"__ignoreMap":30},[35,24884,24885],{"class":37,"line":38},[35,24886,24880],{"class":48},[21,24888,24889,24890,708,24893,24896],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[32,24891,24892],{},"\u002Fdev\u002FttyACM0",[32,24894,24895],{},"\u002Fdev\u002FttyACM1","）。",[438,24898,24900],{"id":24899},"_23-串口授权","2.3 串口授权",[25,24902,24904],{"className":24156,"code":24903,"language":24158,"meta":30,"style":30},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[32,24905,24906,24919],{"__ignoreMap":30},[35,24907,24908,24910,24913,24916],{"class":37,"line":38},[35,24909,171],{"class":48},[35,24911,24912],{"class":306}," chmod",[35,24914,24915],{"class":58}," 666",[35,24917,24918],{"class":306}," \u002Fdev\u002FttyACM0\n",[35,24920,24921,24923,24925,24927],{"class":37,"line":45},[35,24922,171],{"class":48},[35,24924,24912],{"class":306},[35,24926,24915],{"class":58},[35,24928,24929],{"class":306}," \u002Fdev\u002FttyACM1\n",[21,24931,24932],{},"说明：",[1501,24934,24935,24940,24945,24955],{},[17,24936,24937,24939],{},[32,24938,171],{},"：以 root 权限执行命令。",[17,24941,24942,24944],{},[32,24943,153],{},"：修改设备节点权限。",[17,24946,24947,24950,24951,24954],{},[32,24948,24949],{},"666","：",[32,24952,24953],{},"rw-rw-rw-","，所有用户可读写。",[17,24956,24957],{},"串口号必须替换为你机器上的真实端口。",[416,24959,24960],{},"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":30,"searchDepth":45,"depth":45,"links":24962},[24963,24964,24965],{"id":24859,"depth":45,"text":24860},{"id":24873,"depth":45,"text":24874},{"id":24899,"depth":45,"text":24900},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24851,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24972,"title":24973,"body":24974,"description":421,"extension":422,"meta":25135,"navigation":140,"path":25136,"seo":25137,"stem":25138,"__hash__":25139},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24975,"toc":25131},[24976,24980,24984,24990,24993,25050,25053,25057,25060,25128],[10,24977,24979],{"id":24978},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[438,24981,24983],{"id":24982},"_31-配置电机-id","3.1 配置电机 ID",[21,24985,24986,24987,24989],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[32,24988,713],{},"，需要改成机械臂链路里不冲突的编号。",[21,24991,24992],{},"方式一：用 LeRobot 命令逐步写入。",[25,24994,24996],{"className":24156,"code":24995,"language":24158,"meta":30,"style":30},"# 主臂舵机配置 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",[32,24997,24998,25003,25011,25018,25023,25027,25032,25038,25045],{"__ignoreMap":30},[35,24999,25000],{"class":37,"line":38},[35,25001,25002],{"class":41},"# 主臂舵机配置 ID\n",[35,25004,25005,25008],{"class":37,"line":45},[35,25006,25007],{"class":48},"lerobot-setup-motors",[35,25009,25010],{"class":58}," \\\n",[35,25012,25013,25016],{"class":37,"line":55},[35,25014,25015],{"class":58},"  --teleop.type=so101_leader",[35,25017,25010],{"class":58},[35,25019,25020],{"class":37,"line":65},[35,25021,25022],{"class":58},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[35,25024,25025],{"class":37,"line":74},[35,25026,141],{"emptyLinePlaceholder":140},[35,25028,25029],{"class":37,"line":83},[35,25030,25031],{"class":41},"# 从臂舵机配置 ID\n",[35,25033,25034,25036],{"class":37,"line":92},[35,25035,25007],{"class":48},[35,25037,25010],{"class":58},[35,25039,25040,25043],{"class":37,"line":101},[35,25041,25042],{"class":58},"  --robot.type=so101_follower",[35,25044,25010],{"class":58},[35,25046,25047],{"class":37,"line":110},[35,25048,25049],{"class":58},"  --robot.port=\u002Fdev\u002FttyACM1\n",[21,25051,25052],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[438,25054,25056],{"id":25055},"_32-机械臂校准","3.2 机械臂校准",[21,25058,25059],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[25,25061,25063],{"className":24156,"code":25062,"language":24158,"meta":30,"style":30},"# 主臂校准\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",[32,25064,25065,25070,25077,25083,25090,25095,25099,25104,25110,25116,25123],{"__ignoreMap":30},[35,25066,25067],{"class":37,"line":38},[35,25068,25069],{"class":41},"# 主臂校准\n",[35,25071,25072,25075],{"class":37,"line":45},[35,25073,25074],{"class":48},"lerobot-calibrate",[35,25076,25010],{"class":58},[35,25078,25079,25081],{"class":37,"line":55},[35,25080,25015],{"class":58},[35,25082,25010],{"class":58},[35,25084,25085,25088],{"class":37,"line":65},[35,25086,25087],{"class":58},"  --teleop.port=\u002Fdev\u002FttyACM0",[35,25089,25010],{"class":58},[35,25091,25092],{"class":37,"line":74},[35,25093,25094],{"class":58},"  --teleop.id=my_awesome_leader_arm\n",[35,25096,25097],{"class":37,"line":83},[35,25098,141],{"emptyLinePlaceholder":140},[35,25100,25101],{"class":37,"line":92},[35,25102,25103],{"class":41},"# 从臂校准\n",[35,25105,25106,25108],{"class":37,"line":101},[35,25107,25074],{"class":48},[35,25109,25010],{"class":58},[35,25111,25112,25114],{"class":37,"line":110},[35,25113,25042],{"class":58},[35,25115,25010],{"class":58},[35,25117,25118,25121],{"class":37,"line":119},[35,25119,25120],{"class":58},"  --robot.port=\u002Fdev\u002FttyACM1",[35,25122,25010],{"class":58},[35,25124,25125],{"class":37,"line":128},[35,25126,25127],{"class":58},"  --robot.id=my_awesome_follower_arm\n",[416,25129,25130],{},"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":30,"searchDepth":45,"depth":45,"links":25132},[25133,25134],{"id":24982,"depth":45,"text":24983},{"id":25055,"depth":45,"text":25056},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24973,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25141,"title":25142,"body":25143,"description":421,"extension":422,"meta":25334,"navigation":140,"path":25335,"seo":25336,"stem":25337,"__hash__":25338},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25144,"toc":25330},[25145,25148,25152,25199,25203,25216,25279,25282,25327],[10,25146,25142],{"id":25147},"_4-遥操与相机接入",[438,25149,25151],{"id":25150},"_41-不带相机遥操","4.1 不带相机遥操",[25,25153,25155],{"className":24156,"code":25154,"language":24158,"meta":30,"style":30},"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",[32,25156,25157,25164,25170,25176,25183,25189,25195],{"__ignoreMap":30},[35,25158,25159,25162],{"class":37,"line":38},[35,25160,25161],{"class":48},"lerobot-teleoperate",[35,25163,25010],{"class":58},[35,25165,25166,25168],{"class":37,"line":45},[35,25167,25042],{"class":58},[35,25169,25010],{"class":58},[35,25171,25172,25174],{"class":37,"line":55},[35,25173,25120],{"class":58},[35,25175,25010],{"class":58},[35,25177,25178,25181],{"class":37,"line":65},[35,25179,25180],{"class":58},"  --robot.id=my_awesome_follower_arm",[35,25182,25010],{"class":58},[35,25184,25185,25187],{"class":37,"line":74},[35,25186,25015],{"class":58},[35,25188,25010],{"class":58},[35,25190,25191,25193],{"class":37,"line":83},[35,25192,25087],{"class":58},[35,25194,25010],{"class":58},[35,25196,25197],{"class":37,"line":92},[35,25198,25094],{"class":58},[438,25200,25202],{"id":25201},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[25,25204,25206],{"className":24156,"code":25205,"language":24158,"meta":30,"style":30},"lerobot-find-cameras opencv\n",[32,25207,25208],{"__ignoreMap":30},[35,25209,25210,25213],{"class":37,"line":38},[35,25211,25212],{"class":48},"lerobot-find-cameras",[35,25214,25215],{"class":306}," opencv\n",[25,25217,25219],{"className":24156,"code":25218,"language":24158,"meta":30,"style":30},"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",[32,25220,25221,25227,25233,25239,25245,25255,25261,25267,25274],{"__ignoreMap":30},[35,25222,25223,25225],{"class":37,"line":38},[35,25224,25161],{"class":48},[35,25226,25010],{"class":58},[35,25228,25229,25231],{"class":37,"line":45},[35,25230,25042],{"class":58},[35,25232,25010],{"class":58},[35,25234,25235,25237],{"class":37,"line":55},[35,25236,25120],{"class":58},[35,25238,25010],{"class":58},[35,25240,25241,25243],{"class":37,"line":65},[35,25242,25180],{"class":58},[35,25244,25010],{"class":58},[35,25246,25247,25250,25253],{"class":37,"line":74},[35,25248,25249],{"class":58},"  --robot.cameras=",[35,25251,25252],{"class":306},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[35,25254,25010],{"class":58},[35,25256,25257,25259],{"class":37,"line":83},[35,25258,25015],{"class":58},[35,25260,25010],{"class":58},[35,25262,25263,25265],{"class":37,"line":92},[35,25264,25087],{"class":58},[35,25266,25010],{"class":58},[35,25268,25269,25272],{"class":37,"line":101},[35,25270,25271],{"class":58},"  --teleop.id=my_awesome_leader_arm",[35,25273,25010],{"class":58},[35,25275,25276],{"class":37,"line":110},[35,25277,25278],{"class":58},"  --display_data=true\n",[21,25280,25281],{},"相机参数说明：",[1501,25283,25284,25290,25296,25305,25315,25321],{},[17,25285,25286,25289],{},[32,25287,25288],{},"front","：相机名称。",[17,25291,25292,25295],{},[32,25293,25294],{},"type: opencv","：相机驱动类型。",[17,25297,25298,25301,25302,24896],{},[32,25299,25300],{},"index_or_path","：设备编号或设备路径（如 ",[32,25303,25304],{},"\u002Fdev\u002Fvideo4",[17,25306,25307,25310,25311,25314],{},[32,25308,25309],{},"width"," \u002F ",[32,25312,25313],{},"height","：图像分辨率。",[17,25316,25317,25320],{},[32,25318,25319],{},"fps","：采样帧率。",[17,25322,25323,25326],{},[32,25324,25325],{},"--display_data=true","：启用实时可视化。",[416,25328,25329],{},"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":30,"searchDepth":45,"depth":45,"links":25331},[25332,25333],{"id":25150,"depth":45,"text":25151},{"id":25201,"depth":45,"text":25202},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25142,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25340,"title":25341,"body":25342,"description":421,"extension":422,"meta":25514,"navigation":140,"path":25515,"seo":25516,"stem":25517,"__hash__":25518},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25343,"toc":25509},[25344,25348,25352,25357,25362,25365,25407,25413,25417,25466,25471,25475,25478,25486,25491,25496,25501,25506],[10,25345,25347],{"id":25346},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[438,25349,25351],{"id":25350},"_51-生成访问令牌","5.1 生成访问令牌",[21,25353,25354],{},[1823,25355],{"alt":30,"src":25356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[21,25358,25359],{},[1823,25360],{"alt":30,"src":25361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[21,25363,25364],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[25,25366,25368],{"className":24156,"code":25367,"language":24158,"meta":30,"style":30},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[32,25369,25370,25383],{"__ignoreMap":30},[35,25371,25372,25375,25378,25380],{"class":37,"line":38},[35,25373,25374],{"class":495},"export",[35,25376,25377],{"class":359}," HF_TOKEN",[35,25379,544],{"class":495},[35,25381,25382],{"class":306},"\"your_huggingface_token\"\n",[35,25384,25385,25388,25391,25394,25397,25399,25402,25404],{"class":37,"line":45},[35,25386,25387],{"class":48},"hf",[35,25389,25390],{"class":306}," auth",[35,25392,25393],{"class":306}," login",[35,25395,25396],{"class":58}," --token",[35,25398,10058],{"class":306},[35,25400,25401],{"class":359},"$HF_TOKEN",[35,25403,747],{"class":306},[35,25405,25406],{"class":58}," --add-to-git-credential\n",[21,25408,25409,25412],{},[32,25410,25411],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[438,25414,25416],{"id":25415},"_52-验证登录","5.2 验证登录",[25,25418,25420],{"className":24156,"code":25419,"language":24158,"meta":30,"style":30},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[32,25421,25422,25453],{"__ignoreMap":30},[35,25423,25424,25427,25429,25432,25434,25436,25439,25442,25445,25448,25451],{"class":37,"line":38},[35,25425,25426],{"class":359},"HF_USER",[35,25428,544],{"class":495},[35,25430,25431],{"class":359},"$(",[35,25433,25387],{"class":48},[35,25435,25390],{"class":306},[35,25437,25438],{"class":306}," whoami",[35,25440,25441],{"class":495}," |",[35,25443,25444],{"class":48}," head",[35,25446,25447],{"class":58}," -n",[35,25449,25450],{"class":58}," 1",[35,25452,505],{"class":359},[35,25454,25455,25458,25460,25463],{"class":37,"line":45},[35,25456,25457],{"class":58},"echo",[35,25459,10058],{"class":306},[35,25461,25462],{"class":359},"$HF_USER",[35,25464,25465],{"class":306},"\"\n",[21,25467,25468],{},[1823,25469],{"alt":30,"src":25470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[438,25472,25474],{"id":25473},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[21,25476,25477],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1501,25479,25480,25483],{},[17,25481,25482],{},"Dataset Repo（用于上传演示数据）",[17,25484,25485],{},"Model Repo（用于上传训练后的 ACT 权重）",[21,25487,25488],{},[1823,25489],{"alt":30,"src":25490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[21,25492,25493],{},[1823,25494],{"alt":30,"src":25495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[21,25497,25498],{},[1823,25499],{"alt":30,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[21,25502,25503],{},[1823,25504],{"alt":30,"src":25505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[416,25507,25508],{},"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":30,"searchDepth":45,"depth":45,"links":25510},[25511,25512,25513],{"id":25350,"depth":45,"text":25351},{"id":25415,"depth":45,"text":25416},{"id":25473,"depth":45,"text":25474},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25341,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25520,"title":25521,"body":25522,"description":421,"extension":422,"meta":25718,"navigation":140,"path":25719,"seo":25720,"stem":25721,"__hash__":25722},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25523,"toc":25713},[25524,25528,25532,25628,25636,25641,25645,25660,25663,25667,25710],[10,25525,25527],{"id":25526},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[438,25529,25531],{"id":25530},"_61-录制示教数据","6.1 录制示教数据",[25,25533,25535],{"className":24156,"code":25534,"language":24158,"meta":30,"style":30},"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",[32,25536,25537,25544,25550,25556,25562,25571,25577,25583,25589,25596,25606,25613,25623],{"__ignoreMap":30},[35,25538,25539,25542],{"class":37,"line":38},[35,25540,25541],{"class":48},"lerobot-record",[35,25543,25010],{"class":58},[35,25545,25546,25548],{"class":37,"line":45},[35,25547,25042],{"class":58},[35,25549,25010],{"class":58},[35,25551,25552,25554],{"class":37,"line":55},[35,25553,25120],{"class":58},[35,25555,25010],{"class":58},[35,25557,25558,25560],{"class":37,"line":65},[35,25559,25180],{"class":58},[35,25561,25010],{"class":58},[35,25563,25564,25566,25569],{"class":37,"line":74},[35,25565,25249],{"class":58},[35,25567,25568],{"class":306},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[35,25570,25010],{"class":58},[35,25572,25573,25575],{"class":37,"line":83},[35,25574,25015],{"class":58},[35,25576,25010],{"class":58},[35,25578,25579,25581],{"class":37,"line":92},[35,25580,25087],{"class":58},[35,25582,25010],{"class":58},[35,25584,25585,25587],{"class":37,"line":101},[35,25586,25271],{"class":58},[35,25588,25010],{"class":58},[35,25590,25591,25594],{"class":37,"line":110},[35,25592,25593],{"class":58},"  --display_data=true",[35,25595,25010],{"class":58},[35,25597,25598,25601,25604],{"class":37,"line":119},[35,25599,25600],{"class":58},"  --dataset.repo_id=",[35,25602,25603],{"class":306},"\"Embodied-AI-6\u002Fso101_test\"",[35,25605,25010],{"class":58},[35,25607,25608,25611],{"class":37,"line":128},[35,25609,25610],{"class":58},"  --dataset.num_episodes=10",[35,25612,25010],{"class":58},[35,25614,25615,25618,25621],{"class":37,"line":137},[35,25616,25617],{"class":58},"  --dataset.single_task=",[35,25619,25620],{"class":306},"\"Grab the green cube\"",[35,25622,25010],{"class":58},[35,25624,25625],{"class":37,"line":144},[35,25626,25627],{"class":58},"  --resume=true\n",[1501,25629,25630],{},[17,25631,25632,25635],{},[32,25633,25634],{},"--resume=true","：已有同一数据集时继续追加 episode。",[21,25637,25638],{},[1823,25639],{"alt":30,"src":25640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[438,25642,25644],{"id":25643},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[25,25646,25648],{"className":24156,"code":25647,"language":24158,"meta":30,"style":30},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[32,25649,25650],{"__ignoreMap":30},[35,25651,25652,25654,25657],{"class":37,"line":38},[35,25653,86],{"class":48},[35,25655,25656],{"class":58}," -rf",[35,25658,25659],{"class":306}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[21,25661,25662],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[438,25664,25666],{"id":25665},"_63-回放指定-episode","6.3 回放指定 episode",[25,25668,25670],{"className":24156,"code":25669,"language":24158,"meta":30,"style":30},"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",[32,25671,25672,25679,25685,25691,25697,25705],{"__ignoreMap":30},[35,25673,25674,25677],{"class":37,"line":38},[35,25675,25676],{"class":48},"lerobot-replay",[35,25678,25010],{"class":58},[35,25680,25681,25683],{"class":37,"line":45},[35,25682,25042],{"class":58},[35,25684,25010],{"class":58},[35,25686,25687,25689],{"class":37,"line":55},[35,25688,25120],{"class":58},[35,25690,25010],{"class":58},[35,25692,25693,25695],{"class":37,"line":65},[35,25694,25180],{"class":58},[35,25696,25010],{"class":58},[35,25698,25699,25701,25703],{"class":37,"line":74},[35,25700,25600],{"class":58},[35,25702,25603],{"class":306},[35,25704,25010],{"class":58},[35,25706,25707],{"class":37,"line":83},[35,25708,25709],{"class":58},"  --dataset.episode=0\n",[416,25711,25712],{},"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":30,"searchDepth":45,"depth":45,"links":25714},[25715,25716,25717],{"id":25530,"depth":45,"text":25531},{"id":25643,"depth":45,"text":25644},{"id":25665,"depth":45,"text":25666},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25521,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25724,"title":25725,"body":25726,"description":421,"extension":422,"meta":25854,"navigation":140,"path":25855,"seo":25856,"stem":25857,"__hash__":25858},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25727,"toc":25852},[25728,25732,25795,25798,25845,25850],[10,25729,25731],{"id":25730},"_7-act-模型训练","7. ACT 模型训练",[25,25733,25735],{"className":24156,"code":25734,"language":24158,"meta":30,"style":30},"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",[32,25736,25737,25744,25752,25759,25766,25773,25780,25787],{"__ignoreMap":30},[35,25738,25739,25742],{"class":37,"line":38},[35,25740,25741],{"class":48},"lerobot-train",[35,25743,25010],{"class":58},[35,25745,25746,25748,25750],{"class":37,"line":45},[35,25747,25600],{"class":58},[35,25749,25603],{"class":306},[35,25751,25010],{"class":58},[35,25753,25754,25757],{"class":37,"line":55},[35,25755,25756],{"class":58},"  --policy.type=act",[35,25758,25010],{"class":58},[35,25760,25761,25764],{"class":37,"line":65},[35,25762,25763],{"class":58},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[35,25765,25010],{"class":58},[35,25767,25768,25771],{"class":37,"line":74},[35,25769,25770],{"class":58},"  --job_name=act_so101_test",[35,25772,25010],{"class":58},[35,25774,25775,25778],{"class":37,"line":83},[35,25776,25777],{"class":58},"  --policy.device=cuda",[35,25779,25010],{"class":58},[35,25781,25782,25785],{"class":37,"line":92},[35,25783,25784],{"class":58},"  --wandb.enable=false",[35,25786,25010],{"class":58},[35,25788,25789,25792],{"class":37,"line":101},[35,25790,25791],{"class":58},"  --policy.repo_id=",[35,25793,25794],{"class":306},"\"Embodied-AI-6\u002Flerobot_new\"\n",[21,25796,25797],{},"参数说明：",[1501,25799,25800,25806,25812,25818,25824,25833,25839],{},[17,25801,25802,25805],{},[32,25803,25804],{},"--dataset.repo_id","：训练数据集仓库。",[17,25807,25808,25811],{},[32,25809,25810],{},"--policy.type=act","：策略模型类型为 ACT。",[17,25813,25814,25817],{},[32,25815,25816],{},"--output_dir","：本地训练输出目录。",[17,25819,25820,25823],{},[32,25821,25822],{},"--job_name","：训练任务名称。",[17,25825,25826,25829,25830,24896],{},[32,25827,25828],{},"--policy.device","：训练设备（如 ",[32,25831,25832],{},"cuda",[17,25834,25835,25838],{},[32,25836,25837],{},"--wandb.enable","：是否启用 WandB 可视化。",[17,25840,25841,25844],{},[32,25842,25843],{},"--policy.repo_id","：训练后模型推送目标仓库。",[21,25846,25847],{},[1823,25848],{"alt":30,"src":25849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[416,25851,25712],{},{"title":30,"searchDepth":45,"depth":45,"links":25853},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25725,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25860,"title":25861,"body":25862,"description":421,"extension":422,"meta":25949,"navigation":140,"path":25950,"seo":25951,"stem":25952,"__hash__":25953},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25863,"toc":25947},[25864,25867,25870,25937,25945],[10,25865,25861],{"id":25866},"_8-策略部署与自动采集",[21,25868,25869],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[25,25871,25873],{"className":24156,"code":25872,"language":24158,"meta":30,"style":30},"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",[32,25874,25875,25881,25887,25893,25901,25907,25914,25922,25930],{"__ignoreMap":30},[35,25876,25877,25879],{"class":37,"line":38},[35,25878,25541],{"class":48},[35,25880,25010],{"class":58},[35,25882,25883,25885],{"class":37,"line":45},[35,25884,25042],{"class":58},[35,25886,25010],{"class":58},[35,25888,25889,25891],{"class":37,"line":55},[35,25890,25120],{"class":58},[35,25892,25010],{"class":58},[35,25894,25895,25897,25899],{"class":37,"line":65},[35,25896,25249],{"class":58},[35,25898,25568],{"class":306},[35,25900,25010],{"class":58},[35,25902,25903,25905],{"class":37,"line":74},[35,25904,25180],{"class":58},[35,25906,25010],{"class":58},[35,25908,25909,25912],{"class":37,"line":83},[35,25910,25911],{"class":58},"  --display_data=false",[35,25913,25010],{"class":58},[35,25915,25916,25918,25920],{"class":37,"line":92},[35,25917,25600],{"class":58},[35,25919,25603],{"class":306},[35,25921,25010],{"class":58},[35,25923,25924,25926,25928],{"class":37,"line":101},[35,25925,25617],{"class":58},[35,25927,25620],{"class":306},[35,25929,25010],{"class":58},[35,25931,25932,25935],{"class":37,"line":110},[35,25933,25934],{"class":58},"  --policy.path=",[35,25936,25794],{"class":306},[1501,25938,25939],{},[17,25940,25941,25944],{},[32,25942,25943],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[416,25946,25712],{},{"title":30,"searchDepth":45,"depth":45,"links":25948},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25861,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25955,"title":25956,"body":25957,"description":421,"extension":422,"meta":25986,"navigation":140,"path":25987,"seo":25988,"stem":25989,"__hash__":25990},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25958,"toc":25984},[25959,25963,25966,25972,25975,25981],[10,25960,25962],{"id":25961},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[21,25964,25965],{},"项目地址：",[21,25967,25968],{},[734,25969,25970],{"href":25970,"rel":25971},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24198],[21,25973,25974],{},"参考教程：",[21,25976,25977],{},[734,25978,25979],{"href":25979,"rel":25980},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24198],[21,25982,25983],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":30,"searchDepth":45,"depth":45,"links":25985},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25956,"description":421},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25992,"title":25993,"body":25994,"description":25998,"extension":422,"meta":25999,"navigation":140,"path":26000,"seo":26001,"stem":26002,"__hash__":26003},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25995,"toc":25996},[],{"title":30,"searchDepth":45,"depth":45,"links":25997},[],"act复现",{"category":23712},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25993,"description":25998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26005,"title":26006,"body":26007,"description":30,"extension":422,"meta":26309,"navigation":140,"path":26310,"seo":26311,"stem":26312,"__hash__":26313},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26008,"toc":26301},[26009,26012,26016,26026,26033,26040,26043,26050,26053,26056,26060,26072,26076,26122,26125,26128,26131,26134,26137,26141,26179,26185,26189,26243,26248,26251,26254,26259,26262,26267,26270,26273,26277,26280,26283,26287],[10,26010,26006],{"id":26011},"_1简介",[465,26013,26015],{"id":26014},"_11什么是-docker","1.1什么是 Docker？",[21,26017,26018,26019,26022,26023],{},"Docker 是一个开源的 ",[645,26020,26021],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[645,26024,26025],{},"一次构建，到处运行。",[21,26027,26028,26029,26032],{},"“ ",[645,26030,26031],{},"一次构建，到处运行"," ”也就是说：",[14,26034,26035],{},[17,26036,26037],{},[645,26038,26039],{},"之前：",[21,26041,26042],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[14,26044,26045],{},[17,26046,26047],{},[645,26048,26049],{},"使用docker后：",[21,26051,26052],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[21,26054,26055],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[465,26057,26059],{"id":26058},"_12它是怎么工作的","1.2.它是怎么工作的？",[1501,26061,26062,26065],{},[17,26063,26064],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[17,26066,26067,26068,26071],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[645,26069,26070],{},"无论在哪运行都一样稳定"," 。",[465,26073,26075],{"id":26074},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[633,26077,26078,26088],{},[636,26079,26080],{},[639,26081,26082,26085],{},[642,26083,26084],{"align":24070},"概念",[642,26086,26087],{"align":24070},"解释",[680,26089,26090,26098,26106,26114],{},[639,26091,26092,26095],{},[685,26093,26094],{"align":24070},"镜像",[685,26096,26097],{"align":24070},"Image，运行容器的模板，像是一个应用快照",[639,26099,26100,26103],{},[685,26101,26102],{"align":24070},"容器",[685,26104,26105],{"align":24070},"Container，运行中的镜像实例，有自己的文件系统、网络等",[639,26107,26108,26111],{},[685,26109,26110],{"align":24070},"Dockerfile",[685,26112,26113],{"align":24070},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[639,26115,26116,26119],{},[685,26117,26118],{"align":24070},"仓库",[685,26120,26121],{"align":24070},"Registry，存放镜像的地方，比如 Docker Hub",[21,26123,26124],{},"抽象化理解:",[21,26126,26127],{},"Docker镜像≈C++类",[21,26129,26130],{},"Docker容器≈C++类实例(即对象)",[21,26132,26133],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[21,26135,26136],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[465,26138,26140],{"id":26139},"_14类比理解","1.4.类比理解",[633,26142,26143,26153],{},[636,26144,26145],{},[639,26146,26147,26150],{},[642,26148,26149],{"align":24070},"传统部署",[642,26151,26152],{"align":24070},"Docker部署",[680,26154,26155,26163,26171],{},[639,26156,26157,26160],{},[685,26158,26159],{"align":24070},"手动安装依赖、调试版本不一致问题",[685,26161,26162],{"align":24070},"一次打包环境和代码",[639,26164,26165,26168],{},[685,26166,26167],{"align":24070},"程序“裸奔”跑在系统上",[685,26169,26170],{"align":24070},"程序“穿着容器”隔离运行",[639,26172,26173,26176],{},[685,26174,26175],{"align":24070},"容易“在我电脑上能跑”",[685,26177,26178],{"align":24070},"保证“无论在哪都能跑”",[21,26180,26181,26182],{},"就像快递包裹： ",[645,26183,26184],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[465,26186,26188],{"id":26187},"_15docker-的核心优势","1.5.Docker 的核心优势",[633,26190,26191,26201],{},[636,26192,26193],{},[639,26194,26195,26198],{},[642,26196,26197],{"align":24070},"优势",[642,26199,26200],{"align":24070},"说明",[680,26202,26203,26211,26219,26227,26235],{},[639,26204,26205,26208],{},[685,26206,26207],{"align":24070},"轻量级",[685,26209,26210],{"align":24070},"基于系统内核共享，启动速度快，占资源少",[639,26212,26213,26216],{},[685,26214,26215],{"align":24070},"跨平台",[685,26217,26218],{"align":24070},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[639,26220,26221,26224],{},[685,26222,26223],{"align":24070},"易于迁移部署",[685,26225,26226],{"align":24070},"应用和环境一起封装，不怕依赖不一致",[639,26228,26229,26232],{},[685,26230,26231],{"align":24070},"易于版本控制",[685,26233,26234],{"align":24070},"镜像版本可控，支持回滚",[639,26236,26237,26240],{},[685,26238,26239],{"align":24070},"生态丰富",[685,26241,26242],{"align":24070},"Docker Hub 上有成千上万的现成镜像可用",[14,26244,26245],{},[17,26246,26247],{},"在Linux上可以几乎实现无性能损失。",[21,26249,26250],{},"docker里的发行版和本机共用Linux内核。",[21,26252,26253],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[14,26255,26256],{},[17,26257,26258],{},"可以快速部署在绝大多数Linux发行版",[21,26260,26261],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[14,26263,26264],{},[17,26265,26266],{},"配置环境简单",[21,26268,26269],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[21,26271,26272],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[14,26274,26275],{},[17,26276,26239],{},[21,26278,26279],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[21,26281,26282],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[465,26284,26286],{"id":26285},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1501,26288,26289,26292,26295,26298],{},[17,26290,26291],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[17,26293,26294],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[17,26296,26297],{},"微服务架构：每个服务一个容器，灵活组合",[17,26299,26300],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":30,"searchDepth":45,"depth":45,"links":26302},[26303,26304,26305,26306,26307,26308],{"id":26014,"depth":55,"text":26015},{"id":26058,"depth":55,"text":26059},{"id":26074,"depth":55,"text":26075},{"id":26139,"depth":55,"text":26140},{"id":26187,"depth":55,"text":26188},{"id":26285,"depth":55,"text":26286},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26006,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26315,"title":26316,"body":26317,"description":30,"extension":422,"meta":27049,"navigation":140,"path":27050,"seo":27051,"stem":27052,"__hash__":27053},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26318,"toc":27044},[26319,26322,26326,26329,26332,26338,26344,26348,26357,26360,26416,26419,26470,26473,26556,26559,26596,26600,26611,26624,26631,26634,26714,26717,26767,26770,26793,26797,26804,26807,26823,26829,26832,26848,26854,26857,26873,26887,26893,26913,26919,26922,26934,26940,26943,26957,26963,26966,26986,26991,26994,26997,27001,27004,27007,27010,27017,27020,27023,27026,27031,27036,27041],[10,26320,26316],{"id":26321},"_2安装docker",[465,26323,26325],{"id":26324},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[21,26327,26328],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[21,26330,26331],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[21,26333,26334],{},[734,26335,26336],{"href":26336,"rel":26337},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24198],[21,26339,26340],{},[734,26341,26342],{"href":26342,"rel":26343},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24198],[22332,26345,26347],{"id":26346},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[21,26349,26350,26351,26356],{},"以下内容根据 ",[734,26352,26355],{"href":26353,"rel":26354},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24198],"官方文档"," 修改而来。",[21,26358,26359],{},"如果你过去安装过 docker，先删掉：",[25,26361,26363],{"className":24156,"code":26362,"language":24158,"meta":30,"style":30},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[32,26364,26365],{"__ignoreMap":30},[35,26366,26367,26369,26372,26375,26378,26381,26384,26387,26390,26393,26396,26399,26402,26405,26408,26410,26413],{"class":37,"line":38},[35,26368,3359],{"class":495},[35,26370,26371],{"class":359}," pkg ",[35,26373,26374],{"class":495},"in",[35,26376,26377],{"class":306}," docker.io",[35,26379,26380],{"class":306}," docker-doc",[35,26382,26383],{"class":306}," docker-compose",[35,26385,26386],{"class":306}," docker-compose-v2",[35,26388,26389],{"class":306}," podman-docker",[35,26391,26392],{"class":306}," containerd",[35,26394,26395],{"class":306}," runc",[35,26397,26398],{"class":359},"; ",[35,26400,26401],{"class":495},"do",[35,26403,26404],{"class":48}," sudo",[35,26406,26407],{"class":306}," apt-get",[35,26409,329],{"class":306},[35,26411,26412],{"class":359}," $pkg; ",[35,26414,26415],{"class":495},"done\n",[21,26417,26418],{},"首先安装依赖和GPG：",[25,26420,26424],{"className":26421,"code":26422,"language":26423,"meta":30,"style":30},"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",[32,26425,26426,26431,26436,26441,26446,26451,26456,26460,26465],{"__ignoreMap":30},[35,26427,26428],{"class":37,"line":38},[35,26429,26430],{},"# Add Docker's official GPG key:\n",[35,26432,26433],{"class":37,"line":45},[35,26434,26435],{},"sudo apt-get update\n",[35,26437,26438],{"class":37,"line":55},[35,26439,26440],{},"sudo apt-get install ca-certificates curl\n",[35,26442,26443],{"class":37,"line":65},[35,26444,26445],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[35,26447,26448],{"class":37,"line":74},[35,26449,26450],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[35,26452,26453],{"class":37,"line":83},[35,26454,26455],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[35,26457,26458],{"class":37,"line":92},[35,26459,141],{"emptyLinePlaceholder":140},[35,26461,26462],{"class":37,"line":101},[35,26463,26464],{},"# 如果上面这行报错就弄下面这行\n",[35,26466,26467],{"class":37,"line":110},[35,26468,26469],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[21,26471,26472],{},"信任 Docker 的 GPG 公钥并添加仓库：",[25,26474,26476],{"className":24156,"code":26475,"language":24158,"meta":30,"style":30},"# 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",[32,26477,26478,26483,26489,26506,26539],{"__ignoreMap":30},[35,26479,26480],{"class":37,"line":38},[35,26481,26482],{"class":41},"# Add the repository to Apt sources:\n",[35,26484,26485,26487],{"class":37,"line":45},[35,26486,25457],{"class":58},[35,26488,25010],{"class":58},[35,26490,26491,26494,26497,26500,26503],{"class":37,"line":55},[35,26492,26493],{"class":306},"  \"deb [arch=$(",[35,26495,26496],{"class":48},"dpkg",[35,26498,26499],{"class":58}," --print-architecture",[35,26501,26502],{"class":306},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[35,26504,26505],{"class":58},"\\\n",[35,26507,26508,26511,26513,26515,26518,26521,26523,26525,26528,26530,26532,26535,26537],{"class":37,"line":65},[35,26509,26510],{"class":306},"  \"",[35,26512,25431],{"class":359},[35,26514,1052],{"class":58},[35,26516,26517],{"class":306}," \u002Fetc\u002Fos-release",[35,26519,26520],{"class":359}," && ",[35,26522,25457],{"class":58},[35,26524,10058],{"class":306},[35,26526,26527],{"class":359},"$VERSION_CODENAME",[35,26529,747],{"class":306},[35,26531,923],{"class":359},[35,26533,26534],{"class":306},"\" stable\"",[35,26536,25441],{"class":495},[35,26538,25010],{"class":58},[35,26540,26541,26544,26547,26550,26553],{"class":37,"line":74},[35,26542,26543],{"class":48},"  sudo",[35,26545,26546],{"class":306}," tee",[35,26548,26549],{"class":306}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[35,26551,26552],{"class":495}," >",[35,26554,26555],{"class":306}," \u002Fdev\u002Fnull\n",[21,26557,26558],{},"最后安装",[25,26560,26562],{"className":24156,"code":26561,"language":24158,"meta":30,"style":30},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,26563,26564,26573],{"__ignoreMap":30},[35,26565,26566,26568,26570],{"class":37,"line":38},[35,26567,171],{"class":48},[35,26569,26407],{"class":306},[35,26571,26572],{"class":306}," update\n",[35,26574,26575,26577,26579,26581,26584,26587,26590,26593],{"class":37,"line":45},[35,26576,171],{"class":48},[35,26578,26407],{"class":306},[35,26580,318],{"class":306},[35,26582,26583],{"class":306}," docker-ce",[35,26585,26586],{"class":306}," docker-ce-cli",[35,26588,26589],{"class":306}," containerd.io",[35,26591,26592],{"class":306}," docker-buildx-plugin",[35,26594,26595],{"class":306}," docker-compose-plugin\n",[22332,26597,26599],{"id":26598},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[21,26601,26602,26603,26606,26607,26610],{},"查看自己自己包管理工具版本（dnf是 ",[645,26604,26605],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[645,26608,26609],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[25,26612,26614],{"className":24156,"code":26613,"language":24158,"meta":30,"style":30},"dnf --version\n",[32,26615,26616],{"__ignoreMap":30},[35,26617,26618,26621],{"class":37,"line":38},[35,26619,26620],{"class":48},"dnf",[35,26622,26623],{"class":58}," --version\n",[21,26625,26350,26626,26630],{},[734,26627,26355],{"href":26628,"rel":26629},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24198]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[21,26632,26633],{},"如果你之前安装过 docker，请先删掉",[25,26635,26637],{"className":24156,"code":26636,"language":24158,"meta":30,"style":30},"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",[32,26638,26639,26653,26660,26667,26674,26681,26688,26695,26702,26709],{"__ignoreMap":30},[35,26640,26641,26643,26646,26648,26651],{"class":37,"line":38},[35,26642,171],{"class":48},[35,26644,26645],{"class":306}," dnf",[35,26647,329],{"class":306},[35,26649,26650],{"class":306}," docker",[35,26652,25010],{"class":58},[35,26654,26655,26658],{"class":37,"line":45},[35,26656,26657],{"class":306},"                  docker-client",[35,26659,25010],{"class":58},[35,26661,26662,26665],{"class":37,"line":55},[35,26663,26664],{"class":306},"                  docker-client-latest",[35,26666,25010],{"class":58},[35,26668,26669,26672],{"class":37,"line":65},[35,26670,26671],{"class":306},"                  docker-common",[35,26673,25010],{"class":58},[35,26675,26676,26679],{"class":37,"line":74},[35,26677,26678],{"class":306},"                  docker-latest",[35,26680,25010],{"class":58},[35,26682,26683,26686],{"class":37,"line":83},[35,26684,26685],{"class":306},"                  docker-latest-logrotate",[35,26687,25010],{"class":58},[35,26689,26690,26693],{"class":37,"line":92},[35,26691,26692],{"class":306},"                  docker-logrotate",[35,26694,25010],{"class":58},[35,26696,26697,26700],{"class":37,"line":101},[35,26698,26699],{"class":306},"                  docker-selinux",[35,26701,25010],{"class":58},[35,26703,26704,26707],{"class":37,"line":110},[35,26705,26706],{"class":306},"                  docker-engine-selinux",[35,26708,25010],{"class":58},[35,26710,26711],{"class":37,"line":119},[35,26712,26713],{"class":306},"                  docker-engine\n",[21,26715,26716],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[25,26718,26720],{"className":24156,"code":26719,"language":24158,"meta":30,"style":30},"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",[32,26721,26722,26736,26751],{"__ignoreMap":30},[35,26723,26724,26726,26728,26731,26733],{"class":37,"line":38},[35,26725,171],{"class":48},[35,26727,26645],{"class":306},[35,26729,26730],{"class":58}," -y",[35,26732,318],{"class":306},[35,26734,26735],{"class":306}," dnf-plugins-core\n",[35,26737,26738,26740,26742,26745,26748],{"class":37,"line":45},[35,26739,171],{"class":48},[35,26741,26645],{"class":306},[35,26743,26744],{"class":306}," config-manager",[35,26746,26747],{"class":306}," addrepo",[35,26749,26750],{"class":58}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[35,26752,26753,26755,26758,26761,26764],{"class":37,"line":55},[35,26754,171],{"class":48},[35,26756,26757],{"class":306}," sed",[35,26759,26760],{"class":58}," -i",[35,26762,26763],{"class":306}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[35,26765,26766],{"class":306}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[21,26768,26769],{},"最后安装：",[25,26771,26773],{"className":24156,"code":26772,"language":24158,"meta":30,"style":30},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,26774,26775],{"__ignoreMap":30},[35,26776,26777,26779,26781,26783,26785,26787,26789,26791],{"class":37,"line":38},[35,26778,171],{"class":48},[35,26780,26645],{"class":306},[35,26782,318],{"class":306},[35,26784,26583],{"class":306},[35,26786,26586],{"class":306},[35,26788,26589],{"class":306},[35,26790,26592],{"class":306},[35,26792,26595],{"class":306},[465,26794,26796],{"id":26795},"_22配置环境","2.2.配置环境",[22332,26798,26800,26803],{"id":26799},"_221检查-docker-服务状态",[645,26801,26802],{},"2.2.1.检查 Docker 服务状态"," ：",[21,26805,26806],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[25,26808,26810],{"className":24156,"code":26809,"language":24158,"meta":30,"style":30},"systemctl status docker\n",[32,26811,26812],{"__ignoreMap":30},[35,26813,26814,26817,26820],{"class":37,"line":38},[35,26815,26816],{"class":48},"systemctl",[35,26818,26819],{"class":306}," status",[35,26821,26822],{"class":306}," docker\n",[22332,26824,26826,26803],{"id":26825},"_222启动-docker-服务",[645,26827,26828],{},"2.2.2.启动 Docker 服务",[21,26830,26831],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[25,26833,26835],{"className":24156,"code":26834,"language":24158,"meta":30,"style":30},"sudo systemctl start docker\n",[32,26836,26837],{"__ignoreMap":30},[35,26838,26839,26841,26844,26846],{"class":37,"line":38},[35,26840,171],{"class":48},[35,26842,26843],{"class":306}," systemctl",[35,26845,4518],{"class":306},[35,26847,26822],{"class":306},[22332,26849,26851,26803],{"id":26850},"_223设置-docker-开机自启",[645,26852,26853],{},"2.2.3.设置 Docker 开机自启",[21,26855,26856],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[25,26858,26860],{"className":24156,"code":26859,"language":24158,"meta":30,"style":30},"sudo systemctl enable docker\n",[32,26861,26862],{"__ignoreMap":30},[35,26863,26864,26866,26868,26871],{"class":37,"line":38},[35,26865,171],{"class":48},[35,26867,26843],{"class":306},[35,26869,26870],{"class":306}," enable",[35,26872,26822],{"class":306},[22332,26874,26876,14129,26879,14129,26884,26803],{"id":26875},"_224将用户添加到-docker-组",[645,26877,26878],{},"2.2.4.将用户添加到",[645,26880,26881],{},[32,26882,26883],{},"docker",[645,26885,26886],{},"组",[21,26888,26889,26890,26892],{},"使用以下命令将当前用户添加到 ",[32,26891,26883],{}," 组：",[25,26894,26896],{"className":24156,"code":26895,"language":24158,"meta":30,"style":30},"sudo usermod -aG docker $USER\n",[32,26897,26898],{"__ignoreMap":30},[35,26899,26900,26902,26905,26908,26910],{"class":37,"line":38},[35,26901,171],{"class":48},[35,26903,26904],{"class":306}," usermod",[35,26906,26907],{"class":58}," -aG",[35,26909,26650],{"class":306},[35,26911,26912],{"class":359}," $USER\n",[22332,26914,26916,26803],{"id":26915},"_225退出并重新登录",[645,26917,26918],{},"2.2.5.退出并重新登录",[21,26920,26921],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[25,26923,26925],{"className":24156,"code":26924,"language":24158,"meta":30,"style":30},"newgrp docker\n",[32,26926,26927],{"__ignoreMap":30},[35,26928,26929,26932],{"class":37,"line":38},[35,26930,26931],{"class":48},"newgrp",[35,26933,26822],{"class":306},[22332,26935,26937,26803],{"id":26936},"_226重新启动-docker-服务如果需要",[645,26938,26939],{},"2.2.6.重新启动 Docker 服务（如果需要）",[21,26941,26942],{},"确保 Docker 服务正在运行，可以使用以下命令：",[25,26944,26945],{"className":24156,"code":26834,"language":24158,"meta":30,"style":30},[32,26946,26947],{"__ignoreMap":30},[35,26948,26949,26951,26953,26955],{"class":37,"line":38},[35,26950,171],{"class":48},[35,26952,26843],{"class":306},[35,26954,4518],{"class":306},[35,26956,26822],{"class":306},[22332,26958,26960,26803],{"id":26959},"_227重启电脑后检查-docker-服务状态",[645,26961,26962],{},"2.2.7.重启电脑后检查 Docker 服务状态",[21,26964,26965],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[25,26967,26969],{"className":24156,"code":26968,"language":24158,"meta":30,"style":30},"sudo reboot\nsystemctl status docker\n",[32,26970,26971,26978],{"__ignoreMap":30},[35,26972,26973,26975],{"class":37,"line":38},[35,26974,171],{"class":48},[35,26976,26977],{"class":306}," reboot\n",[35,26979,26980,26982,26984],{"class":37,"line":45},[35,26981,26816],{"class":48},[35,26983,26819],{"class":306},[35,26985,26822],{"class":306},[21,26987,26988],{},[1823,26989],{"alt":30,"src":26990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[21,26992,26993],{},"第三行显示enabled说明开机自启动成功",[21,26995,26996],{},"按q退出",[465,26998,27000],{"id":26999},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[21,27002,27003],{},"优先使用linux来使用docker是比较好的",[21,27005,27006],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[21,27008,27009],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[21,27011,27012,27013],{},"官方下载安装:",[734,27014,27015],{"href":27015,"rel":27016},"https:\u002F\u002Fwww.docker.com\u002F",[24198],[21,27018,27019],{},"Windows的Docker显卡直通与USB直通:",[21,27021,27022],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[21,27024,27025],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[21,27027,27028],{},[1823,27029],{"alt":30,"src":27030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[21,27032,27033],{},[1823,27034],{"alt":30,"src":27035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[21,27037,27038],{},[1823,27039],{"alt":30,"src":27040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[416,27042,27043],{},"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":30,"searchDepth":45,"depth":45,"links":27045},[27046,27047,27048],{"id":26324,"depth":55,"text":26325},{"id":26795,"depth":55,"text":26796},{"id":26999,"depth":55,"text":27000},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26316,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27055,"title":27056,"body":27057,"description":27064,"extension":422,"meta":27755,"navigation":140,"path":27756,"seo":27757,"stem":27758,"__hash__":27759},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27058,"toc":27749},[27059,27062,27065,27069,27074,27079,27082,27109,27114,27123,27126,27131,27135,27142,27147,27153,27157,27160,27164,27169,27260,27265,27283,27288,27309,27314,27330,27334,27339,27368,27373,27419,27424,27468,27476,27493,27498,27514,27519,27533,27536,27539,27542,27545,27574,27577,27582,27586,27589,27592,27598,27601,27604,27607,27669,27676,27681,27684,27702,27706,27709,27726,27729,27732,27746],[10,27060,27056],{"id":27061},"_3docker直通",[21,27063,27064],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[465,27066,27068],{"id":27067},"_31usb直通","3.1.USB直通",[21,27070,27071],{},[1823,27072],{"alt":30,"src":27073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[14,27075,27076],{},[17,27077,27078],{},"方法一(不是很推荐新手)：",[21,27080,27081],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[25,27083,27085],{"className":24156,"code":27084,"language":24158,"meta":30,"style":30},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[32,27086,27087,27094,27099],{"__ignoreMap":30},[35,27088,27089,27091],{"class":37,"line":38},[35,27090,49],{"class":48},[35,27092,27093],{"class":306}," \u002Fdev\n",[35,27095,27096],{"class":37,"line":45},[35,27097,27098],{"class":41},"#例如\n",[35,27100,27101,27104,27106],{"class":37,"line":55},[35,27102,27103],{"class":359},"--device",[35,27105,544],{"class":495},[35,27107,27108],{"class":306},"\u002Fdev\u002Ftty_USB0\n",[14,27110,27111],{"start":45},[17,27112,27113],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[25,27115,27117],{"className":24156,"code":27116,"language":24158,"meta":30,"style":30},"--privileged\n",[32,27118,27119],{"__ignoreMap":30},[35,27120,27121],{"class":37,"line":38},[35,27122,27116],{"class":48},[21,27124,27125],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[21,27127,27128],{},[1823,27129],{"alt":30,"src":27130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[465,27132,27134],{"id":27133},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[21,27136,27137,27138,27141],{},"NVIDIA Container Toolkit使用户 ",[645,27139,27140],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[21,27143,27144],{},[1823,27145],{"alt":30,"src":27146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[21,27148,27149],{},[734,27150,27151],{"href":27151,"rel":27152},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24198],[22332,27154,27156],{"id":27155},"_321安装","3.2.1.安装",[21,27158,27159],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23244,27161,27163],{"id":27162},"_3211ubuntu","3.2.1.1.Ubuntu",[14,27165,27166],{},[17,27167,27168],{},"配置存储库 并更新",[25,27170,27172],{"className":24156,"code":27171,"language":24158,"meta":30,"style":30},"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",[32,27173,27174,27202,27222,27234,27246,27252],{"__ignoreMap":30},[35,27175,27176,27178,27181,27184,27186,27188,27191,27194,27197,27200],{"class":37,"line":38},[35,27177,256],{"class":48},[35,27179,27180],{"class":58}," -fsSL",[35,27182,27183],{"class":306}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[35,27185,25441],{"class":495},[35,27187,26404],{"class":48},[35,27189,27190],{"class":306}," gpg",[35,27192,27193],{"class":58}," --dearmor",[35,27195,27196],{"class":58}," -o",[35,27198,27199],{"class":306}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[35,27201,25010],{"class":58},[35,27203,27204,27207,27209,27212,27215,27218,27220],{"class":37,"line":45},[35,27205,27206],{"class":359},"  && ",[35,27208,256],{"class":48},[35,27210,27211],{"class":58}," -s",[35,27213,27214],{"class":58}," -L",[35,27216,27217],{"class":306}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[35,27219,25441],{"class":495},[35,27221,25010],{"class":58},[35,27223,27224,27227,27230,27232],{"class":37,"line":55},[35,27225,27226],{"class":48},"    sed",[35,27228,27229],{"class":306}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[35,27231,25441],{"class":495},[35,27233,25010],{"class":58},[35,27235,27236,27239,27241,27244],{"class":37,"line":65},[35,27237,27238],{"class":48},"    sudo",[35,27240,26546],{"class":306},[35,27242,27243],{"class":306}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[35,27245,25010],{"class":58},[35,27247,27248,27250],{"class":37,"line":74},[35,27249,27206],{"class":359},[35,27251,26505],{"class":58},[35,27253,27254,27256,27258],{"class":37,"line":83},[35,27255,27238],{"class":48},[35,27257,26407],{"class":306},[35,27259,26572],{"class":306},[14,27261,27262],{"start":45},[17,27263,27264],{},"安装nvidia-docker2",[25,27266,27268],{"className":24156,"code":27267,"language":24158,"meta":30,"style":30},"sudo apt-get install -y nvidia-docker2\n",[32,27269,27270],{"__ignoreMap":30},[35,27271,27272,27274,27276,27278,27280],{"class":37,"line":38},[35,27273,171],{"class":48},[35,27275,26407],{"class":306},[35,27277,318],{"class":306},[35,27279,26730],{"class":58},[35,27281,27282],{"class":306}," nvidia-docker2\n",[14,27284,27285],{"start":55},[17,27286,27287],{},"使用nvidia-ctk命令配置container runtime",[25,27289,27291],{"className":24156,"code":27290,"language":24158,"meta":30,"style":30},"sudo nvidia-ctk runtime configure --runtime=docker\n",[32,27292,27293],{"__ignoreMap":30},[35,27294,27295,27297,27300,27303,27306],{"class":37,"line":38},[35,27296,171],{"class":48},[35,27298,27299],{"class":306}," nvidia-ctk",[35,27301,27302],{"class":306}," runtime",[35,27304,27305],{"class":306}," configure",[35,27307,27308],{"class":58}," --runtime=docker\n",[14,27310,27311],{"start":65},[17,27312,27313],{},"重启docker服务:",[25,27315,27317],{"className":24156,"code":27316,"language":24158,"meta":30,"style":30},"sudo systemctl restart docker\n",[32,27318,27319],{"__ignoreMap":30},[35,27320,27321,27323,27325,27328],{"class":37,"line":38},[35,27322,171],{"class":48},[35,27324,26843],{"class":306},[35,27326,27327],{"class":306}," restart",[35,27329,26822],{"class":306},[23244,27331,27333],{"id":27332},"_3212fedora","3.2.1.2.Fedora",[14,27335,27336],{},[17,27337,27338],{},"配置存储库",[25,27340,27342],{"className":24156,"code":27341,"language":24158,"meta":30,"style":30},"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",[32,27343,27344,27359],{"__ignoreMap":30},[35,27345,27346,27348,27350,27352,27355,27357],{"class":37,"line":38},[35,27347,256],{"class":48},[35,27349,27211],{"class":58},[35,27351,27214],{"class":58},[35,27353,27354],{"class":306}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[35,27356,25441],{"class":495},[35,27358,25010],{"class":58},[35,27360,27361,27363,27365],{"class":37,"line":45},[35,27362,171],{"class":48},[35,27364,26546],{"class":306},[35,27366,27367],{"class":306}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[14,27369,27370],{"start":45},[17,27371,27372],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[25,27374,27376],{"className":24156,"code":27375,"language":24158,"meta":30,"style":30},"# 如果是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",[32,27377,27378,27383,27397,27401,27406],{"__ignoreMap":30},[35,27379,27380],{"class":37,"line":38},[35,27381,27382],{"class":41},"# 如果是RHEL或者Rocky（DNF4）\n",[35,27384,27385,27387,27389,27391,27394],{"class":37,"line":45},[35,27386,171],{"class":48},[35,27388,26645],{"class":306},[35,27390,26744],{"class":306},[35,27392,27393],{"class":58}," --add-repo",[35,27395,27396],{"class":306}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[35,27398,27399],{"class":37,"line":55},[35,27400,141],{"emptyLinePlaceholder":140},[35,27402,27403],{"class":37,"line":65},[35,27404,27405],{"class":41},"# 如果是Feodra41+（DNF5）\n",[35,27407,27408,27410,27412,27414,27416],{"class":37,"line":74},[35,27409,171],{"class":48},[35,27411,26645],{"class":306},[35,27413,26744],{"class":306},[35,27415,26747],{"class":306},[35,27417,27418],{"class":58}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[14,27420,27421],{"start":55},[17,27422,27423],{},"安装NVIDIA Container Toolki包",[25,27425,27427],{"className":24156,"code":27426,"language":24158,"meta":30,"style":30},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[32,27428,27429,27434,27447,27451,27456],{"__ignoreMap":30},[35,27430,27431],{"class":37,"line":38},[35,27432,27433],{"class":41},"# 如果是RHEL或者Rocky\n",[35,27435,27436,27438,27440,27442,27444],{"class":37,"line":45},[35,27437,171],{"class":48},[35,27439,26645],{"class":306},[35,27441,318],{"class":306},[35,27443,26730],{"class":58},[35,27445,27446],{"class":306}," nvidia-container-toolkit\n",[35,27448,27449],{"class":37,"line":55},[35,27450,141],{"emptyLinePlaceholder":140},[35,27452,27453],{"class":37,"line":65},[35,27454,27455],{"class":41},"# 如果是Fedora\n",[35,27457,27458,27460,27462,27464,27466],{"class":37,"line":74},[35,27459,171],{"class":48},[35,27461,26645],{"class":306},[35,27463,318],{"class":306},[35,27465,26730],{"class":58},[35,27467,27446],{"class":306},[14,27469,27470],{"start":65},[17,27471,27472,27473,27475],{},"安装nvidia-docker2 ： 在Fedora上使用",[32,27474,26620],{},"进行安装",[25,27477,27479],{"className":24156,"code":27478,"language":24158,"meta":30,"style":30},"sudo dnf install -y nvidia-docker2\n",[32,27480,27481],{"__ignoreMap":30},[35,27482,27483,27485,27487,27489,27491],{"class":37,"line":38},[35,27484,171],{"class":48},[35,27486,26645],{"class":306},[35,27488,318],{"class":306},[35,27490,26730],{"class":58},[35,27492,27282],{"class":306},[14,27494,27495],{"start":74},[17,27496,27497],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[25,27499,27500],{"className":24156,"code":27290,"language":24158,"meta":30,"style":30},[32,27501,27502],{"__ignoreMap":30},[35,27503,27504,27506,27508,27510,27512],{"class":37,"line":38},[35,27505,171],{"class":48},[35,27507,27299],{"class":306},[35,27509,27302],{"class":306},[35,27511,27305],{"class":306},[35,27513,27308],{"class":58},[14,27515,27516],{"start":83},[17,27517,27518],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[25,27520,27521],{"className":24156,"code":27316,"language":24158,"meta":30,"style":30},[32,27522,27523],{"__ignoreMap":30},[35,27524,27525,27527,27529,27531],{"class":37,"line":38},[35,27526,171],{"class":48},[35,27528,26843],{"class":306},[35,27530,27327],{"class":306},[35,27532,26822],{"class":306},[21,27534,27535],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[21,27537,27538],{},"方法：",[21,27540,27541],{},"1️⃣nvidia-smi",[21,27543,27544],{},"2️⃣运行nvidia cuda 容器进行测试",[25,27546,27548],{"className":24156,"code":27547,"language":24158,"meta":30,"style":30},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[32,27549,27550],{"__ignoreMap":30},[35,27551,27552,27554,27556,27559,27562,27565,27568,27571],{"class":37,"line":38},[35,27553,171],{"class":48},[35,27555,26650],{"class":306},[35,27557,27558],{"class":306}," run",[35,27560,27561],{"class":58}," --rm",[35,27563,27564],{"class":58}," --gpus",[35,27566,27567],{"class":306}," all",[35,27569,27570],{"class":306}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[35,27572,27573],{"class":306}," nvidia-smi\n",[21,27575,27576],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[21,27578,27579],{},[1823,27580],{"alt":30,"src":27581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[465,27583,27585],{"id":27584},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[21,27587,27588],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[21,27590,27591],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[21,27593,27594],{},[734,27595,27596],{"href":27596,"rel":27597},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24198],[21,27599,27600],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[21,27602,27603],{},"我们只需要找到对应的Docker镜像当底包即可。",[21,27605,27606],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[633,27608,27609,27625],{},[636,27610,27611],{},[639,27612,27613,27616,27619,27622],{},[642,27614,27615],{"align":24070},"镜像类型",[642,27617,27618],{"align":24070},"适用场景",[642,27620,27621],{"align":24070},"示例标签",[642,27623,27624],{"align":24070},"大小",[680,27626,27627,27641,27655],{},[639,27628,27629,27632,27635,27638],{},[685,27630,27631],{"align":24070},"base",[685,27633,27634],{"align":24070},"仅需 CUDA 运行时库",[685,27636,27637],{"align":24070},"12.4.0-base-ubuntu22.04",[685,27639,27640],{"align":24070},"~240MB",[639,27642,27643,27646,27649,27652],{},[685,27644,27645],{"align":24070},"runtime",[685,27647,27648],{"align":24070},"部署编译后的应用（含数学库）",[685,27650,27651],{"align":24070},"12.4.0-runtime-ubuntu22.04",[685,27653,27654],{"align":24070},"~2GB",[639,27656,27657,27660,27663,27666],{},[685,27658,27659],{"align":24070},"devel",[685,27661,27662],{"align":24070},"开发环境（含编译工具）",[685,27664,27665],{"align":24070},"12.4.0-devel-ubuntu22.04",[685,27667,27668],{"align":24070},"~3GB",[21,27670,27671,27672,27675],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[32,27673,27674],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[21,27677,27678],{},[1823,27679],{"alt":30,"src":27680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[21,27682,27683],{},"在dockerfile里就可以开头这么写：",[25,27685,27687],{"className":24156,"code":27686,"language":24158,"meta":30,"style":30},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[32,27688,27689,27694],{"__ignoreMap":30},[35,27690,27691],{"class":37,"line":38},[35,27692,27693],{"class":41},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[35,27695,27696,27699],{"class":37,"line":45},[35,27697,27698],{"class":48},"FROM",[35,27700,27701],{"class":306}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[465,27703,27705],{"id":27704},"_34配置以太网","3.4.配置以太网",[21,27707,27708],{},"指定网络模式",[25,27710,27712],{"className":24156,"code":27711,"language":24158,"meta":30,"style":30},"--net=host \\\n",[32,27713,27714],{"__ignoreMap":30},[35,27715,27716,27719,27721,27724],{"class":37,"line":38},[35,27717,27718],{"class":359},"--net",[35,27720,544],{"class":495},[35,27722,27723],{"class":306},"host",[35,27725,25010],{"class":48},[21,27727,27728],{},"启动参数里加上这行即可。具体在下方",[21,27730,27731],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1501,27733,27734,27737,27740,27743],{},[17,27735,27736],{},"--net=bridge:默认选项，表示连接到默认的网桥",[17,27738,27739],{},"--net=host:容器使用宿主机的网络",[17,27741,27742],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[17,27744,27745],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[416,27747,27748],{},"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":30,"searchDepth":45,"depth":45,"links":27750},[27751,27752,27753,27754],{"id":27067,"depth":55,"text":27068},{"id":27133,"depth":55,"text":27134},{"id":27584,"depth":55,"text":27585},{"id":27704,"depth":55,"text":27705},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27056,"description":27064},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27761,"title":27762,"body":27763,"description":27770,"extension":422,"meta":27776,"navigation":140,"path":27777,"seo":27778,"stem":27779,"__hash__":27780},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27764,"toc":27774},[27765,27768,27771],[10,27766,27762],{"id":27767},"_4dockerhub换源",[21,27769,27770],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[21,27772,27773],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":30,"searchDepth":45,"depth":45,"links":27775},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27762,"description":27770},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27782,"title":27783,"body":27784,"description":30,"extension":422,"meta":28794,"navigation":140,"path":28795,"seo":28796,"stem":28797,"__hash__":28798},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27785,"toc":28789},[27786,27789,27793,27799,27803,27806,28146,28149,28152,28155,28160,28165,28168,28171,28174,28177,28196,28199,28210,28216,28398,28408,28424,28685,28687,28712,28727,28736,28786],[10,27787,27783],{"id":27788},"_5docker命令学习",[465,27790,27792],{"id":27791},"_51参考文档","5.1.参考文档",[21,27794,27795],{},[734,27796,27797],{"href":27797,"rel":27798},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24198],[465,27800,27802],{"id":27801},"_52常用命令","5.2.常用命令",[21,27804,27805],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[633,27807,27808,27821],{},[636,27809,27810],{},[639,27811,27812,27815,27818],{},[642,27813,27814],{"align":24070},"命令",[642,27816,27817],{"align":24070},"描述",[642,27819,27820],{"align":24070},"示例",[680,27822,27823,27834,27845,27856,27867,27878,27889,27900,27910,27921,27932,27943,27953,27964,27975,27986,27996,28006,28016,28026,28037,28048,28059,28070,28081,28092,28102,28113,28124,28135],{},[639,27824,27825,27828,27831],{},[685,27826,27827],{"align":24070},"docker run",[685,27829,27830],{"align":24070},"创建并启动一个新的容器。",[685,27832,27833],{"align":24070},"docker run -it ubuntu bash",[639,27835,27836,27839,27842],{},[685,27837,27838],{"align":24070},"docker build",[685,27840,27841],{"align":24070},"通过指定的 Dockerfile 创建一个新的镜像。",[685,27843,27844],{"align":24070},"docker build -t myimage .",[639,27846,27847,27850,27853],{},[685,27848,27849],{"align":24070},"docker pull",[685,27851,27852],{"align":24070},"从 Docker 仓库拉取镜像。",[685,27854,27855],{"align":24070},"docker pull ubuntu",[639,27857,27858,27861,27864],{},[685,27859,27860],{"align":24070},"docker push",[685,27862,27863],{"align":24070},"将本地镜像推送到 Docker 仓库。",[685,27865,27866],{"align":24070},"docker push myimage",[639,27868,27869,27872,27875],{},[685,27870,27871],{"align":24070},"docker stop",[685,27873,27874],{"align":24070},"停止一个正在运行的容器。",[685,27876,27877],{"align":24070},"docker stop container_id",[639,27879,27880,27883,27886],{},[685,27881,27882],{"align":24070},"docker start",[685,27884,27885],{"align":24070},"启动一个已经存在的容器。",[685,27887,27888],{"align":24070},"docker start container_id",[639,27890,27891,27894,27897],{},[685,27892,27893],{"align":24070},"docker restart",[685,27895,27896],{"align":24070},"重新启动容器。",[685,27898,27899],{"align":24070},"docker restart container_id",[639,27901,27902,27905,27908],{},[685,27903,27904],{"align":24070},"docker ps",[685,27906,27907],{"align":24070},"列出当前正在运行的容器。",[685,27909,27904],{"align":24070},[639,27911,27912,27915,27918],{},[685,27913,27914],{"align":24070},"docker rm",[685,27916,27917],{"align":24070},"删除一个或多个停止的容器。",[685,27919,27920],{"align":24070},"docker rm container_id",[639,27922,27923,27926,27929],{},[685,27924,27925],{"align":24070},"docker exec",[685,27927,27928],{"align":24070},"在一个正在运行的容器中执行命令。",[685,27930,27931],{"align":24070},"docker exec -it container_id bash",[639,27933,27934,27937,27940],{},[685,27935,27936],{"align":24070},"docker logs",[685,27938,27939],{"align":24070},"查看容器的日志输出。",[685,27941,27942],{"align":24070},"docker logs container_id",[639,27944,27945,27948,27951],{},[685,27946,27947],{"align":24070},"docker images",[685,27949,27950],{"align":24070},"列出本地所有镜像。",[685,27952,27947],{"align":24070},[639,27954,27955,27958,27961],{},[685,27956,27957],{"align":24070},"docker rmi",[685,27959,27960],{"align":24070},"删除一个或多个镜像。",[685,27962,27963],{"align":24070},"docker rmi myimage",[639,27965,27966,27969,27972],{},[685,27967,27968],{"align":24070},"docker network",[685,27970,27971],{"align":24070},"管理 Docker 网络。",[685,27973,27974],{"align":24070},"docker network ls",[639,27976,27977,27980,27983],{},[685,27978,27979],{"align":24070},"docker volume",[685,27981,27982],{"align":24070},"管理 Docker 数据卷。",[685,27984,27985],{"align":24070},"docker volume ls",[639,27987,27988,27991,27994],{},[685,27989,27990],{"align":24070},"docker-compose up",[685,27992,27993],{"align":24070},"启动 docker-compose.yml 中定义的所有服务。",[685,27995,27990],{"align":24070},[639,27997,27998,28001,28004],{},[685,27999,28000],{"align":24070},"docker-compose down",[685,28002,28003],{"align":24070},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[685,28005,28000],{"align":24070},[639,28007,28008,28011,28014],{},[685,28009,28010],{"align":24070},"docker info",[685,28012,28013],{"align":24070},"显示 Docker 系统的详细信息。",[685,28015,28010],{"align":24070},[639,28017,28018,28021,28024],{},[685,28019,28020],{"align":24070},"docker stats",[685,28022,28023],{"align":24070},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[685,28025,28020],{"align":24070},[639,28027,28028,28031,28034],{},[685,28029,28030],{"align":24070},"docker inspect",[685,28032,28033],{"align":24070},"查看容器或镜像的详细信息（JSON 格式）。",[685,28035,28036],{"align":24070},"docker inspect container_id",[639,28038,28039,28042,28045],{},[685,28040,28041],{"align":24070},"docker save",[685,28043,28044],{"align":24070},"将一个镜像保存为 tar 文件。",[685,28046,28047],{"align":24070},"docker save -o myimage.tar myimage",[639,28049,28050,28053,28056],{},[685,28051,28052],{"align":24070},"docker load",[685,28054,28055],{"align":24070},"从 tar 文件中加载镜像。",[685,28057,28058],{"align":24070},"docker load -i myimage.tar",[639,28060,28061,28064,28067],{},[685,28062,28063],{"align":24070},"docker tag",[685,28065,28066],{"align":24070},"为镜像添加标签（tag）。",[685,28068,28069],{"align":24070},"docker tag myimage myimage:v1",[639,28071,28072,28075,28078],{},[685,28073,28074],{"align":24070},"docker buildx build",[685,28076,28077],{"align":24070},"使用 Buildx 构建多架构镜像。",[685,28079,28080],{"align":24070},"docker buildx build -t myimage .",[639,28082,28083,28086,28089],{},[685,28084,28085],{"align":24070},"docker buildx create",[685,28087,28088],{"align":24070},"创建一个新的 Buildx 构建实例。",[685,28090,28091],{"align":24070},"docker buildx create –use",[639,28093,28094,28097,28100],{},[685,28095,28096],{"align":24070},"docker buildx ls",[685,28098,28099],{"align":24070},"列出所有可用的 Buildx 构建实例。",[685,28101,28096],{"align":24070},[639,28103,28104,28107,28110],{},[685,28105,28106],{"align":24070},"docker buildx use",[685,28108,28109],{"align":24070},"设置当前的 Buildx 构建实例。",[685,28111,28112],{"align":24070},"docker buildx use mybuilder",[639,28114,28115,28118,28121],{},[685,28116,28117],{"align":24070},"docker buildx bake",[685,28119,28120],{"align":24070},"使用 Bake 文件批量构建镜像。",[685,28122,28123],{"align":24070},"docker buildx bake -f bake.hcl",[639,28125,28126,28129,28132],{},[685,28127,28128],{"align":24070},"docker buildx build –push",[685,28130,28131],{"align":24070},"构建镜像并推送到镜像仓库。",[685,28133,28134],{"align":24070},"docker buildx build –push -t myimage .",[639,28136,28137,28140,28143],{},[685,28138,28139],{"align":24070},"docker buildx build –platform",[685,28141,28142],{"align":24070},"构建镜像并为多个平台生成支持。",[685,28144,28145],{"align":24070},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[21,28147,28148],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[21,28150,28151],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[21,28153,28154],{},"docker images 可以查看已经下载的镜像",[21,28156,28157],{},[1823,28158],{"alt":30,"src":28159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[21,28161,28162],{},[645,28163,28164],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[21,28166,28167],{},"docker rmi $(docker images -q) 删除所有的镜像",[21,28169,28170],{},"docker container logs 查看容器日志",[21,28172,28173],{},"docker top 查看容器里的进程",[21,28175,28176],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[25,28178,28180],{"className":24156,"code":28179,"language":24158,"meta":30,"style":30},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[32,28181,28182],{"__ignoreMap":30},[35,28183,28184,28187,28190,28193],{"class":37,"line":38},[35,28185,28186],{"class":48},"如：docker",[35,28188,28189],{"class":306}," cp",[35,28191,28192],{"class":306}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[35,28194,28195],{"class":306}," \u002Fmydata\u002Fnginx\n",[21,28197,28198],{},"docker run时在启动容器的时候会有几个常用的选项：",[1501,28200,28201,28204,28207],{},[17,28202,28203],{},"-d选项：表示后台运行",[17,28205,28206],{},"-P选项：随机端口映射",[17,28208,28209],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[465,28211,28213],{"id":28212},"_53run命令的参数非常重要",[645,28214,28215],{},"5.3.run命令的参数（非常重要）",[633,28217,28218,28231],{},[636,28219,28220],{},[639,28221,28222,28225,28228],{},[642,28223,28224],{"align":24070},"参数\u002F配置",[642,28226,28227],{"align":24070},"功能说明",[642,28229,28230],{"align":24070},"重要性与参考依据",[680,28232,28233,28244,28255,28266,28277,28288,28299,28310,28321,28332,28343,28354,28365,28376,28387],{},[639,28234,28235,28238,28241],{},[685,28236,28237],{"align":24070},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[685,28239,28240],{"align":24070},"指定容器名称，便于后续管理",[685,28242,28243],{"align":24070},"替代随机生成的容器名。",[639,28245,28246,28249,28252],{},[685,28247,28248],{"align":24070},"–gpus all",[685,28250,28251],{"align":24070},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[685,28253,28254],{"align":24070},"用于CUDA加速等GPU依赖任务。",[639,28256,28257,28260,28263],{},[685,28258,28259],{"align":24070},"-e NVIDIA_DRIVER_CAPABILITIES=all",[685,28261,28262],{"align":24070},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[685,28264,28265],{"align":24070},"确保容器内GPU功能完整67。",[639,28267,28268,28271,28274],{},[685,28269,28270],{"align":24070},"-dit",[685,28272,28273],{"align":24070},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[685,28275,28276],{"align":24070},"允许容器在后台运行并支持交互操作。",[639,28278,28279,28282,28285],{},[685,28280,28281],{"align":24070},"–privileged",[685,28283,28284],{"align":24070},"赋予容器完全主机权限（可访问设备、内核模块等）",[685,28286,28287],{"align":24070},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[639,28289,28290,28293,28296],{},[685,28291,28292],{"align":24070},"–net=host",[685,28294,28295],{"align":24070},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[685,28297,28298],{"align":24070},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[639,28300,28301,28304,28307],{},[685,28302,28303],{"align":24070},"–group-add audio–group-add video–group-add dialout",[685,28305,28306],{"align":24070},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[685,28308,28309],{"align":24070},"避免权限问题（如避免无法调用摄像头、麦克风）。",[639,28311,28312,28315,28318],{},[685,28313,28314],{"align":24070},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[685,28316,28317],{"align":24070},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[685,28319,28320],{"align":24070},"支持容器内运行图形界面应用（如OpenCV可视化）。",[639,28322,28323,28326,28329],{},[685,28324,28325],{"align":24070},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[685,28327,28328],{"align":24070},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[685,28330,28331],{"align":24070},"实现容器内图形显示。",[639,28333,28334,28337,28340],{},[685,28335,28336],{"align":24070},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[685,28338,28339],{"align":24070},"挂载X11认证文件（只读）",[685,28341,28342],{"align":24070},"确保容器有权连接宿主机显示服务。",[639,28344,28345,28348,28351],{},[685,28346,28347],{"align":24070},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[685,28349,28350],{"align":24070},"挂载Wayland显示协议相关目录",[685,28352,28353],{"align":24070},"支持Wayland协议的图形显示。",[639,28355,28356,28359,28362],{},[685,28357,28358],{"align":24070},"–ulimit nofile=1024:524288",[685,28360,28361],{"align":24070},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[685,28363,28364],{"align":24070},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[639,28366,28367,28370,28373],{},[685,28368,28369],{"align":24070},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[685,28371,28372],{"align":24070},"挂载宿主机用户目录到容器内同名路径",[685,28374,28375],{"align":24070},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[639,28377,28378,28381,28384],{},[685,28379,28380],{"align":24070},"-w \u002Fhome\u002Ftungchiahui",[685,28382,28383],{"align":24070},"设置容器启动后的默认工作目录",[685,28385,28386],{"align":24070},"直接进入项目路径，方便执行命令2324。",[639,28388,28389,28392,28395],{},[685,28390,28391],{"align":24070},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[685,28393,28394],{"align":24070},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[685,28396,28397],{"align":24070},"提供预配置的深度学习与机器人开发环境。",[21,28399,28400,28401,28403,28404,28407],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[32,28402,171],{},"加不加",[32,28405,28406],{},"sudo -E","都无所谓。",[21,28409,28410,28411,28413,28414,28416,28417,28420,28421,28423],{},"用户已经被加到docker组了，不用",[32,28412,171],{},"也行跑，其次，",[32,28415,171],{},"运行的话，你的",[32,28418,28419],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[32,28422,28419],{},"更不可能变了。",[25,28425,28427],{"className":24156,"code":28426,"language":24158,"meta":30,"style":30},"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",[32,28428,28429,28442,28452,28462,28473,28480,28487,28494,28504,28513,28522,28535,28547,28559,28568,28578,28587,28602,28635,28662,28673,28680],{"__ignoreMap":30},[35,28430,28431,28433,28435,28437,28440],{"class":37,"line":38},[35,28432,171],{"class":48},[35,28434,26650],{"class":306},[35,28436,27558],{"class":306},[35,28438,28439],{"class":58}," --name=ros_opencv_cuda",[35,28441,25010],{"class":58},[35,28443,28444,28447,28450],{"class":37,"line":45},[35,28445,28446],{"class":359},"--gpus ",[35,28448,28449],{"class":306},"all",[35,28451,25010],{"class":58},[35,28453,28454,28457,28460],{"class":37,"line":55},[35,28455,28456],{"class":359},"-e ",[35,28458,28459],{"class":306},"NVIDIA_DRIVER_CAPABILITIES=all",[35,28461,25010],{"class":58},[35,28463,28464,28466,28469,28471],{"class":37,"line":65},[35,28465,28456],{"class":359},[35,28467,28468],{"class":306},"DISPLAY=",[35,28470,360],{"class":359},[35,28472,26505],{"class":58},[35,28474,28475,28478],{"class":37,"line":74},[35,28476,28477],{"class":359},"-dit ",[35,28479,26505],{"class":58},[35,28481,28482,28485],{"class":37,"line":83},[35,28483,28484],{"class":359},"--privileged ",[35,28486,26505],{"class":58},[35,28488,28489,28492],{"class":37,"line":92},[35,28490,28491],{"class":359},"--net=host ",[35,28493,26505],{"class":58},[35,28495,28496,28499,28502],{"class":37,"line":101},[35,28497,28498],{"class":359},"--group-add ",[35,28500,28501],{"class":306},"audio",[35,28503,25010],{"class":58},[35,28505,28506,28508,28511],{"class":37,"line":110},[35,28507,28498],{"class":359},[35,28509,28510],{"class":306},"video",[35,28512,25010],{"class":58},[35,28514,28515,28517,28520],{"class":37,"line":119},[35,28516,28498],{"class":359},[35,28518,28519],{"class":306},"dialout",[35,28521,25010],{"class":58},[35,28523,28524,28526,28528,28530,28533],{"class":37,"line":128},[35,28525,28456],{"class":359},[35,28527,363],{"class":306},[35,28529,28419],{"class":359},[35,28531,28532],{"class":306},"\u002F.Xauthority",[35,28534,25010],{"class":58},[35,28536,28537,28539,28542,28545],{"class":37,"line":137},[35,28538,28456],{"class":359},[35,28540,28541],{"class":306},"WAYLAND_DISPLAY=",[35,28543,28544],{"class":359},"$WAYLAND_DISPLAY ",[35,28546,26505],{"class":58},[35,28548,28549,28551,28554,28557],{"class":37,"line":144},[35,28550,28456],{"class":359},[35,28552,28553],{"class":306},"XDG_RUNTIME_DIR=",[35,28555,28556],{"class":359},"$XDG_RUNTIME_DIR ",[35,28558,26505],{"class":58},[35,28560,28561,28563,28566],{"class":37,"line":150},[35,28562,28456],{"class":359},[35,28564,28565],{"class":306},"QT_QPA_PLATFORM=xcb",[35,28567,25010],{"class":58},[35,28569,28570,28573,28576],{"class":37,"line":159},[35,28571,28572],{"class":359},"-v ",[35,28574,28575],{"class":306},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[35,28577,25010],{"class":58},[35,28579,28580,28582,28585],{"class":37,"line":168},[35,28581,28572],{"class":359},[35,28583,28584],{"class":306},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[35,28586,25010],{"class":58},[35,28588,28589,28592,28595,28597,28600],{"class":37,"line":177},[35,28590,28591],{"class":359},"-v $HOME",[35,28593,28594],{"class":306},"\u002F.Xauthority:",[35,28596,28419],{"class":359},[35,28598,28599],{"class":306},"\u002F.Xauthority:ro",[35,28601,25010],{"class":58},[35,28603,28604,28606,28609,28611,28614,28617,28619,28622,28624,28626,28628,28630,28633],{"class":37,"line":182},[35,28605,28572],{"class":359},[35,28607,28608],{"class":306},"\u002Frun\u002Fuser\u002F",[35,28610,25431],{"class":359},[35,28612,28613],{"class":48},"id",[35,28615,28616],{"class":58}," -u",[35,28618,923],{"class":359},[35,28620,28621],{"class":306},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[35,28623,25431],{"class":359},[35,28625,28613],{"class":48},[35,28627,28616],{"class":58},[35,28629,923],{"class":359},[35,28631,28632],{"class":306},"\u002Fwayland-0",[35,28634,25010],{"class":58},[35,28636,28637,28639,28641,28643,28645,28647,28649,28652,28654,28656,28658,28660],{"class":37,"line":188},[35,28638,28572],{"class":359},[35,28640,28608],{"class":306},[35,28642,25431],{"class":359},[35,28644,28613],{"class":48},[35,28646,28616],{"class":58},[35,28648,923],{"class":359},[35,28650,28651],{"class":306},":\u002Frun\u002Fuser\u002F",[35,28653,25431],{"class":359},[35,28655,28613],{"class":48},[35,28657,28616],{"class":58},[35,28659,14048],{"class":359},[35,28661,26505],{"class":58},[35,28663,28664,28666,28668,28671],{"class":37,"line":197},[35,28665,28591],{"class":359},[35,28667,1353],{"class":306},[35,28669,28670],{"class":359},"$HOME ",[35,28672,26505],{"class":58},[35,28674,28675,28678],{"class":37,"line":206},[35,28676,28677],{"class":359},"-w $HOME ",[35,28679,26505],{"class":58},[35,28681,28682],{"class":37,"line":215},[35,28683,28684],{"class":359},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[21,28686,9359],{},[14,28688,28689,28697,28700,28703],{},[17,28690,28691,14129,28693,28696],{},[32,28692,28459],{},[32,28694,28695],{},"--gpus all","没有英伟达显卡请注释。",[17,28698,28699],{},"--name后面请自己为容器起名。",[17,28701,28702],{},"最后一行仓库名称请你自己找对应的镜像填上。",[17,28704,28705,28706,28711],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23887,28707,28708],{},[645,28709,28710],{},"请不要加","。",[25,28713,28715],{"className":24156,"code":28714,"language":24158,"meta":30,"style":30},"--ulimit nofile=1024:524288 \\\n",[32,28716,28717],{"__ignoreMap":30},[35,28718,28719,28722,28725],{"class":37,"line":38},[35,28720,28721],{"class":48},"--ulimit",[35,28723,28724],{"class":306}," nofile=1024:524288",[35,28726,25010],{"class":58},[21,28728,28729,28730,28735],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23887,28731,28732],{},[645,28733,28734],{},"不建议","**.**",[25,28737,28739],{"className":24156,"code":28738,"language":24158,"meta":30,"style":30},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[32,28740,28741,28768,28777],{"__ignoreMap":30},[35,28742,28743,28746,28749,28751,28753,28755,28757,28759,28761,28764,28766],{"class":37,"line":38},[35,28744,28745],{"class":48},"--user",[35,28747,28748],{"class":359}," $(",[35,28750,28613],{"class":48},[35,28752,28616],{"class":58},[35,28754,923],{"class":359},[35,28756,1353],{"class":306},[35,28758,25431],{"class":359},[35,28760,28613],{"class":48},[35,28762,28763],{"class":58}," -g",[35,28765,14048],{"class":359},[35,28767,26505],{"class":58},[35,28769,28770,28772,28775],{"class":37,"line":45},[35,28771,28572],{"class":359},[35,28773,28774],{"class":306},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[35,28776,25010],{"class":58},[35,28778,28779,28781,28784],{"class":37,"line":55},[35,28780,28572],{"class":359},[35,28782,28783],{"class":306},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[35,28785,25010],{"class":58},[416,28787,28788],{},"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":30,"searchDepth":45,"depth":45,"links":28790},[28791,28792,28793],{"id":27791,"depth":55,"text":27792},{"id":27801,"depth":55,"text":27802},{"id":28212,"depth":55,"text":28215},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27783,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28800,"title":28801,"body":28802,"description":30,"extension":422,"meta":30425,"navigation":140,"path":30426,"seo":30427,"stem":30428,"__hash__":30429},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28803,"toc":30420},[28804,28807,28811,28814,29036,29040,29044,29047,29153,29158,29161,29166,29169,29174,29177,29182,29185,29197,29200,29205,29212,29240,29247,29323,29328,29331,29354,29356,29431,29436,29439,29443,29451,29456,29461,29465,29476,29482,29485,29488,29512,29515,29518,29546,29549,29552,30017,30020,30025,30030,30034,30057,30062,30066,30070,30073,30076,30079,30106,30109,30112,30130,30133,30136,30158,30166,30171,30176,30180,30183,30186,30189,30192,30237,30240,30258,30261,30266,30269,30290,30293,30349,30352,30357,30361,30364,30371,30374,30377,30382,30385,30401,30404,30417],[10,28805,28801],{"id":28806},"_6手动创建docker镜像",[465,28808,28810],{"id":28809},"_61dockerfile","6.1.DockerFile",[21,28812,28813],{},"常用命令：",[633,28815,28816,28827],{},[636,28817,28818],{},[639,28819,28820,28823,28825],{},[642,28821,28822],{"align":24070},"指令",[642,28824,26200],{"align":24070},[642,28826,27820],{"align":24070},[680,28828,28829,28839,28855,28866,28877,28888,28899,28910,28921,28935,28949,28960,28974,28985,28996,29010,29025],{},[639,28830,28831,28833,28836],{},[685,28832,27698],{"align":24070},[685,28834,28835],{"align":24070},"指定基础镜像，是 Dockerfile 的起点",[685,28837,28838],{"align":24070},"FROM ubuntu:22.04",[639,28840,28841,28844,28847],{},[685,28842,28843],{"align":24070},"LABEL",[685,28845,28846],{"align":24070},"添加元数据（如作者、版本等）",[685,28848,28849,28850,28854],{"align":24070},"LABEL maintainer=”",[734,28851,28853],{"href":28852},"mailto:you@example.com","you@example.com","”",[639,28856,28857,28860,28863],{},[685,28858,28859],{"align":24070},"ENV",[685,28861,28862],{"align":24070},"设置环境变量",[685,28864,28865],{"align":24070},"ENV PORT=8080",[639,28867,28868,28871,28874],{},[685,28869,28870],{"align":24070},"ARG",[685,28872,28873],{"align":24070},"构建参数，只在构建期间可用",[685,28875,28876],{"align":24070},"ARG VERSION=1.0",[639,28878,28879,28882,28885],{},[685,28880,28881],{"align":24070},"RUN",[685,28883,28884],{"align":24070},"构建镜像时运行命令",[685,28886,28887],{"align":24070},"RUN apt-get update && apt-get install -y curl",[639,28889,28890,28893,28896],{},[685,28891,28892],{"align":24070},"COPY",[685,28894,28895],{"align":24070},"复制文件到镜像中",[685,28897,28898],{"align":24070},"COPY . \u002Fapp",[639,28900,28901,28904,28907],{},[685,28902,28903],{"align":24070},"ADD",[685,28905,28906],{"align":24070},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[685,28908,28909],{"align":24070},"ADD archive.tar.gz \u002Fdata\u002F",[639,28911,28912,28915,28918],{},[685,28913,28914],{"align":24070},"WORKDIR",[685,28916,28917],{"align":24070},"设置工作目录",[685,28919,28920],{"align":24070},"WORKDIR \u002Fopt",[639,28922,28923,28926,28929],{},[685,28924,28925],{"align":24070},"CMD",[685,28927,28928],{"align":24070},"设置容器启动时默认命令（可被 docker run 覆盖）",[685,28930,28931,28932],{"align":24070},"CMD ",[35,28933,28934],{},"“node”, “index.js”",[639,28936,28937,28940,28943],{},[685,28938,28939],{"align":24070},"ENTRYPOINT",[685,28941,28942],{"align":24070},"设置容器启动时固定命令（通常用于 CLI 工具等）",[685,28944,28945,28946],{"align":24070},"ENTRYPOINT ",[35,28947,28948],{},"“python3”",[639,28950,28951,28954,28957],{},[685,28952,28953],{"align":24070},"EXPOSE",[685,28955,28956],{"align":24070},"声明镜像内服务监听的端口（不会自动映射）",[685,28958,28959],{"align":24070},"EXPOSE 80",[639,28961,28962,28965,28968],{},[685,28963,28964],{"align":24070},"VOLUME",[685,28966,28967],{"align":24070},"声明数据卷挂载点",[685,28969,28970,28971],{"align":24070},"VOLUME ",[35,28972,28973],{},"“\u002Fdata”",[639,28975,28976,28979,28982],{},[685,28977,28978],{"align":24070},"USER",[685,28980,28981],{"align":24070},"设置后续命令执行的用户",[685,28983,28984],{"align":24070},"USER appuser",[639,28986,28987,28990,28993],{},[685,28988,28989],{"align":24070},"ONBUILD",[685,28991,28992],{"align":24070},"当镜像作为其他镜像基础镜像时触发的构建指令",[685,28994,28995],{"align":24070},"ONBUILD COPY . \u002Fsrc",[639,28997,28998,29001,29004],{},[685,28999,29000],{"align":24070},"SHELL",[685,29002,29003],{"align":24070},"更改默认 shell，比如将 sh -c 改为 bash -c",[685,29005,29006,29007],{"align":24070},"SHELL ",[35,29008,29009],{},"“\u002Fbin\u002Fbash”, “-c”",[639,29011,29012,29015,29018],{},[685,29013,29014],{"align":24070},"HEALTHCHECK",[685,29016,29017],{"align":24070},"定义容器运行时的健康检查命令",[685,29019,29020,29021],{"align":24070},"`HEALTHCHECK CMD curl –fail ",[734,29022,29023],{"href":29023,"rel":29024},"http:\u002F\u002Flocalhost:8080",[24198],[639,29026,29027,29030,29033],{},[685,29028,29029],{"align":24070},"STOPSIGNAL",[685,29031,29032],{"align":24070},"容器停止时发送的信号",[685,29034,29035],{"align":24070},"STOPSIGNAL SIGKILL",[465,29037,29039],{"id":29038},"_62自己创建容器","6.2.自己创建容器",[22332,29041,29043],{"id":29042},"_621手动创建","6.2.1.手动创建",[21,29045,29046],{},"在x86电脑上编译x86的：",[25,29048,29050],{"className":24156,"code":29049,"language":24158,"meta":30,"style":30},"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",[32,29051,29052,29068,29072,29085,29089,29102,29106,29119,29123,29136,29140],{"__ignoreMap":30},[35,29053,29054,29056,29059,29062,29065],{"class":37,"line":38},[35,29055,26883],{"class":48},[35,29057,29058],{"class":306}," build",[35,29060,29061],{"class":58}," -t",[35,29063,29064],{"class":306}," ros-melodic-cuda118-cudnn8-bionic:latest",[35,29066,29067],{"class":306}," .\n",[35,29069,29070],{"class":37,"line":45},[35,29071,141],{"emptyLinePlaceholder":140},[35,29073,29074,29076,29078,29080,29083],{"class":37,"line":55},[35,29075,26883],{"class":48},[35,29077,29058],{"class":306},[35,29079,29061],{"class":58},[35,29081,29082],{"class":306}," ros-noetic-focal:latest",[35,29084,29067],{"class":306},[35,29086,29087],{"class":37,"line":65},[35,29088,141],{"emptyLinePlaceholder":140},[35,29090,29091,29093,29095,29097,29100],{"class":37,"line":74},[35,29092,26883],{"class":48},[35,29094,29058],{"class":306},[35,29096,29061],{"class":58},[35,29098,29099],{"class":306}," ros-humble-jammy:latest",[35,29101,29067],{"class":306},[35,29103,29104],{"class":37,"line":83},[35,29105,141],{"emptyLinePlaceholder":140},[35,29107,29108,29110,29112,29114,29117],{"class":37,"line":92},[35,29109,26883],{"class":48},[35,29111,29058],{"class":306},[35,29113,29061],{"class":58},[35,29115,29116],{"class":306}," ros-jazzy-noble:latest",[35,29118,29067],{"class":306},[35,29120,29121],{"class":37,"line":101},[35,29122,141],{"emptyLinePlaceholder":140},[35,29124,29125,29127,29129,29131,29134],{"class":37,"line":110},[35,29126,26883],{"class":48},[35,29128,29058],{"class":306},[35,29130,29061],{"class":58},[35,29132,29133],{"class":306}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[35,29135,29067],{"class":306},[35,29137,29138],{"class":37,"line":119},[35,29139,141],{"emptyLinePlaceholder":140},[35,29141,29142,29144,29146,29148,29151],{"class":37,"line":128},[35,29143,26883],{"class":48},[35,29145,29058],{"class":306},[35,29147,29061],{"class":58},[35,29149,29150],{"class":306}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[35,29152,29067],{"class":306},[21,29154,29155],{},[1823,29156],{"alt":30,"src":29157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[21,29159,29160],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[21,29162,29163],{},[1823,29164],{"alt":30,"src":29165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[21,29167,29168],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[14,29170,29171],{},[17,29172,29173],{},"创建 Docker Hub 账户",[21,29175,29176],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[14,29178,29179],{"start":45},[17,29180,29181],{},"登录 Docker Hub",[21,29183,29184],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[25,29186,29188],{"className":24156,"code":29187,"language":24158,"meta":30,"style":30},"docker login\n",[32,29189,29190],{"__ignoreMap":30},[35,29191,29192,29194],{"class":37,"line":38},[35,29193,26883],{"class":48},[35,29195,29196],{"class":306}," login\n",[21,29198,29199],{},"输入你的 Docker Hub 用户名和密码进行验证。",[14,29201,29202],{},[17,29203,29204],{},"为你的镜像打标签",[21,29206,29207,29208,29211],{},"Docker Hub 使用 ",[32,29209,29210],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[25,29213,29215],{"className":24156,"code":29214,"language":24158,"meta":30,"style":30},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[32,29216,29217],{"__ignoreMap":30},[35,29218,29219,29221,29224,29226,29229,29232,29235,29237],{"class":37,"line":38},[35,29220,26883],{"class":48},[35,29222,29223],{"class":306}," tag",[35,29225,29116],{"class":306},[35,29227,29228],{"class":495}," \u003C",[35,29230,29231],{"class":306},"你的用户",[35,29233,29234],{"class":359},"名",[35,29236,1454],{"class":495},[35,29238,29239],{"class":306},"\u002Fros-jazzy-noble:latest\n",[21,29241,29242,29243,29246],{},"例如，如果你的 Docker Hub 用户名是 ",[32,29244,29245],{},"tungchiahui","，你应该执行：",[25,29248,29250],{"className":24156,"code":29249,"language":24158,"meta":30,"style":30},"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",[32,29251,29252,29263,29267,29278,29282,29293,29297,29308,29312],{"__ignoreMap":30},[35,29253,29254,29256,29258,29260],{"class":37,"line":38},[35,29255,26883],{"class":48},[35,29257,29223],{"class":306},[35,29259,29082],{"class":306},[35,29261,29262],{"class":306}," tungchiahui\u002Fros-noetic-focal:latest\n",[35,29264,29265],{"class":37,"line":45},[35,29266,141],{"emptyLinePlaceholder":140},[35,29268,29269,29271,29273,29275],{"class":37,"line":55},[35,29270,26883],{"class":48},[35,29272,29223],{"class":306},[35,29274,29099],{"class":306},[35,29276,29277],{"class":306}," tungchiahui\u002Fros-humble-jammy:latest\n",[35,29279,29280],{"class":37,"line":65},[35,29281,141],{"emptyLinePlaceholder":140},[35,29283,29284,29286,29288,29290],{"class":37,"line":74},[35,29285,26883],{"class":48},[35,29287,29223],{"class":306},[35,29289,29116],{"class":306},[35,29291,29292],{"class":306}," tungchiahui\u002Fros-jazzy-noble:latest\n",[35,29294,29295],{"class":37,"line":83},[35,29296,141],{"emptyLinePlaceholder":140},[35,29298,29299,29301,29303,29305],{"class":37,"line":92},[35,29300,26883],{"class":48},[35,29302,29223],{"class":306},[35,29304,29133],{"class":306},[35,29306,29307],{"class":306}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[35,29309,29310],{"class":37,"line":101},[35,29311,141],{"emptyLinePlaceholder":140},[35,29313,29314,29316,29318,29320],{"class":37,"line":110},[35,29315,26883],{"class":48},[35,29317,29223],{"class":306},[35,29319,29150],{"class":306},[35,29321,29322],{"class":306}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[14,29324,29325],{"start":45},[17,29326,29327],{},"推送镜像到 Docker Hub",[21,29329,29330],{},"使用以下命令将镜像推送到 Docker Hub：",[25,29332,29334],{"className":24156,"code":29333,"language":24158,"meta":30,"style":30},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[32,29335,29336],{"__ignoreMap":30},[35,29337,29338,29340,29343,29345,29347,29349,29351],{"class":37,"line":38},[35,29339,26883],{"class":48},[35,29341,29342],{"class":306}," push",[35,29344,29228],{"class":495},[35,29346,29231],{"class":306},[35,29348,29234],{"class":359},[35,29350,1454],{"class":495},[35,29352,29353],{"class":306},"\u002Fros-noetic-jazzy-noble:latest\n",[21,29355,14967],{},[25,29357,29359],{"className":24156,"code":29358,"language":24158,"meta":30,"style":30},"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",[32,29360,29361,29369,29373,29381,29385,29393,29397,29406,29410,29418,29422],{"__ignoreMap":30},[35,29362,29363,29365,29367],{"class":37,"line":38},[35,29364,26883],{"class":48},[35,29366,29342],{"class":306},[35,29368,29262],{"class":306},[35,29370,29371],{"class":37,"line":45},[35,29372,141],{"emptyLinePlaceholder":140},[35,29374,29375,29377,29379],{"class":37,"line":55},[35,29376,26883],{"class":48},[35,29378,29342],{"class":306},[35,29380,29277],{"class":306},[35,29382,29383],{"class":37,"line":65},[35,29384,141],{"emptyLinePlaceholder":140},[35,29386,29387,29389,29391],{"class":37,"line":74},[35,29388,26883],{"class":48},[35,29390,29342],{"class":306},[35,29392,29292],{"class":306},[35,29394,29395],{"class":37,"line":83},[35,29396,141],{"emptyLinePlaceholder":140},[35,29398,29399,29401,29403],{"class":37,"line":92},[35,29400,26883],{"class":48},[35,29402,29342],{"class":306},[35,29404,29405],{"class":306}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[35,29407,29408],{"class":37,"line":101},[35,29409,141],{"emptyLinePlaceholder":140},[35,29411,29412,29414,29416],{"class":37,"line":110},[35,29413,26883],{"class":48},[35,29415,29342],{"class":306},[35,29417,29322],{"class":306},[35,29419,29420],{"class":37,"line":119},[35,29421,141],{"emptyLinePlaceholder":140},[35,29423,29424,29426,29428],{"class":37,"line":128},[35,29425,26883],{"class":48},[35,29427,29342],{"class":306},[35,29429,29430],{"class":306}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[14,29432,29433],{"start":55},[17,29434,29435],{},"验证推送成功",[21,29437,29438],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[21,29440,29441],{},[645,29442,4118],{},[1501,29444,29445,29448],{},[17,29446,29447],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[17,29449,29450],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[21,29452,29453],{},[1823,29454],{"alt":30,"src":29455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[21,29457,29458],{},[1823,29459],{"alt":30,"src":29460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22332,29462,29464],{"id":29463},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[21,29466,29467,29468,29471,29472,29475],{},"如果您想在 ",[645,29469,29470],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[645,29473,29474],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[21,29477,29478,29479],{},"1. ",[645,29480,29481],{},"启用 Docker 跨平台构建",[21,29483,29484],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[21,29486,29487],{},"第一步：启用 buildx（只需执行一次）",[25,29489,29491],{"className":24156,"code":29490,"language":24158,"meta":30,"style":30},"docker buildx create --name multiarch_builder --use\n",[32,29492,29493],{"__ignoreMap":30},[35,29494,29495,29497,29500,29503,29506,29509],{"class":37,"line":38},[35,29496,26883],{"class":48},[35,29498,29499],{"class":306}," buildx",[35,29501,29502],{"class":306}," create",[35,29504,29505],{"class":58}," --name",[35,29507,29508],{"class":306}," multiarch_builder",[35,29510,29511],{"class":58}," --use\n",[21,29513,29514],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[21,29516,29517],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[25,29519,29521],{"className":24156,"code":29520,"language":24158,"meta":30,"style":30},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[32,29522,29523],{"__ignoreMap":30},[35,29524,29525,29527,29529,29531,29534,29537,29540,29543],{"class":37,"line":38},[35,29526,26883],{"class":48},[35,29528,27558],{"class":306},[35,29530,27561],{"class":58},[35,29532,29533],{"class":58}," --privileged",[35,29535,29536],{"class":306}," multiarch\u002Fqemu-user-static",[35,29538,29539],{"class":58}," --reset",[35,29541,29542],{"class":58}," -p",[35,29544,29545],{"class":306}," yes\n",[21,29547,29548],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[21,29550,29551],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[25,29553,29555],{"className":24156,"code":29554,"language":24158,"meta":30,"style":30},"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",[32,29556,29557,29599,29603,29608,29618,29628,29637,29643,29647,29651,29661,29669,29678,29684,29688,29692,29702,29710,29719,29725,29729,29733,29743,29751,29760,29766,29770,29774,29784,29792,29801,29807,29811,29815,29825,29833,29842,29848,29852,29856,29866,29874,29883,29889,29893,29897,29907,29915,29924,29930,29934,29938,29948,29956,29965,29971,29975,29979,29990,29998,30007,30013],{"__ignoreMap":30},[35,29558,29559,29561,29563,29565,29568,29571,29573,29575,29578,29580,29582,29584,29586,29589,29592,29594,29597],{"class":37,"line":38},[35,29560,26883],{"class":48},[35,29562,29499],{"class":306},[35,29564,29058],{"class":306},[35,29566,29567],{"class":58}," --platform",[35,29569,29570],{"class":306}," linux\u002Famd64,linux\u002Farm64",[35,29572,29061],{"class":58},[35,29574,29228],{"class":495},[35,29576,29577],{"class":306},"你的镜像",[35,29579,29234],{"class":359},[35,29581,1454],{"class":495},[35,29583,1353],{"class":306},[35,29585,1404],{"class":495},[35,29587,29588],{"class":306},"标",[35,29590,29591],{"class":359},"签",[35,29593,1454],{"class":495},[35,29595,29596],{"class":58}," --push",[35,29598,29067],{"class":306},[35,29600,29601],{"class":37,"line":45},[35,29602,141],{"emptyLinePlaceholder":140},[35,29604,29605],{"class":37,"line":55},[35,29606,29607],{"class":41},"# 例子：\n",[35,29609,29610,29612,29614,29616],{"class":37,"line":65},[35,29611,26883],{"class":48},[35,29613,29499],{"class":306},[35,29615,29058],{"class":306},[35,29617,25010],{"class":58},[35,29619,29620,29623,29626],{"class":37,"line":74},[35,29621,29622],{"class":359},"--platform ",[35,29624,29625],{"class":306},"linux\u002Famd64,linux\u002Farm64",[35,29627,25010],{"class":58},[35,29629,29630,29632,29635],{"class":37,"line":83},[35,29631,29061],{"class":58},[35,29633,29634],{"class":306}," tungchiahui\u002Fros:noetic-focal",[35,29636,25010],{"class":58},[35,29638,29639,29641],{"class":37,"line":92},[35,29640,29596],{"class":58},[35,29642,25010],{"class":58},[35,29644,29645],{"class":37,"line":101},[35,29646,29067],{"class":306},[35,29648,29649],{"class":37,"line":110},[35,29650,141],{"emptyLinePlaceholder":140},[35,29652,29653,29655,29657,29659],{"class":37,"line":119},[35,29654,26883],{"class":48},[35,29656,29499],{"class":306},[35,29658,29058],{"class":306},[35,29660,25010],{"class":58},[35,29662,29663,29665,29667],{"class":37,"line":128},[35,29664,29622],{"class":359},[35,29666,29625],{"class":306},[35,29668,25010],{"class":58},[35,29670,29671,29673,29676],{"class":37,"line":137},[35,29672,29061],{"class":58},[35,29674,29675],{"class":306}," tungchiahui\u002Fros:humble-jammy",[35,29677,25010],{"class":58},[35,29679,29680,29682],{"class":37,"line":144},[35,29681,29596],{"class":58},[35,29683,25010],{"class":58},[35,29685,29686],{"class":37,"line":150},[35,29687,29067],{"class":306},[35,29689,29690],{"class":37,"line":159},[35,29691,141],{"emptyLinePlaceholder":140},[35,29693,29694,29696,29698,29700],{"class":37,"line":168},[35,29695,26883],{"class":48},[35,29697,29499],{"class":306},[35,29699,29058],{"class":306},[35,29701,25010],{"class":58},[35,29703,29704,29706,29708],{"class":37,"line":177},[35,29705,29622],{"class":359},[35,29707,29625],{"class":306},[35,29709,25010],{"class":58},[35,29711,29712,29714,29717],{"class":37,"line":182},[35,29713,29061],{"class":58},[35,29715,29716],{"class":306}," tungchiahui\u002Fros:jazzy-noble",[35,29718,25010],{"class":58},[35,29720,29721,29723],{"class":37,"line":188},[35,29722,29596],{"class":58},[35,29724,25010],{"class":58},[35,29726,29727],{"class":37,"line":197},[35,29728,29067],{"class":306},[35,29730,29731],{"class":37,"line":206},[35,29732,141],{"emptyLinePlaceholder":140},[35,29734,29735,29737,29739,29741],{"class":37,"line":215},[35,29736,26650],{"class":48},[35,29738,29499],{"class":306},[35,29740,29058],{"class":306},[35,29742,25010],{"class":58},[35,29744,29745,29747,29749],{"class":37,"line":224},[35,29746,29622],{"class":359},[35,29748,29625],{"class":306},[35,29750,25010],{"class":58},[35,29752,29753,29755,29758],{"class":37,"line":233},[35,29754,29061],{"class":58},[35,29756,29757],{"class":306}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[35,29759,25010],{"class":58},[35,29761,29762,29764],{"class":37,"line":238},[35,29763,29596],{"class":58},[35,29765,25010],{"class":58},[35,29767,29768],{"class":37,"line":244},[35,29769,29067],{"class":306},[35,29771,29772],{"class":37,"line":253},[35,29773,141],{"emptyLinePlaceholder":140},[35,29775,29776,29778,29780,29782],{"class":37,"line":262},[35,29777,26883],{"class":48},[35,29779,29499],{"class":306},[35,29781,29058],{"class":306},[35,29783,25010],{"class":58},[35,29785,29786,29788,29790],{"class":37,"line":271},[35,29787,29622],{"class":359},[35,29789,29625],{"class":306},[35,29791,25010],{"class":58},[35,29793,29794,29796,29799],{"class":37,"line":280},[35,29795,29061],{"class":58},[35,29797,29798],{"class":306}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[35,29800,25010],{"class":58},[35,29802,29803,29805],{"class":37,"line":289},[35,29804,29596],{"class":58},[35,29806,25010],{"class":58},[35,29808,29809],{"class":37,"line":294},[35,29810,29067],{"class":306},[35,29812,29813],{"class":37,"line":300},[35,29814,141],{"emptyLinePlaceholder":140},[35,29816,29817,29819,29821,29823],{"class":37,"line":313},[35,29818,26650],{"class":48},[35,29820,29499],{"class":306},[35,29822,29058],{"class":306},[35,29824,25010],{"class":58},[35,29826,29827,29829,29831],{"class":37,"line":324},[35,29828,29622],{"class":359},[35,29830,29625],{"class":306},[35,29832,25010],{"class":58},[35,29834,29835,29837,29840],{"class":37,"line":2955},[35,29836,29061],{"class":58},[35,29838,29839],{"class":306}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[35,29841,25010],{"class":58},[35,29843,29844,29846],{"class":37,"line":8282},[35,29845,29596],{"class":58},[35,29847,25010],{"class":58},[35,29849,29850],{"class":37,"line":8306},[35,29851,29067],{"class":306},[35,29853,29854],{"class":37,"line":8311},[35,29855,141],{"emptyLinePlaceholder":140},[35,29857,29858,29860,29862,29864],{"class":37,"line":8317},[35,29859,26883],{"class":48},[35,29861,29499],{"class":306},[35,29863,29058],{"class":306},[35,29865,25010],{"class":58},[35,29867,29868,29870,29872],{"class":37,"line":8344},[35,29869,29622],{"class":359},[35,29871,29625],{"class":306},[35,29873,25010],{"class":58},[35,29875,29876,29878,29881],{"class":37,"line":8349},[35,29877,29061],{"class":58},[35,29879,29880],{"class":306}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[35,29882,25010],{"class":58},[35,29884,29885,29887],{"class":37,"line":8355},[35,29886,29596],{"class":58},[35,29888,25010],{"class":58},[35,29890,29891],{"class":37,"line":8367},[35,29892,29067],{"class":306},[35,29894,29895],{"class":37,"line":8379},[35,29896,141],{"emptyLinePlaceholder":140},[35,29898,29899,29901,29903,29905],{"class":37,"line":8391},[35,29900,26883],{"class":48},[35,29902,29499],{"class":306},[35,29904,29058],{"class":306},[35,29906,25010],{"class":58},[35,29908,29909,29911,29913],{"class":37,"line":10050},[35,29910,29622],{"class":359},[35,29912,29625],{"class":306},[35,29914,25010],{"class":58},[35,29916,29917,29919,29922],{"class":37,"line":10075},[35,29918,29061],{"class":58},[35,29920,29921],{"class":306}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[35,29923,25010],{"class":58},[35,29925,29926,29928],{"class":37,"line":10098},[35,29927,29596],{"class":58},[35,29929,25010],{"class":58},[35,29931,29932],{"class":37,"line":10122},[35,29933,29067],{"class":306},[35,29935,29936],{"class":37,"line":10127},[35,29937,141],{"emptyLinePlaceholder":140},[35,29939,29940,29942,29944,29946],{"class":37,"line":10132},[35,29941,26650],{"class":48},[35,29943,29499],{"class":306},[35,29945,29058],{"class":306},[35,29947,25010],{"class":58},[35,29949,29950,29952,29954],{"class":37,"line":10137},[35,29951,29622],{"class":359},[35,29953,29625],{"class":306},[35,29955,25010],{"class":58},[35,29957,29958,29960,29963],{"class":37,"line":10146},[35,29959,29061],{"class":58},[35,29961,29962],{"class":306}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[35,29964,25010],{"class":58},[35,29966,29967,29969],{"class":37,"line":10151},[35,29968,29596],{"class":58},[35,29970,25010],{"class":58},[35,29972,29973],{"class":37,"line":10157},[35,29974,29067],{"class":306},[35,29976,29977],{"class":37,"line":10178},[35,29978,141],{"emptyLinePlaceholder":140},[35,29980,29981,29984,29986,29988],{"class":37,"line":10184},[35,29982,29983],{"class":48},"  docker",[35,29985,29499],{"class":306},[35,29987,29058],{"class":306},[35,29989,25010],{"class":58},[35,29991,29992,29994,29996],{"class":37,"line":10198},[35,29993,29622],{"class":359},[35,29995,29625],{"class":306},[35,29997,25010],{"class":58},[35,29999,30000,30002,30005],{"class":37,"line":10204},[35,30001,29061],{"class":58},[35,30003,30004],{"class":306}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[35,30006,25010],{"class":58},[35,30008,30009,30011],{"class":37,"line":10231},[35,30010,29596],{"class":58},[35,30012,25010],{"class":58},[35,30014,30015],{"class":37,"line":10240},[35,30016,29067],{"class":306},[21,30018,30019],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[21,30021,30022],{},[1823,30023],{"alt":30,"src":30024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[21,30026,30027],{},[1823,30028],{"alt":30,"src":30029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22332,30031,30033],{"id":30032},"_623清除构建缓存","6.2.3.清除构建缓存",[25,30035,30037],{"className":24156,"code":30036,"language":24158,"meta":30,"style":30},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[32,30038,30039,30044],{"__ignoreMap":30},[35,30040,30041],{"class":37,"line":38},[35,30042,30043],{"class":41},"# 清理BuildKit构建缓存\n",[35,30045,30046,30048,30051,30054],{"class":37,"line":45},[35,30047,26883],{"class":48},[35,30049,30050],{"class":306}," builder",[35,30052,30053],{"class":306}," prune",[35,30055,30056],{"class":58}," -f\n",[21,30058,30059],{},[1823,30060],{"alt":30,"src":30061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[465,30063,30065],{"id":30064},"_63补充","6.3.补充",[22332,30067,30069],{"id":30068},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[21,30071,30072],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[21,30074,30075],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[21,30077,30078],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[25,30080,30082],{"className":24156,"code":30081,"language":24158,"meta":30,"style":30},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[32,30083,30084,30091],{"__ignoreMap":30},[35,30085,30086,30088],{"class":37,"line":38},[35,30087,27698],{"class":48},[35,30089,30090],{"class":306}," nginx\n",[35,30092,30093,30095,30098,30101,30103],{"class":37,"line":45},[35,30094,28881],{"class":48},[35,30096,30097],{"class":306}," echo",[35,30099,30100],{"class":306}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[35,30102,26552],{"class":495},[35,30104,30105],{"class":306}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[21,30107,30108],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[21,30110,30111],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[25,30113,30115],{"className":24156,"code":30114,"language":24158,"meta":30,"style":30},"docker build -t nginx:tuling .\n",[32,30116,30117],{"__ignoreMap":30},[35,30118,30119,30121,30123,30125,30128],{"class":37,"line":38},[35,30120,26883],{"class":48},[35,30122,29058],{"class":306},[35,30124,29061],{"class":58},[35,30126,30127],{"class":306}," nginx:tuling",[35,30129,29067],{"class":306},[21,30131,30132],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[21,30134,30135],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[25,30137,30139],{"className":24156,"code":30138,"language":24158,"meta":30,"style":30},"docker run -d -p 92:80 nginx:tuling\n",[32,30140,30141],{"__ignoreMap":30},[35,30142,30143,30145,30147,30150,30152,30155],{"class":37,"line":38},[35,30144,26883],{"class":48},[35,30146,27558],{"class":306},[35,30148,30149],{"class":58}," -d",[35,30151,29542],{"class":58},[35,30153,30154],{"class":306}," 92:80",[35,30156,30157],{"class":306}," nginx:tuling\n",[21,30159,30160,30161],{},"4、访问 ",[734,30162,30165],{"href":30163,"rel":30164},"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",[24198],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[21,30167,30168],{},[1823,30169],{"alt":30,"src":30170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[21,30172,30173],{},[1823,30174],{"alt":30,"src":30175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22332,30177,30179],{"id":30178},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[21,30181,30182],{},"只需要知道大体流程即可",[21,30184,30185],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[21,30187,30188],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[21,30190,30191],{},"2、在Dockerfile中添加以下内容",[25,30193,30195],{"className":26421,"code":30194,"language":26423,"meta":30,"style":30},"# 基于哪个镜像\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",[32,30196,30197,30202,30207,30212,30217,30222,30227,30232],{"__ignoreMap":30},[35,30198,30199],{"class":37,"line":38},[35,30200,30201],{},"# 基于哪个镜像\n",[35,30203,30204],{"class":37,"line":45},[35,30205,30206],{},"From java:8\n",[35,30208,30209],{"class":37,"line":55},[35,30210,30211],{},"# 复制文件到容器\n",[35,30213,30214],{"class":37,"line":65},[35,30215,30216],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[35,30218,30219],{"class":37,"line":74},[35,30220,30221],{},"# 声明需要暴露的端口\n",[35,30223,30224],{"class":37,"line":83},[35,30225,30226],{},"EXPOSE 8877\n",[35,30228,30229],{"class":37,"line":92},[35,30230,30231],{},"# 配置容器启动后执行的命令\n",[35,30233,30234],{"class":37,"line":101},[35,30235,30236],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[21,30238,30239],{},"3、使用docker build命令构建镜像",[25,30241,30243],{"className":24156,"code":30242,"language":24158,"meta":30,"style":30},"docker build -t tulingmall-member:0.0.5 .\n",[32,30244,30245],{"__ignoreMap":30},[35,30246,30247,30249,30251,30253,30256],{"class":37,"line":38},[35,30248,26883],{"class":48},[35,30250,29058],{"class":306},[35,30252,29061],{"class":58},[35,30254,30255],{"class":306}," tulingmall-member:0.0.5",[35,30257,29067],{"class":306},[21,30259,30260],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[21,30262,30263],{},[1823,30264],{"alt":30,"src":30265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[21,30267,30268],{},"4、启动镜像，加-d可在后台启动",[25,30270,30272],{"className":24156,"code":30271,"language":24158,"meta":30,"style":30},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[32,30273,30274],{"__ignoreMap":30},[35,30275,30276,30278,30280,30282,30284,30287],{"class":37,"line":38},[35,30277,26883],{"class":48},[35,30279,27558],{"class":306},[35,30281,30149],{"class":58},[35,30283,29542],{"class":58},[35,30285,30286],{"class":306}," 8877:8877",[35,30288,30289],{"class":306}," tulingmall-member:0.0.5\n",[21,30291,30292],{},"加上JVM参数：",[25,30294,30296],{"className":24156,"code":30295,"language":24158,"meta":30,"style":30},"# --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",[32,30297,30298,30303,30318,30328,30337,30344],{"__ignoreMap":30},[35,30299,30300],{"class":37,"line":38},[35,30301,30302],{"class":41},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[35,30304,30305,30307,30309,30312,30314,30316],{"class":37,"line":45},[35,30306,26883],{"class":48},[35,30308,27558],{"class":306},[35,30310,30311],{"class":58},"  -d",[35,30313,29542],{"class":58},[35,30315,30286],{"class":306},[35,30317,25010],{"class":58},[35,30319,30320,30322,30325],{"class":37,"line":55},[35,30321,28456],{"class":359},[35,30323,30324],{"class":306},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[35,30326,30327],{"class":58},"  \\\n",[35,30329,30330,30332,30335],{"class":37,"line":65},[35,30331,28456],{"class":359},[35,30333,30334],{"class":306},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[35,30336,30327],{"class":58},[35,30338,30339,30342],{"class":37,"line":74},[35,30340,30341],{"class":359},"--cap-add=SYS_PTRACE  ",[35,30343,26505],{"class":58},[35,30345,30346],{"class":37,"line":83},[35,30347,30348],{"class":359},"tulingmall-member:0.0.5\n",[21,30350,30351],{},"5、访问会员服务接口",[21,30353,30354],{},[1823,30355],{"alt":30,"src":30356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22332,30358,30360],{"id":30359},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[21,30362,30363],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[21,30365,30366,30367],{},"阿里云docker镜像仓库：",[734,30368,30369],{"href":30369,"rel":30370},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24198],[21,30372,30373],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[21,30375,30376],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[21,30378,30379],{},[1823,30380],{"alt":30,"src":30381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[21,30383,30384],{},"要把镜像推送到镜像仓库",[25,30386,30388],{"className":24156,"code":30387,"language":24158,"meta":30,"style":30},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,30389,30390],{"__ignoreMap":30},[35,30391,30392,30394,30396,30398],{"class":37,"line":38},[35,30393,26883],{"class":48},[35,30395,29223],{"class":306},[35,30397,30255],{"class":306},[35,30399,30400],{"class":306}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[21,30402,30403],{},"最后将镜像推送到远程仓库",[25,30405,30407],{"className":24156,"code":30406,"language":24158,"meta":30,"style":30},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,30408,30409],{"__ignoreMap":30},[35,30410,30411,30413,30415],{"class":37,"line":38},[35,30412,26883],{"class":48},[35,30414,29342],{"class":306},[35,30416,30400],{"class":306},[416,30418,30419],{},"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":30,"searchDepth":45,"depth":45,"links":30421},[30422,30423,30424],{"id":28809,"depth":55,"text":28810},{"id":29038,"depth":55,"text":29039},{"id":30064,"depth":55,"text":30065},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28801,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30431,"title":30432,"body":30433,"description":30,"extension":422,"meta":30576,"navigation":140,"path":30577,"seo":30578,"stem":30579,"__hash__":30580},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30434,"toc":30574},[30435,30438,30443,30448,30451,30456,30461,30464,30469,30474,30477,30482,30485,30488,30491,30494,30497,30500,30520,30542,30545,30548,30568,30571],[10,30436,30432],{"id":30437},"_7vscode远程开发",[14,30439,30440],{},[17,30441,30442],{},"插件1：微软Docker工具",[21,30444,30445],{},[1823,30446],{"alt":30,"src":30447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[21,30449,30450],{},"docker扩展插件已经进化为container tools了，请安装container tools",[21,30452,30453],{},[1823,30454],{"alt":30,"src":30455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[14,30457,30458],{"start":45},[17,30459,30460],{},"插件2：微软Docker远程开发工具",[21,30462,30463],{},"下面这是远程开发的插件。",[21,30465,30466],{},[1823,30467],{"alt":30,"src":30468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[21,30470,30471],{},[1823,30472],{"alt":30,"src":30473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[21,30475,30476],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[21,30478,30479],{},[1823,30480],{"alt":30,"src":30481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[21,30483,30484],{},"安装完拓展之后，vscode进行链接：",[21,30486,30487],{},"1.按ctrl+shift+p",[21,30489,30490],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[21,30492,30493],{},"3.选择目前运行的容器",[21,30495,30496],{},"4.VS Code 会在新窗口中打开并连接到容器",[21,30498,30499],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[25,30501,30503],{"className":24156,"code":30502,"language":24158,"meta":30,"style":30},"docker run -v 主机目录:容器目录 image-name\n",[32,30504,30505],{"__ignoreMap":30},[35,30506,30507,30509,30511,30514,30517],{"class":37,"line":38},[35,30508,26883],{"class":48},[35,30510,27558],{"class":306},[35,30512,30513],{"class":58}," -v",[35,30515,30516],{"class":306}," 主机目录:容器目录",[35,30518,30519],{"class":306}," image-name\n",[25,30521,30523],{"className":24156,"code":30522,"language":24158,"meta":30,"style":30},"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",[32,30524,30525],{"__ignoreMap":30},[35,30526,30527,30529,30531,30534,30536,30539],{"class":37,"line":38},[35,30528,26883],{"class":48},[35,30530,27558],{"class":306},[35,30532,30533],{"class":58}," -it",[35,30535,30513],{"class":58},[35,30537,30538],{"class":306}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[35,30540,30541],{"class":306}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[21,30543,30544],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[21,30546,30547],{},"查看挂载情况：",[25,30549,30551],{"className":24156,"code":30550,"language":24158,"meta":30,"style":30},"mount | grep -i project\n",[32,30552,30553],{"__ignoreMap":30},[35,30554,30555,30558,30560,30563,30565],{"class":37,"line":38},[35,30556,30557],{"class":48},"mount",[35,30559,25441],{"class":495},[35,30561,30562],{"class":48}," grep",[35,30564,26760],{"class":58},[35,30566,30567],{"class":306}," project\n",[21,30569,30570],{},"也可以通过ls来进行查看",[416,30572,30573],{},"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":30,"searchDepth":45,"depth":45,"links":30575},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30432,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30582,"title":30583,"body":30584,"description":421,"extension":422,"meta":30588,"navigation":140,"path":30590,"seo":30591,"stem":30592,"__hash__":30593},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30585,"toc":30586},[],{"title":30,"searchDepth":45,"depth":45,"links":30587},[],{"category":30589},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30583,"description":421},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30595,"title":30596,"body":30597,"description":421,"extension":422,"meta":30601,"navigation":140,"path":30602,"seo":30603,"stem":30604,"__hash__":30605},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30598,"toc":30599},[],{"title":30,"searchDepth":45,"depth":45,"links":30600},[],{"category":30589},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30596,"description":421},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30607,"title":30608,"body":30609,"description":421,"extension":422,"meta":30902,"navigation":140,"path":30903,"seo":30904,"stem":30905,"__hash__":30906},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30610,"toc":30900},[30611,30614,30622,30637,30642,30693,30696,30702,30889,30894,30897],[10,30612,30608],{"id":30613},"_1验证深度学习环境",[21,30615,30616,30617],{},"关于环境的安装，看",[734,30618,30621],{"href":30619,"rel":30620},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24198],"Pytorch-->深度学习",[21,30623,30624,30625,30628,30629,30632,30633,30636],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[32,30626,30627],{},"pytorch-cuda=12.4"," 是一个“ ",[645,30630,30631],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[645,30634,30635],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[21,30638,30639],{},[1823,30640],{"alt":30,"src":30641},"\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",[25,30643,30645],{"className":24156,"code":30644,"language":24158,"meta":30,"style":30},"# 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",[32,30646,30647,30652],{"__ignoreMap":30},[35,30648,30649],{"class":37,"line":38},[35,30650,30651],{"class":41},"# CUDA 12.4\n",[35,30653,30654,30657,30659,30662,30665,30668,30671,30674,30676,30679,30682,30685,30688,30690],{"class":37,"line":45},[35,30655,30656],{"class":48},"conda",[35,30658,318],{"class":306},[35,30660,30661],{"class":306}," pytorch==",[35,30663,30664],{"class":58},"2.5.1",[35,30666,30667],{"class":306}," torchvision==",[35,30669,30670],{"class":58},"0.20.1",[35,30672,30673],{"class":306}," torchaudio==",[35,30675,30664],{"class":58},[35,30677,30678],{"class":306}," pytorch-cuda=",[35,30680,30681],{"class":58},"12.4",[35,30683,30684],{"class":58}," -c",[35,30686,30687],{"class":306}," pytorch",[35,30689,30684],{"class":58},[35,30691,30692],{"class":306}," nvidia\n",[21,30694,30695],{},"）：",[21,30697,30698],{},[734,30699,30700],{"href":30700,"rel":30701},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24198],[25,30703,30707],{"className":30704,"code":30705,"language":30706,"meta":30,"style":30},"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",[32,30708,30709,30714,30722,30727,30737,30753,30758,30768,30805,30812,30824,30840,30845,30855,30867,30877],{"__ignoreMap":30},[35,30710,30711],{"class":37,"line":38},[35,30712,30713],{"class":41},"# 对深度学习环境进行测试\n",[35,30715,30716,30719],{"class":37,"line":45},[35,30717,30718],{"class":495},"import",[35,30720,30721],{"class":359}," torch\n",[35,30723,30724],{"class":37,"line":55},[35,30725,30726],{"class":41},"# 查看cuda是否被激活\n",[35,30728,30729,30732,30734],{"class":37,"line":65},[35,30730,30731],{"class":359},"flag",[35,30733,544],{"class":495},[35,30735,30736],{"class":359},"torch.cuda.is_available()\n",[35,30738,30739,30742,30744,30747,30750],{"class":37,"line":74},[35,30740,30741],{"class":58},"print",[35,30743,499],{"class":359},[35,30745,30746],{"class":306},"\"cuda:\"",[35,30748,30749],{"class":359},", flag)   ",[35,30751,30752],{"class":41},"#返回true的话说明被激活\n",[35,30754,30755],{"class":37,"line":83},[35,30756,30757],{"class":41},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[35,30759,30760,30763,30765],{"class":37,"line":92},[35,30761,30762],{"class":359},"ngpu",[35,30764,544],{"class":495},[35,30766,30767],{"class":58},"1\n",[35,30769,30770,30773,30775,30778,30781,30783,30786,30789,30792,30794,30796,30798,30800,30803],{"class":37,"line":101},[35,30771,30772],{"class":359},"device",[35,30774,544],{"class":495},[35,30776,30777],{"class":359},"torch.device(",[35,30779,30780],{"class":306},"\"cuda:0\"",[35,30782,2054],{"class":495},[35,30784,30785],{"class":359},"(torch.cuda.is_available() ",[35,30787,30788],{"class":495},"and",[35,30790,30791],{"class":359}," ngpu",[35,30793,1454],{"class":495},[35,30795,687],{"class":58},[35,30797,14048],{"class":359},[35,30799,2051],{"class":495},[35,30801,30802],{"class":306}," \"cpu\"",[35,30804,505],{"class":359},[35,30806,30807,30809],{"class":37,"line":110},[35,30808,30741],{"class":58},[35,30810,30811],{"class":359},"(device)\n",[35,30813,30814,30816,30819,30821],{"class":37,"line":119},[35,30815,30741],{"class":58},[35,30817,30818],{"class":359},"(torch.cuda.get_device_name(",[35,30820,687],{"class":58},[35,30822,30823],{"class":359},"))\n",[35,30825,30826,30828,30831,30833,30835,30837],{"class":37,"line":128},[35,30827,30741],{"class":58},[35,30829,30830],{"class":359},"(torch.rand(",[35,30832,568],{"class":58},[35,30834,872],{"class":359},[35,30836,568],{"class":58},[35,30838,30839],{"class":359},").cuda())\n",[35,30841,30842],{"class":37,"line":137},[35,30843,30844],{"class":41},"# 查看cuda和cudnn的版本\n",[35,30846,30847,30850,30852],{"class":37,"line":144},[35,30848,30849],{"class":359},"cuda_version",[35,30851,544],{"class":495},[35,30853,30854],{"class":359},"torch.version.cuda\n",[35,30856,30857,30859,30861,30864],{"class":37,"line":150},[35,30858,30741],{"class":58},[35,30860,499],{"class":359},[35,30862,30863],{"class":306},"\"cuda version\"",[35,30865,30866],{"class":359},",cuda_version)\n",[35,30868,30869,30872,30874],{"class":37,"line":159},[35,30870,30871],{"class":359},"cudnn_version",[35,30873,544],{"class":495},[35,30875,30876],{"class":359},"torch.backends.cudnn.version()\n",[35,30878,30879,30881,30883,30886],{"class":37,"line":168},[35,30880,30741],{"class":58},[35,30882,499],{"class":359},[35,30884,30885],{"class":306},"\"cudnn version\"",[35,30887,30888],{"class":359},",cudnn_version)\n",[21,30890,30891],{},[1823,30892],{"alt":30,"src":30893},"\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",[21,30895,30896],{},"cuda:0 指的是一块显卡",[416,30898,30899],{},"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":30,"searchDepth":45,"depth":45,"links":30901},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30608,"description":421},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30908,"title":30909,"body":30910,"description":421,"extension":422,"meta":50714,"navigation":140,"path":50715,"seo":50716,"stem":50717,"__hash__":50718},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30911,"toc":50708},[30912,30915,30919,30923,30926,30931,30936,30939,30944,30949,30954,30957,30961,30966,30970,30975,30978,30983,30986,30989,30992,30995,31000,31003,31008,31013,31018,31023,31026,31030,31033,31038,31642,31647,31650,31655,31658,31661,32125,32128,32131,32134,32137,34188,34191,34196,34201,34996,34999,35004,35782,35786,37445,37449,38163,38167,38171,38176,38181,38186,38189,38194,38199,38204,38209,38214,38218,38223,39505,39510,39513,39516,39519,39674,39677,39680,40896,40901,41596,41600,41604,41609,41614,41617,41622,41627,41632,41637,41642,41647,41652,41657,41662,41667,41672,41677,41682,41687,41692,41697,41702,41707,41712,41717,41722,41727,41732,41737,41742,41747,41752,41757,41762,41767,41771,41775,41778,43256,43260,44907,44911,45605,45609,45612,45615,46159,46162,46166,46169,47566,47570,47573,48151,49938,49942,49945,50705],[10,30913,30909],{"id":30914},"_2经典神经网络",[465,30916,30918],{"id":30917},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22332,30920,30922],{"id":30921},"_211原理介绍","2.1.1.原理介绍",[21,30924,30925],{},"LeNet-5",[14,30927,30928],{},[17,30929,30930],{},"原理",[21,30932,30933],{},[1823,30934],{"alt":30,"src":30935},"\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",[21,30937,30938],{},"B是batch批次；C是channel通道",[14,30940,30941],{"start":45},[17,30942,30943],{},"网络参数详细",[21,30945,30946],{},[1823,30947],{"alt":30,"src":30948},"\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",[21,30950,30951],{},[1823,30952],{"alt":30,"src":30953},"\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",[21,30955,30956],{},"AlexNet",[14,30958,30959],{},[17,30960,30930],{},[21,30962,30963],{},[1823,30964],{"alt":30,"src":30965},"\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",[14,30967,30968],{"start":45},[17,30969,30943],{},[21,30971,30972],{},[1823,30973],{"alt":30,"src":30974},"\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",[21,30976,30977],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[21,30979,30980],{},[1823,30981],{"alt":30,"src":30982},"\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",[21,30984,30985],{},"数据处理中的图像增强操作:",[21,30987,30988],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[21,30990,30991],{},"①增加数据量，保证训练数据充足；②防止过拟合",[21,30993,30994],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[21,30996,30997],{},[1823,30998],{"alt":30,"src":30999},"\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",[21,31001,31002],{},"提升网络精确度的方法：LRN正则化",[21,31004,31005],{},[1823,31006],{"alt":30,"src":31007},"\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",[21,31009,31010],{},[1823,31011],{"alt":30,"src":31012},"\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",[14,31014,31015],{"start":55},[17,31016,31017],{},"AlexNet的总结",[21,31019,31020],{},[1823,31021],{"alt":30,"src":31022},"\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",[21,31024,31025],{},"比LeNet模型要深一丢丢",[22332,31027,31029],{"id":31028},"_212代码实现","2.1.2.代码实现",[21,31031,31032],{},"（1）LeNet",[14,31034,31035],{},[17,31036,31037],{},"模型搭建",[25,31039,31041],{"className":30704,"code":31040,"language":30706,"meta":30,"style":30},"# 导入库\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",[32,31042,31043,31048,31054,31059,31072,31077,31089,31093,31113,31118,31123,31134,31139,31158,31162,31167,31216,31228,31233,31262,31297,31324,31329,31341,31346,31366,31385,31404,31408,31413,31423,31440,31451,31466,31477,31488,31503,31518,31529,31536,31540,31554,31559,31582,31587,31592,31597,31601,31606,31611,31621],{"__ignoreMap":30},[35,31044,31045],{"class":37,"line":38},[35,31046,31047],{"class":41},"# 导入库\n",[35,31049,31050,31052],{"class":37,"line":45},[35,31051,30718],{"class":495},[35,31053,30721],{"class":359},[35,31055,31056],{"class":37,"line":55},[35,31057,31058],{"class":41},"# 导入神经网络层\n",[35,31060,31061,31064,31067,31069],{"class":37,"line":65},[35,31062,31063],{"class":495},"from",[35,31065,31066],{"class":359}," torch ",[35,31068,30718],{"class":495},[35,31070,31071],{"class":359}," nn\n",[35,31073,31074],{"class":37,"line":74},[35,31075,31076],{"class":41},"# 导入展示神经网络参数的包\n",[35,31078,31079,31081,31084,31086],{"class":37,"line":83},[35,31080,31063],{"class":495},[35,31082,31083],{"class":359}," torchsummary ",[35,31085,30718],{"class":495},[35,31087,31088],{"class":359}," summary\n",[35,31090,31091],{"class":37,"line":92},[35,31092,141],{"emptyLinePlaceholder":140},[35,31094,31095,31097,31100,31102,31105,31107,31110],{"class":37,"line":101},[35,31096,15028],{"class":495},[35,31098,31099],{"class":48}," LeNet",[35,31101,499],{"class":359},[35,31103,31104],{"class":48},"nn",[35,31106,1052],{"class":359},[35,31108,31109],{"class":48},"Module",[35,31111,31112],{"class":359},"):\n",[35,31114,31115],{"class":37,"line":110},[35,31116,31117],{"class":41},"    # 模型初始化:\n",[35,31119,31120],{"class":37,"line":119},[35,31121,31122],{"class":41},"    # 定义一些网络层和激活函数\n",[35,31124,31125,31128,31131],{"class":37,"line":128},[35,31126,31127],{"class":495},"    def",[35,31129,31130],{"class":58}," __init__",[35,31132,31133],{"class":359},"(self):\n",[35,31135,31136],{"class":37,"line":137},[35,31137,31138],{"class":41},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[35,31140,31141,31144,31147,31150,31153,31156],{"class":37,"line":144},[35,31142,31143],{"class":58},"        super",[35,31145,31146],{"class":359},"(LeNet,",[35,31148,31149],{"class":58},"self",[35,31151,31152],{"class":359},").",[35,31154,31155],{"class":58},"__init__",[35,31157,2317],{"class":359},[35,31159,31160],{"class":37,"line":150},[35,31161,141],{"emptyLinePlaceholder":140},[35,31163,31164],{"class":37,"line":159},[35,31165,31166],{"class":41},"        # 定义网络层\n",[35,31168,31169,31172,31175,31177,31180,31183,31185,31187,31189,31192,31194,31196,31198,31201,31203,31205,31207,31210,31212,31214],{"class":37,"line":168},[35,31170,31171],{"class":58},"        self",[35,31173,31174],{"class":359},".c1",[35,31176,544],{"class":495},[35,31178,31179],{"class":359},"nn.Conv2d(",[35,31181,31182],{"class":5550},"in_channels",[35,31184,544],{"class":495},[35,31186,713],{"class":58},[35,31188,872],{"class":359},[35,31190,31191],{"class":5550},"out_channels",[35,31193,544],{"class":495},[35,31195,408],{"class":58},[35,31197,872],{"class":359},[35,31199,31200],{"class":5550},"kernel_size",[35,31202,544],{"class":495},[35,31204,372],{"class":58},[35,31206,872],{"class":359},[35,31208,31209],{"class":5550},"padding",[35,31211,544],{"class":495},[35,31213,574],{"class":58},[35,31215,505],{"class":359},[35,31217,31218,31220,31223,31225],{"class":37,"line":177},[35,31219,31171],{"class":58},[35,31221,31222],{"class":359},".sig",[35,31224,544],{"class":495},[35,31226,31227],{"class":359},"nn.Sigmoid()\n",[35,31229,31230],{"class":37,"line":182},[35,31231,31232],{"class":41},"        # 定义池化\n",[35,31234,31235,31237,31240,31242,31245,31247,31249,31251,31253,31256,31258,31260],{"class":37,"line":188},[35,31236,31171],{"class":58},[35,31238,31239],{"class":359},".s2",[35,31241,544],{"class":495},[35,31243,31244],{"class":359},"nn.AvgPool2d(",[35,31246,31200],{"class":5550},[35,31248,544],{"class":495},[35,31250,574],{"class":58},[35,31252,872],{"class":359},[35,31254,31255],{"class":5550},"stride",[35,31257,544],{"class":495},[35,31259,574],{"class":58},[35,31261,505],{"class":359},[35,31263,31264,31266,31269,31271,31273,31275,31277,31279,31281,31283,31285,31287,31289,31291,31293,31295],{"class":37,"line":197},[35,31265,31171],{"class":58},[35,31267,31268],{"class":359},".c3",[35,31270,544],{"class":495},[35,31272,31179],{"class":359},[35,31274,31182],{"class":5550},[35,31276,544],{"class":495},[35,31278,408],{"class":58},[35,31280,872],{"class":359},[35,31282,31191],{"class":5550},[35,31284,544],{"class":495},[35,31286,1095],{"class":58},[35,31288,872],{"class":359},[35,31290,31200],{"class":5550},[35,31292,544],{"class":495},[35,31294,372],{"class":58},[35,31296,505],{"class":359},[35,31298,31299,31301,31304,31306,31308,31310,31312,31314,31316,31318,31320,31322],{"class":37,"line":206},[35,31300,31171],{"class":58},[35,31302,31303],{"class":359},".s4",[35,31305,544],{"class":495},[35,31307,31244],{"class":359},[35,31309,31200],{"class":5550},[35,31311,544],{"class":495},[35,31313,574],{"class":58},[35,31315,872],{"class":359},[35,31317,31255],{"class":5550},[35,31319,544],{"class":495},[35,31321,574],{"class":58},[35,31323,505],{"class":359},[35,31325,31326],{"class":37,"line":215},[35,31327,31328],{"class":41},"        # 定义平展层\n",[35,31330,31331,31333,31336,31338],{"class":37,"line":224},[35,31332,31171],{"class":58},[35,31334,31335],{"class":359},".flatten",[35,31337,544],{"class":495},[35,31339,31340],{"class":359},"nn.Flatten()\n",[35,31342,31343],{"class":37,"line":233},[35,31344,31345],{"class":41},"        # 定义全连接层\n",[35,31347,31348,31350,31353,31355,31358,31360,31362,31364],{"class":37,"line":238},[35,31349,31171],{"class":58},[35,31351,31352],{"class":359},".f5",[35,31354,544],{"class":495},[35,31356,31357],{"class":359},"nn.Linear(",[35,31359,4321],{"class":58},[35,31361,872],{"class":359},[35,31363,1311],{"class":58},[35,31365,505],{"class":359},[35,31367,31368,31370,31373,31375,31377,31379,31381,31383],{"class":37,"line":244},[35,31369,31171],{"class":58},[35,31371,31372],{"class":359},".f6",[35,31374,544],{"class":495},[35,31376,31357],{"class":359},[35,31378,1311],{"class":58},[35,31380,872],{"class":359},[35,31382,1205],{"class":58},[35,31384,505],{"class":359},[35,31386,31387,31389,31392,31394,31396,31398,31400,31402],{"class":37,"line":253},[35,31388,31171],{"class":58},[35,31390,31391],{"class":359},".f7",[35,31393,544],{"class":495},[35,31395,31357],{"class":359},[35,31397,1205],{"class":58},[35,31399,872],{"class":359},[35,31401,940],{"class":58},[35,31403,505],{"class":359},[35,31405,31406],{"class":37,"line":262},[35,31407,141],{"emptyLinePlaceholder":140},[35,31409,31410],{"class":37,"line":271},[35,31411,31412],{"class":41},"    # 写工具->写前向传播\n",[35,31414,31415,31417,31420],{"class":37,"line":280},[35,31416,31127],{"class":495},[35,31418,31419],{"class":48}," forward",[35,31421,31422],{"class":359},"(self,x):\n",[35,31424,31425,31428,31430,31432,31435,31437],{"class":37,"line":289},[35,31426,31427],{"class":359},"        x",[35,31429,544],{"class":495},[35,31431,31149],{"class":58},[35,31433,31434],{"class":359},".sig(",[35,31436,31149],{"class":58},[35,31438,31439],{"class":359},".c1(x))\n",[35,31441,31442,31444,31446,31448],{"class":37,"line":294},[35,31443,31427],{"class":359},[35,31445,544],{"class":495},[35,31447,31149],{"class":58},[35,31449,31450],{"class":359},".s2(x)\n",[35,31452,31453,31455,31457,31459,31461,31463],{"class":37,"line":300},[35,31454,31427],{"class":359},[35,31456,544],{"class":495},[35,31458,31149],{"class":58},[35,31460,31434],{"class":359},[35,31462,31149],{"class":58},[35,31464,31465],{"class":359},".c3(x))\n",[35,31467,31468,31470,31472,31474],{"class":37,"line":313},[35,31469,31427],{"class":359},[35,31471,544],{"class":495},[35,31473,31149],{"class":58},[35,31475,31476],{"class":359},".s4(x)\n",[35,31478,31479,31481,31483,31485],{"class":37,"line":324},[35,31480,31427],{"class":359},[35,31482,544],{"class":495},[35,31484,31149],{"class":58},[35,31486,31487],{"class":359},".flatten(x)\n",[35,31489,31490,31492,31494,31496,31498,31500],{"class":37,"line":2955},[35,31491,31427],{"class":359},[35,31493,544],{"class":495},[35,31495,31149],{"class":58},[35,31497,31434],{"class":359},[35,31499,31149],{"class":58},[35,31501,31502],{"class":359},".f5(x))\n",[35,31504,31505,31507,31509,31511,31513,31515],{"class":37,"line":8282},[35,31506,31427],{"class":359},[35,31508,544],{"class":495},[35,31510,31149],{"class":58},[35,31512,31434],{"class":359},[35,31514,31149],{"class":58},[35,31516,31517],{"class":359},".f6(x))\n",[35,31519,31520,31522,31524,31526],{"class":37,"line":8306},[35,31521,31427],{"class":359},[35,31523,544],{"class":495},[35,31525,31149],{"class":58},[35,31527,31528],{"class":359},".f7(x)\n",[35,31530,31531,31533],{"class":37,"line":8311},[35,31532,15086],{"class":495},[35,31534,31535],{"class":359}," x\n",[35,31537,31538],{"class":37,"line":8317},[35,31539,141],{"emptyLinePlaceholder":140},[35,31541,31542,31544,31547,31549,31552],{"class":37,"line":8344},[35,31543,1892],{"class":495},[35,31545,31546],{"class":58}," __name__",[35,31548,3283],{"class":495},[35,31550,31551],{"class":306},"\"__main__\"",[35,31553,4073],{"class":359},[35,31555,31556],{"class":37,"line":8349},[35,31557,31558],{"class":41},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[35,31560,31561,31564,31566,31568,31571,31573,31576,31578,31580],{"class":37,"line":8355},[35,31562,31563],{"class":359},"    device",[35,31565,544],{"class":495},[35,31567,30777],{"class":359},[35,31569,31570],{"class":306},"\"cuda\"",[35,31572,2054],{"class":495},[35,31574,31575],{"class":359}," torch.cuda.is_available() ",[35,31577,2051],{"class":495},[35,31579,30802],{"class":306},[35,31581,505],{"class":359},[35,31583,31584],{"class":37,"line":8367},[35,31585,31586],{"class":41},"    # 如果就是想指定用cpu用下方代码:\n",[35,31588,31589],{"class":37,"line":8379},[35,31590,31591],{"class":41},"    # device=\"cpu\"\n",[35,31593,31594],{"class":37,"line":8391},[35,31595,31596],{"class":41},"    # print(device)\n",[35,31598,31599],{"class":37,"line":10050},[35,31600,141],{"emptyLinePlaceholder":140},[35,31602,31603],{"class":37,"line":10075},[35,31604,31605],{"class":41},"    # 实例化模型\n",[35,31607,31608],{"class":37,"line":10098},[35,31609,31610],{"class":41},"    # 将模型放到设备中去运行\n",[35,31612,31613,31616,31618],{"class":37,"line":10122},[35,31614,31615],{"class":359},"    model",[35,31617,544],{"class":495},[35,31619,31620],{"class":359},"LeNet().to(device)\n",[35,31622,31623,31626,31629,31631,31633,31635,31637,31639],{"class":37,"line":10127},[35,31624,31625],{"class":58},"    print",[35,31627,31628],{"class":359},"(summary(model,(",[35,31630,713],{"class":58},[35,31632,872],{"class":359},[35,31634,1395],{"class":58},[35,31636,872],{"class":359},[35,31638,1395],{"class":58},[35,31640,31641],{"class":359},")))\n",[21,31643,31644],{},[1823,31645],{"alt":30,"src":31646},"\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",[21,31648,31649],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[14,31651,31652],{"start":45},[17,31653,31654],{},"训练",[21,31656,31657],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[21,31659,31660],{},"在训练之前可以将数据展示看一下",[25,31662,31664],{"className":30704,"code":31663,"language":30706,"meta":30,"style":30},"# 建立画图的函数，用于展示数据\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",[32,31665,31666,31671,31676,31688,31700,31713,31718,31730,31735,31747,31752,31764,31768,31772,31793,31805,31810,31831,31842,31846,31851,31869,31880,31885,31896,31901,31912,31916,31921,31936,31949,31954,31959,31972,31985,31998,32003,32007,32012,32032,32049,32069,32082,32095,32105,32120],{"__ignoreMap":30},[35,31667,31668],{"class":37,"line":38},[35,31669,31670],{"class":41},"# 建立画图的函数，用于展示数据\n",[35,31672,31673],{"class":37,"line":45},[35,31674,31675],{"class":41},"# torchvision中包含很多内置的数据集\n",[35,31677,31678,31680,31683,31685],{"class":37,"line":55},[35,31679,31063],{"class":495},[35,31681,31682],{"class":359}," sklearn.externals.array_api_compat.torch ",[35,31684,30718],{"class":495},[35,31686,31687],{"class":359}," squeeze\n",[35,31689,31690,31692,31695,31697],{"class":37,"line":65},[35,31691,31063],{"class":495},[35,31693,31694],{"class":359}," torchvision.datasets ",[35,31696,30718],{"class":495},[35,31698,31699],{"class":359}," FashionMNIST\n",[35,31701,31702,31704,31707,31710],{"class":37,"line":74},[35,31703,30718],{"class":495},[35,31705,31706],{"class":359}," numpy ",[35,31708,31709],{"class":495},"as",[35,31711,31712],{"class":359}," np\n",[35,31714,31715],{"class":37,"line":83},[35,31716,31717],{"class":41},"# 引入处理数据集的包\n",[35,31719,31720,31722,31725,31727],{"class":37,"line":92},[35,31721,31063],{"class":495},[35,31723,31724],{"class":359}," torchvision ",[35,31726,30718],{"class":495},[35,31728,31729],{"class":359}," transforms\n",[35,31731,31732],{"class":37,"line":101},[35,31733,31734],{"class":41},"# 从torch库中引入数据处理的包\n",[35,31736,31737,31739,31742,31744],{"class":37,"line":110},[35,31738,30718],{"class":495},[35,31740,31741],{"class":359}," torch.utils.data ",[35,31743,31709],{"class":495},[35,31745,31746],{"class":359}," Data\n",[35,31748,31749],{"class":37,"line":119},[35,31750,31751],{"class":41},"# 导入画图的库\n",[35,31753,31754,31756,31759,31761],{"class":37,"line":128},[35,31755,30718],{"class":495},[35,31757,31758],{"class":359}," matplotlib.pyplot ",[35,31760,31709],{"class":495},[35,31762,31763],{"class":359}," plt\n",[35,31765,31766],{"class":37,"line":137},[35,31767,141],{"emptyLinePlaceholder":140},[35,31769,31770],{"class":37,"line":144},[35,31771,141],{"emptyLinePlaceholder":140},[35,31773,31774,31777,31779,31782,31785,31787,31790],{"class":37,"line":150},[35,31775,31776],{"class":359},"train_data",[35,31778,544],{"class":495},[35,31780,31781],{"class":359},"FashionMNIST(",[35,31783,31784],{"class":5550},"root",[35,31786,544],{"class":495},[35,31788,31789],{"class":306},"'.\u002Fdata'",[35,31791,31792],{"class":359},",\n",[35,31794,31795,31798,31800,31803],{"class":37,"line":159},[35,31796,31797],{"class":5550},"                        train",[35,31799,544],{"class":495},[35,31801,31802],{"class":58},"True",[35,31804,31792],{"class":359},[35,31806,31807],{"class":37,"line":168},[35,31808,31809],{"class":41},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[35,31811,31812,31815,31817,31820,31823,31825,31828],{"class":37,"line":177},[35,31813,31814],{"class":5550},"                        transform",[35,31816,544],{"class":495},[35,31818,31819],{"class":359},"transforms.Compose([transforms.Resize(",[35,31821,31822],{"class":5550},"size",[35,31824,544],{"class":495},[35,31826,31827],{"class":58},"224",[35,31829,31830],{"class":359},"),transforms.ToTensor()]),\n",[35,31832,31833,31836,31838,31840],{"class":37,"line":182},[35,31834,31835],{"class":5550},"                        download",[35,31837,544],{"class":495},[35,31839,31802],{"class":58},[35,31841,505],{"class":359},[35,31843,31844],{"class":37,"line":188},[35,31845,141],{"emptyLinePlaceholder":140},[35,31847,31848],{"class":37,"line":197},[35,31849,31850],{"class":41},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[35,31852,31853,31856,31858,31861,31864,31866],{"class":37,"line":206},[35,31854,31855],{"class":359},"train_loader",[35,31857,544],{"class":495},[35,31859,31860],{"class":359},"Data.DataLoader(",[35,31862,31863],{"class":5550},"dataset",[35,31865,544],{"class":495},[35,31867,31868],{"class":359},"train_data,\n",[35,31870,31871,31874,31876,31878],{"class":37,"line":215},[35,31872,31873],{"class":5550},"                             batch_size",[35,31875,544],{"class":495},[35,31877,699],{"class":58},[35,31879,31792],{"class":359},[35,31881,31882],{"class":37,"line":224},[35,31883,31884],{"class":41},"                             # 数据是否打乱\n",[35,31886,31887,31890,31892,31894],{"class":37,"line":233},[35,31888,31889],{"class":5550},"                             shuffle",[35,31891,544],{"class":495},[35,31893,31802],{"class":58},[35,31895,31792],{"class":359},[35,31897,31898],{"class":37,"line":238},[35,31899,31900],{"class":41},"                             # 规定加载数据的进程\n",[35,31902,31903,31906,31908,31910],{"class":37,"line":244},[35,31904,31905],{"class":5550},"                             num_workers",[35,31907,544],{"class":495},[35,31909,687],{"class":58},[35,31911,505],{"class":359},[35,31913,31914],{"class":37,"line":253},[35,31915,141],{"emptyLinePlaceholder":140},[35,31917,31918],{"class":37,"line":262},[35,31919,31920],{"class":41},"# 获得一个batch的数据\n",[35,31922,31923,31925,31928,31930,31933],{"class":37,"line":271},[35,31924,3359],{"class":495},[35,31926,31927],{"class":359}," step,(b_x,b_y) ",[35,31929,26374],{"class":495},[35,31931,31932],{"class":58}," enumerate",[35,31934,31935],{"class":359},"(train_loader):\n",[35,31937,31938,31940,31943,31945,31947],{"class":37,"line":280},[35,31939,3435],{"class":495},[35,31941,31942],{"class":359}," step ",[35,31944,1454],{"class":495},[35,31946,4427],{"class":58},[35,31948,4073],{"class":359},[35,31950,31951],{"class":37,"line":289},[35,31952,31953],{"class":495},"        break\n",[35,31955,31956],{"class":37,"line":294},[35,31957,31958],{"class":41},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[35,31960,31961,31964,31966,31969],{"class":37,"line":300},[35,31962,31963],{"class":359},"batch_x",[35,31965,544],{"class":495},[35,31967,31968],{"class":359},"b_x.squeeze().numpy()  ",[35,31970,31971],{"class":41},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[35,31973,31974,31977,31979,31982],{"class":37,"line":313},[35,31975,31976],{"class":359},"batch_y",[35,31978,544],{"class":495},[35,31980,31981],{"class":359},"b_y.numpy()   ",[35,31983,31984],{"class":41},"#将张量转换成功numpy数组\n",[35,31986,31987,31990,31992,31995],{"class":37,"line":324},[35,31988,31989],{"class":359},"class_label",[35,31991,544],{"class":495},[35,31993,31994],{"class":359},"train_data.classes  ",[35,31996,31997],{"class":41},"#训练集标签\n",[35,31999,32000],{"class":37,"line":2955},[35,32001,32002],{"class":41},"# print(class_label)\n",[35,32004,32005],{"class":37,"line":8282},[35,32006,141],{"emptyLinePlaceholder":140},[35,32008,32009],{"class":37,"line":8306},[35,32010,32011],{"class":41},"# 可视化一个batch的图像\n",[35,32013,32014,32017,32020,32022,32024,32026,32028,32030],{"class":37,"line":8311},[35,32015,32016],{"class":359},"plt.figure(",[35,32018,32019],{"class":5550},"figsize",[35,32021,544],{"class":495},[35,32023,499],{"class":359},[35,32025,992],{"class":58},[35,32027,872],{"class":359},[35,32029,372],{"class":58},[35,32031,30823],{"class":359},[35,32033,32034,32036,32039,32041,32044,32046],{"class":37,"line":8317},[35,32035,3359],{"class":495},[35,32037,32038],{"class":359}," ii ",[35,32040,26374],{"class":495},[35,32042,32043],{"class":359}," np.arange(",[35,32045,7692],{"class":58},[35,32047,32048],{"class":359},"(batch_y)):\n",[35,32050,32051,32054,32056,32058,32060,32063,32065,32067],{"class":37,"line":8344},[35,32052,32053],{"class":359},"    plt.subplot(",[35,32055,789],{"class":58},[35,32057,872],{"class":359},[35,32059,1095],{"class":58},[35,32061,32062],{"class":359},",ii ",[35,32064,975],{"class":495},[35,32066,25450],{"class":58},[35,32068,505],{"class":359},[35,32070,32071,32074,32077,32079],{"class":37,"line":8349},[35,32072,32073],{"class":359},"    plt.imshow(batch_x[ii,:,:],",[35,32075,32076],{"class":5550},"cmap",[35,32078,544],{"class":495},[35,32080,32081],{"class":359},"plt.cm.gray)\n",[35,32083,32084,32087,32089,32091,32093],{"class":37,"line":8355},[35,32085,32086],{"class":359},"    plt.title(class_label[batch_y[ii]],",[35,32088,31822],{"class":5550},[35,32090,544],{"class":495},[35,32092,940],{"class":58},[35,32094,505],{"class":359},[35,32096,32097,32100,32103],{"class":37,"line":8367},[35,32098,32099],{"class":359},"    plt.axis(",[35,32101,32102],{"class":306},"\"off\"",[35,32104,505],{"class":359},[35,32106,32107,32110,32113,32115,32118],{"class":37,"line":8379},[35,32108,32109],{"class":359},"    plt.subplots_adjust(",[35,32111,32112],{"class":5550},"wspace",[35,32114,544],{"class":495},[35,32116,32117],{"class":58},"0.05",[35,32119,505],{"class":359},[35,32121,32122],{"class":37,"line":8391},[35,32123,32124],{"class":359},"plt.show()\n",[21,32126,32127],{},"用matplotlib进行展示的过程可以后续再补",[21,32129,32130],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[21,32132,32133],{},"训练次数就是按照批次过整个训练集数据的次数",[21,32135,32136],{},"模型训练：",[25,32138,32140],{"className":30704,"code":32139,"language":30706,"meta":30,"style":30},"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",[32,32141,32142,32149,32156,32160,32172,32178,32189,32199,32209,32219,32229,32234,32246,32256,32260,32264,32269,32280,32293,32304,32321,32332,32371,32387,32399,32410,32415,32426,32442,32453,32464,32475,32482,32486,32491,32496,32500,32505,32515,32536,32540,32544,32549,32554,32559,32579,32583,32588,32598,32602,32607,32616,32621,32626,32631,32641,32645,32649,32654,32659,32669,32674,32684,32689,32698,32703,32712,32717,32726,32730,32735,32745,32749,32753,32758,32773,32801,32816,32820,32825,32830,32839,32844,32853,32858,32867,32872,32881,32886,32895,32900,32909,32914,32927,32932,32942,32947,32957,32963,32969,32975,32981,32992,32998,33018,33024,33035,33041,33047,33053,33059,33065,33071,33077,33097,33103,33119,33125,33139,33145,33160,33166,33175,33181,33190,33196,33202,33211,33217,33228,33234,33253,33259,33270,33276,33296,33312,33318,33332,33338,33344,33355,33361,33367,33377,33383,33394,33400,33410,33415,33421,33470,33517,33522,33528,33547,33553,33573,33579,33585,33595,33600,33606,33622,33667,33673,33679,33685,33696,33702,33708,33714,33732,33746,33755,33764,33773,33782,33788,33794,33802,33807,33813,33824,33830,33850,33856,33862,33868,33885,33891,33897,33903,33909,33915,33942,33966,33972,33978,33984,33995,34006,34012,34029,34052,34075,34081,34086,34095,34105,34111,34116,34122,34135,34141,34152,34163,34182],{"__ignoreMap":30},[35,32143,32144,32146],{"class":37,"line":38},[35,32145,30718],{"class":495},[35,32147,32148],{"class":359}," copy\n",[35,32150,32151,32153],{"class":37,"line":45},[35,32152,30718],{"class":495},[35,32154,32155],{"class":359}," time\n",[35,32157,32158],{"class":37,"line":55},[35,32159,141],{"emptyLinePlaceholder":140},[35,32161,32162,32164,32167,32169],{"class":37,"line":65},[35,32163,30718],{"class":495},[35,32165,32166],{"class":359}," pandas ",[35,32168,31709],{"class":495},[35,32170,32171],{"class":359}," pd\n",[35,32173,32174,32176],{"class":37,"line":74},[35,32175,30718],{"class":495},[35,32177,30721],{"class":359},[35,32179,32180,32182,32184,32186],{"class":37,"line":83},[35,32181,31063],{"class":495},[35,32183,31741],{"class":359},[35,32185,30718],{"class":495},[35,32187,32188],{"class":359}," Dataset\n",[35,32190,32191,32193,32195,32197],{"class":37,"line":92},[35,32192,31063],{"class":495},[35,32194,31694],{"class":359},[35,32196,30718],{"class":495},[35,32198,31699],{"class":359},[35,32200,32201,32203,32205,32207],{"class":37,"line":101},[35,32202,31063],{"class":495},[35,32204,31724],{"class":359},[35,32206,30718],{"class":495},[35,32208,31729],{"class":359},[35,32210,32211,32213,32215,32217],{"class":37,"line":110},[35,32212,30718],{"class":495},[35,32214,31741],{"class":359},[35,32216,31709],{"class":495},[35,32218,31746],{"class":359},[35,32220,32221,32223,32225,32227],{"class":37,"line":119},[35,32222,30718],{"class":495},[35,32224,31758],{"class":359},[35,32226,31709],{"class":495},[35,32228,31763],{"class":359},[35,32230,32231],{"class":37,"line":128},[35,32232,32233],{"class":41},"# 导入模型\n",[35,32235,32236,32238,32241,32243],{"class":37,"line":137},[35,32237,31063],{"class":495},[35,32239,32240],{"class":359}," model ",[35,32242,30718],{"class":495},[35,32244,32245],{"class":359}," LeNet\n",[35,32247,32248,32250,32252,32254],{"class":37,"line":144},[35,32249,31063],{"class":495},[35,32251,31066],{"class":359},[35,32253,30718],{"class":495},[35,32255,31071],{"class":359},[35,32257,32258],{"class":37,"line":150},[35,32259,141],{"emptyLinePlaceholder":140},[35,32261,32262],{"class":37,"line":159},[35,32263,141],{"emptyLinePlaceholder":140},[35,32265,32266],{"class":37,"line":168},[35,32267,32268],{"class":41},"# 处理训练集与验证集函数--->划分数据集\n",[35,32270,32271,32274,32277],{"class":37,"line":177},[35,32272,32273],{"class":495},"def",[35,32275,32276],{"class":48}," train_val_data_process",[35,32278,32279],{"class":359},"():\n",[35,32281,32282,32285,32287,32289,32291],{"class":37,"line":182},[35,32283,32284],{"class":359},"    train_data",[35,32286,544],{"class":495},[35,32288,31781],{"class":359},[35,32290,31789],{"class":306},[35,32292,31792],{"class":359},[35,32294,32295,32298,32300,32302],{"class":37,"line":188},[35,32296,32297],{"class":5550},"                            train",[35,32299,544],{"class":495},[35,32301,31802],{"class":58},[35,32303,31792],{"class":359},[35,32305,32306,32309,32311,32313,32315,32317,32319],{"class":37,"line":197},[35,32307,32308],{"class":5550},"                            transform",[35,32310,544],{"class":495},[35,32312,31819],{"class":359},[35,32314,31822],{"class":5550},[35,32316,544],{"class":495},[35,32318,1395],{"class":58},[35,32320,31830],{"class":359},[35,32322,32323,32326,32328,32330],{"class":37,"line":206},[35,32324,32325],{"class":5550},"                            download",[35,32327,544],{"class":495},[35,32329,31802],{"class":58},[35,32331,505],{"class":359},[35,32333,32334,32337,32339,32342,32345,32347,32350,32352,32354,32357,32359,32361,32364,32366,32368],{"class":37,"line":215},[35,32335,32336],{"class":359},"    train_data,val_data",[35,32338,544],{"class":495},[35,32340,32341],{"class":359},"Data.random_split(train_data,[",[35,32343,32344],{"class":58},"round",[35,32346,499],{"class":359},[35,32348,32349],{"class":58},"0.8",[35,32351,949],{"class":495},[35,32353,7692],{"class":58},[35,32355,32356],{"class":359},"(train_data)),",[35,32358,32344],{"class":58},[35,32360,499],{"class":359},[35,32362,32363],{"class":58},"0.2",[35,32365,949],{"class":495},[35,32367,7692],{"class":58},[35,32369,32370],{"class":359},"(train_data))])\n",[35,32372,32373,32376,32378,32381,32383,32385],{"class":37,"line":224},[35,32374,32375],{"class":359},"    train_dataloader ",[35,32377,544],{"class":495},[35,32379,32380],{"class":359}," Data.DataLoader(",[35,32382,31863],{"class":5550},[35,32384,544],{"class":495},[35,32386,31868],{"class":359},[35,32388,32389,32392,32394,32397],{"class":37,"line":233},[35,32390,32391],{"class":5550},"                                       batch_size",[35,32393,544],{"class":495},[35,32395,32396],{"class":58},"128",[35,32398,31792],{"class":359},[35,32400,32401,32404,32406,32408],{"class":37,"line":238},[35,32402,32403],{"class":5550},"                                       shuffle",[35,32405,544],{"class":495},[35,32407,31802],{"class":58},[35,32409,31792],{"class":359},[35,32411,32412],{"class":37,"line":244},[35,32413,32414],{"class":41},"                                       # 规定8个进程\n",[35,32416,32417,32420,32422,32424],{"class":37,"line":253},[35,32418,32419],{"class":5550},"                                       num_workers",[35,32421,544],{"class":495},[35,32423,889],{"class":58},[35,32425,505],{"class":359},[35,32427,32428,32431,32433,32435,32437,32439],{"class":37,"line":262},[35,32429,32430],{"class":359},"    val_dataloader",[35,32432,544],{"class":495},[35,32434,31860],{"class":359},[35,32436,31863],{"class":5550},[35,32438,544],{"class":495},[35,32440,32441],{"class":359},"val_data,\n",[35,32443,32444,32447,32449,32451],{"class":37,"line":271},[35,32445,32446],{"class":5550},"                                   batch_size",[35,32448,544],{"class":495},[35,32450,32396],{"class":58},[35,32452,31792],{"class":359},[35,32454,32455,32458,32460,32462],{"class":37,"line":280},[35,32456,32457],{"class":5550},"                                   shuffle",[35,32459,544],{"class":495},[35,32461,31802],{"class":58},[35,32463,31792],{"class":359},[35,32465,32466,32469,32471,32473],{"class":37,"line":289},[35,32467,32468],{"class":5550},"                                   num_workers",[35,32470,544],{"class":495},[35,32472,889],{"class":58},[35,32474,505],{"class":359},[35,32476,32477,32479],{"class":37,"line":294},[35,32478,4424],{"class":495},[35,32480,32481],{"class":359}," train_dataloader,val_dataloader\n",[35,32483,32484],{"class":37,"line":300},[35,32485,141],{"emptyLinePlaceholder":140},[35,32487,32488],{"class":37,"line":313},[35,32489,32490],{"class":41},"# 验证是否出错\n",[35,32492,32493],{"class":37,"line":324},[35,32494,32495],{"class":41},"# train_val_data_process()\n",[35,32497,32498],{"class":37,"line":2955},[35,32499,141],{"emptyLinePlaceholder":140},[35,32501,32502],{"class":37,"line":8282},[35,32503,32504],{"class":41},"# 定义模型训练函数\n",[35,32506,32507,32509,32512],{"class":37,"line":8306},[35,32508,32273],{"class":495},[35,32510,32511],{"class":48}," train_model_process",[35,32513,32514],{"class":359},"(model,train_dataloader,val_dataloader,num_epochs):\n",[35,32516,32517,32519,32521,32523,32525,32527,32529,32531,32534],{"class":37,"line":8311},[35,32518,31563],{"class":359},[35,32520,544],{"class":495},[35,32522,30777],{"class":359},[35,32524,31570],{"class":306},[35,32526,2054],{"class":495},[35,32528,31575],{"class":359},[35,32530,2051],{"class":495},[35,32532,32533],{"class":306}," 'cpu'",[35,32535,505],{"class":359},[35,32537,32538],{"class":37,"line":8317},[35,32539,141],{"emptyLinePlaceholder":140},[35,32541,32542],{"class":37,"line":8344},[35,32543,141],{"emptyLinePlaceholder":140},[35,32545,32546],{"class":37,"line":8349},[35,32547,32548],{"class":41},"    # 定义优化器\n",[35,32550,32551],{"class":37,"line":8355},[35,32552,32553],{"class":41},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[35,32555,32556],{"class":37,"line":8367},[35,32557,32558],{"class":41},"    # lr为学习率\n",[35,32560,32561,32564,32566,32569,32572,32574,32577],{"class":37,"line":8379},[35,32562,32563],{"class":359},"    optimizer",[35,32565,544],{"class":495},[35,32567,32568],{"class":359},"torch.optim.Adam(model.parameters(),",[35,32570,32571],{"class":5550},"lr",[35,32573,544],{"class":495},[35,32575,32576],{"class":58},"0.001",[35,32578,505],{"class":359},[35,32580,32581],{"class":37,"line":8391},[35,32582,141],{"emptyLinePlaceholder":140},[35,32584,32585],{"class":37,"line":10050},[35,32586,32587],{"class":41},"    # 定义损失函数使用交叉熵损失函数\n",[35,32589,32590,32593,32595],{"class":37,"line":10075},[35,32591,32592],{"class":359},"    criterion",[35,32594,544],{"class":495},[35,32596,32597],{"class":359},"nn.CrossEntropyLoss()\n",[35,32599,32600],{"class":37,"line":10098},[35,32601,141],{"emptyLinePlaceholder":140},[35,32603,32604],{"class":37,"line":10122},[35,32605,32606],{"class":41},"    # 将模型放到GPU中进行训练\n",[35,32608,32609,32611,32613],{"class":37,"line":10127},[35,32610,31615],{"class":359},[35,32612,544],{"class":495},[35,32614,32615],{"class":359},"model.to(device)\n",[35,32617,32618],{"class":37,"line":10132},[35,32619,32620],{"class":41},"    # 复制当前模型的参数\n",[35,32622,32623],{"class":37,"line":10137},[35,32624,32625],{"class":41},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[35,32627,32628],{"class":37,"line":10146},[35,32629,32630],{"class":41},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[35,32632,32633,32636,32638],{"class":37,"line":10151},[35,32634,32635],{"class":359},"    best_model_wts",[35,32637,544],{"class":495},[35,32639,32640],{"class":359},"copy.deepcopy(model.state_dict())\n",[35,32642,32643],{"class":37,"line":10157},[35,32644,141],{"emptyLinePlaceholder":140},[35,32646,32647],{"class":37,"line":10178},[35,32648,141],{"emptyLinePlaceholder":140},[35,32650,32651],{"class":37,"line":10184},[35,32652,32653],{"class":41},"    # 初始化参数\n",[35,32655,32656],{"class":37,"line":10198},[35,32657,32658],{"class":41},"    # 最高准确度\n",[35,32660,32661,32664,32666],{"class":37,"line":10204},[35,32662,32663],{"class":359},"    best_acc",[35,32665,544],{"class":495},[35,32667,32668],{"class":58},"0.0\n",[35,32670,32671],{"class":37,"line":10231},[35,32672,32673],{"class":41},"    # 训练集损失列表\n",[35,32675,32676,32679,32681],{"class":37,"line":10240},[35,32677,32678],{"class":359},"    train_loss_all",[35,32680,544],{"class":495},[35,32682,32683],{"class":359},"[]\n",[35,32685,32686],{"class":37,"line":10246},[35,32687,32688],{"class":41},"    # 验证集函数列表\n",[35,32690,32691,32694,32696],{"class":37,"line":10254},[35,32692,32693],{"class":359},"    val_loss_all",[35,32695,544],{"class":495},[35,32697,32683],{"class":359},[35,32699,32700],{"class":37,"line":10259},[35,32701,32702],{"class":41},"    # 训练集准确度列表\n",[35,32704,32705,32708,32710],{"class":37,"line":16938},[35,32706,32707],{"class":359},"    train_acc_all",[35,32709,544],{"class":495},[35,32711,32683],{"class":359},[35,32713,32714],{"class":37,"line":16944},[35,32715,32716],{"class":41},"    # 验证集准确度列表\n",[35,32718,32719,32722,32724],{"class":37,"line":16967},[35,32720,32721],{"class":359},"    val_acc_all",[35,32723,544],{"class":495},[35,32725,32683],{"class":359},[35,32727,32728],{"class":37,"line":16973},[35,32729,141],{"emptyLinePlaceholder":140},[35,32731,32732],{"class":37,"line":16996},[35,32733,32734],{"class":41},"    # 保存当前时间--->方便看每轮训练的时间\n",[35,32736,32737,32740,32742],{"class":37,"line":17010},[35,32738,32739],{"class":359},"    since",[35,32741,544],{"class":495},[35,32743,32744],{"class":359},"time.time()\n",[35,32746,32747],{"class":37,"line":17030},[35,32748,141],{"emptyLinePlaceholder":140},[35,32750,32751],{"class":37,"line":17036},[35,32752,141],{"emptyLinePlaceholder":140},[35,32754,32755],{"class":37,"line":17047},[35,32756,32757],{"class":41},"    # 准备工作完成--->开始训练模型\n",[35,32759,32760,32762,32765,32767,32770],{"class":37,"line":17070},[35,32761,3535],{"class":495},[35,32763,32764],{"class":359}," epoch ",[35,32766,26374],{"class":495},[35,32768,32769],{"class":58}," range",[35,32771,32772],{"class":359},"(num_epochs):\n",[35,32774,32775,32778,32780,32783,32786,32788,32790,32792,32795,32797,32799],{"class":37,"line":17092},[35,32776,32777],{"class":58},"        print",[35,32779,499],{"class":359},[35,32781,32782],{"class":306},"\"Epoch ",[35,32784,32785],{"class":58},"{}",[35,32787,1078],{"class":306},[35,32789,32785],{"class":58},[35,32791,747],{"class":306},[35,32793,32794],{"class":359},".format(epoch,num_epochs",[35,32796,1026],{"class":495},[35,32798,713],{"class":58},[35,32800,30823],{"class":359},[35,32802,32803,32805,32807,32810,32812,32814],{"class":37,"line":17097},[35,32804,32777],{"class":58},[35,32806,499],{"class":359},[35,32808,32809],{"class":306},"\"-\"",[35,32811,949],{"class":495},[35,32813,940],{"class":58},[35,32815,505],{"class":359},[35,32817,32818],{"class":37,"line":17103},[35,32819,141],{"emptyLinePlaceholder":140},[35,32821,32822],{"class":37,"line":17117},[35,32823,32824],{"class":41},"        # 初始化参数\n",[35,32826,32827],{"class":37,"line":17130},[35,32828,32829],{"class":41},"        # 训练集损失函数\n",[35,32831,32832,32835,32837],{"class":37,"line":17135},[35,32833,32834],{"class":359},"        train_loss",[35,32836,544],{"class":495},[35,32838,32668],{"class":58},[35,32840,32841],{"class":37,"line":17149},[35,32842,32843],{"class":41},"        # 训练集准确度\n",[35,32845,32846,32849,32851],{"class":37,"line":17154},[35,32847,32848],{"class":359},"        train_corrects",[35,32850,544],{"class":495},[35,32852,3419],{"class":58},[35,32854,32855],{"class":37,"line":17160},[35,32856,32857],{"class":41},"        # 验证集损失函数\n",[35,32859,32860,32863,32865],{"class":37,"line":17165},[35,32861,32862],{"class":359},"        val_loss",[35,32864,544],{"class":495},[35,32866,32668],{"class":58},[35,32868,32869],{"class":37,"line":17179},[35,32870,32871],{"class":41},"        # 验证集准确度\n",[35,32873,32874,32877,32879],{"class":37,"line":17184},[35,32875,32876],{"class":359},"        val_corrects",[35,32878,544],{"class":495},[35,32880,3419],{"class":58},[35,32882,32883],{"class":37,"line":17189},[35,32884,32885],{"class":41},"        # 训练集样本数量\n",[35,32887,32888,32891,32893],{"class":37,"line":17203},[35,32889,32890],{"class":359},"        train_num",[35,32892,544],{"class":495},[35,32894,3419],{"class":58},[35,32896,32897],{"class":37,"line":17215},[35,32898,32899],{"class":41},"        # 验证集样本数量\n",[35,32901,32902,32905,32907],{"class":37,"line":17220},[35,32903,32904],{"class":359},"        val_num",[35,32906,544],{"class":495},[35,32908,3419],{"class":58},[35,32910,32911],{"class":37,"line":17233},[35,32912,32913],{"class":41},"        # 将数据放到设备,并开始训练\n",[35,32915,32916,32918,32920,32922,32924],{"class":37,"line":17238},[35,32917,3737],{"class":495},[35,32919,31927],{"class":359},[35,32921,26374],{"class":495},[35,32923,31932],{"class":58},[35,32925,32926],{"class":359},"(train_dataloader):\n",[35,32928,32929],{"class":37,"line":17243},[35,32930,32931],{"class":41},"            # 将特征放入到训练设备\n",[35,32933,32934,32937,32939],{"class":37,"line":17248},[35,32935,32936],{"class":359},"            b_x",[35,32938,544],{"class":495},[35,32940,32941],{"class":359},"b_x.to(device)\n",[35,32943,32944],{"class":37,"line":17261},[35,32945,32946],{"class":41},"            # 将标签放入到训练设备当中\n",[35,32948,32949,32952,32954],{"class":37,"line":17266},[35,32950,32951],{"class":359},"            b_y",[35,32953,544],{"class":495},[35,32955,32956],{"class":359},"b_y.to(device)\n",[35,32958,32960],{"class":37,"line":32959},98,[35,32961,32962],{"class":41},"            # 设置模型为训练模式\n",[35,32964,32966],{"class":37,"line":32965},99,[35,32967,32968],{"class":359},"            model.train()\n",[35,32970,32972],{"class":37,"line":32971},100,[35,32973,32974],{"class":41},"            # 将数据放到模型当中,开始前向传播\n",[35,32976,32978],{"class":37,"line":32977},101,[35,32979,32980],{"class":41},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[35,32982,32984,32987,32989],{"class":37,"line":32983},102,[35,32985,32986],{"class":359},"            output",[35,32988,544],{"class":495},[35,32990,32991],{"class":359},"model(b_x)\n",[35,32993,32995],{"class":37,"line":32994},103,[35,32996,32997],{"class":41},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[35,32999,33001,33004,33006,33009,33012,33014,33016],{"class":37,"line":33000},104,[35,33002,33003],{"class":359},"            pre_lab",[35,33005,544],{"class":495},[35,33007,33008],{"class":359},"torch.argmax(output,",[35,33010,33011],{"class":5550},"dim",[35,33013,544],{"class":495},[35,33015,713],{"class":58},[35,33017,505],{"class":359},[35,33019,33021],{"class":37,"line":33020},105,[35,33022,33023],{"class":41},"            # 计算每一个batch的损失函数\n",[35,33025,33027,33030,33032],{"class":37,"line":33026},106,[35,33028,33029],{"class":359},"            loss",[35,33031,544],{"class":495},[35,33033,33034],{"class":359},"criterion(output,b_y)\n",[35,33036,33038],{"class":37,"line":33037},107,[35,33039,33040],{"class":41},"            # 将梯度初始化为0\n",[35,33042,33044],{"class":37,"line":33043},108,[35,33045,33046],{"class":359},"            optimizer.zero_grad()\n",[35,33048,33050],{"class":37,"line":33049},109,[35,33051,33052],{"class":41},"            # 梯度置为0后再进行反向传播\n",[35,33054,33056],{"class":37,"line":33055},110,[35,33057,33058],{"class":359},"            loss.backward()\n",[35,33060,33062],{"class":37,"line":33061},111,[35,33063,33064],{"class":41},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[35,33066,33068],{"class":37,"line":33067},112,[35,33069,33070],{"class":359},"            optimizer.step()\n",[35,33072,33074],{"class":37,"line":33073},113,[35,33075,33076],{"class":41},"            # loss.item()指的是batch的平均损失\n",[35,33078,33080,33083,33085,33088,33090,33093,33095],{"class":37,"line":33079},114,[35,33081,33082],{"class":359},"            train_loss",[35,33084,9811],{"class":495},[35,33086,33087],{"class":359},"loss.item()",[35,33089,949],{"class":495},[35,33091,33092],{"class":359},"b_x.size(",[35,33094,687],{"class":58},[35,33096,505],{"class":359},[35,33098,33100],{"class":37,"line":33099},115,[35,33101,33102],{"class":41},"            # 计算每个批次中正确预测的数量\n",[35,33104,33106,33109,33111,33114,33116],{"class":37,"line":33105},116,[35,33107,33108],{"class":359},"            train_corrects",[35,33110,9811],{"class":495},[35,33112,33113],{"class":359},"torch.sum(pre_lab",[35,33115,3283],{"class":495},[35,33117,33118],{"class":359},"b_y.data)\n",[35,33120,33122],{"class":37,"line":33121},117,[35,33123,33124],{"class":41},"            # 计算目前为止一共处理了多少样本\n",[35,33126,33128,33131,33133,33135,33137],{"class":37,"line":33127},118,[35,33129,33130],{"class":359},"            train_num",[35,33132,9811],{"class":495},[35,33134,33092],{"class":359},[35,33136,687],{"class":58},[35,33138,505],{"class":359},[35,33140,33142],{"class":37,"line":33141},119,[35,33143,33144],{"class":41},"        # 验证数据\n",[35,33146,33148,33150,33153,33155,33157],{"class":37,"line":33147},120,[35,33149,3737],{"class":495},[35,33151,33152],{"class":359}," step ,(b_x,b_y) ",[35,33154,26374],{"class":495},[35,33156,31932],{"class":58},[35,33158,33159],{"class":359},"(val_dataloader):\n",[35,33161,33163],{"class":37,"line":33162},121,[35,33164,33165],{"class":41},"            # 将特征放到验证设备当中\n",[35,33167,33169,33171,33173],{"class":37,"line":33168},122,[35,33170,32936],{"class":359},[35,33172,544],{"class":495},[35,33174,32941],{"class":359},[35,33176,33178],{"class":37,"line":33177},123,[35,33179,33180],{"class":41},"            # 将标签放到放到训练设备当中\n",[35,33182,33184,33186,33188],{"class":37,"line":33183},124,[35,33185,32951],{"class":359},[35,33187,544],{"class":495},[35,33189,32956],{"class":359},[35,33191,33193],{"class":37,"line":33192},125,[35,33194,33195],{"class":41},"            # 开启验证模式，设置模型为评估模式\n",[35,33197,33199],{"class":37,"line":33198},126,[35,33200,33201],{"class":359},"            model.eval()\n",[35,33203,33205,33208],{"class":37,"line":33204},127,[35,33206,33207],{"class":495},"            with",[35,33209,33210],{"class":359}," torch.no_grad():\n",[35,33212,33214],{"class":37,"line":33213},128,[35,33215,33216],{"class":41},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[35,33218,33220,33223,33225],{"class":37,"line":33219},129,[35,33221,33222],{"class":359},"                output ",[35,33224,544],{"class":495},[35,33226,33227],{"class":359}," model(b_x)\n",[35,33229,33231],{"class":37,"line":33230},130,[35,33232,33233],{"class":41},"                # 查找每一行中最大值对应的下标\n",[35,33235,33237,33240,33242,33245,33247,33249,33251],{"class":37,"line":33236},131,[35,33238,33239],{"class":359},"                pre_lab ",[35,33241,544],{"class":495},[35,33243,33244],{"class":359}," torch.argmax(output, ",[35,33246,33011],{"class":5550},[35,33248,544],{"class":495},[35,33250,713],{"class":58},[35,33252,505],{"class":359},[35,33254,33256],{"class":37,"line":33255},132,[35,33257,33258],{"class":41},"                # 计算验证集上的当前 batch 损失\n",[35,33260,33262,33265,33267],{"class":37,"line":33261},133,[35,33263,33264],{"class":359},"                val_batch_loss ",[35,33266,544],{"class":495},[35,33268,33269],{"class":359}," criterion(output, b_y)\n",[35,33271,33273],{"class":37,"line":33272},134,[35,33274,33275],{"class":41},"                # 对损失函数进行累加（按样本数加权）\n",[35,33277,33279,33282,33284,33287,33289,33292,33294],{"class":37,"line":33278},135,[35,33280,33281],{"class":359},"                val_loss ",[35,33283,9811],{"class":495},[35,33285,33286],{"class":359}," val_batch_loss.item() ",[35,33288,949],{"class":495},[35,33290,33291],{"class":359}," b_x.size(",[35,33293,687],{"class":58},[35,33295,505],{"class":359},[35,33297,33299,33302,33304,33307,33309],{"class":37,"line":33298},136,[35,33300,33301],{"class":359},"                val_corrects ",[35,33303,9811],{"class":495},[35,33305,33306],{"class":359}," torch.sum(pre_lab ",[35,33308,3283],{"class":495},[35,33310,33311],{"class":359}," b_y.data)\n",[35,33313,33315],{"class":37,"line":33314},137,[35,33316,33317],{"class":41},"                # 当前用于验证的样本数量\n",[35,33319,33321,33324,33326,33328,33330],{"class":37,"line":33320},138,[35,33322,33323],{"class":359},"            val_num ",[35,33325,9811],{"class":495},[35,33327,33291],{"class":359},[35,33329,687],{"class":58},[35,33331,505],{"class":359},[35,33333,33335],{"class":37,"line":33334},139,[35,33336,33337],{"class":41},"        # 计算并保存每一次迭代的loss值和准确率\n",[35,33339,33341],{"class":37,"line":33340},140,[35,33342,33343],{"class":41},"        # 计算并保存训练集的loss值\n",[35,33345,33347,33350,33352],{"class":37,"line":33346},141,[35,33348,33349],{"class":359},"        train_loss_all.append(train_loss",[35,33351,1078],{"class":495},[35,33353,33354],{"class":359},"train_num)\n",[35,33356,33358],{"class":37,"line":33357},142,[35,33359,33360],{"class":41},"        # 取双精度\n",[35,33362,33364],{"class":37,"line":33363},143,[35,33365,33366],{"class":41},"        # 计算并保存训练集的准确率\n",[35,33368,33370,33373,33375],{"class":37,"line":33369},144,[35,33371,33372],{"class":359},"        train_acc_all.append(train_corrects.double().item()",[35,33374,1078],{"class":495},[35,33376,33354],{"class":359},[35,33378,33380],{"class":37,"line":33379},145,[35,33381,33382],{"class":41},"        # 计算并保存验证集的loss值\n",[35,33384,33386,33389,33391],{"class":37,"line":33385},146,[35,33387,33388],{"class":359},"        val_loss_all.append(val_loss",[35,33390,1078],{"class":495},[35,33392,33393],{"class":359},"val_num)\n",[35,33395,33397],{"class":37,"line":33396},147,[35,33398,33399],{"class":41},"        # 计算并保存验证集的准确率\n",[35,33401,33403,33406,33408],{"class":37,"line":33402},148,[35,33404,33405],{"class":359},"        val_acc_all.append(val_corrects.double().item()",[35,33407,1078],{"class":495},[35,33409,33393],{"class":359},[35,33411,33413],{"class":37,"line":33412},149,[35,33414,141],{"emptyLinePlaceholder":140},[35,33416,33418],{"class":37,"line":33417},150,[35,33419,33420],{"class":41},"        # 打印训练一轮的loss值和准确率\n",[35,33422,33424,33426,33428,33430,33432,33435,33437,33440,33442,33445,33447,33449,33451,33453,33456,33458,33460,33463,33465,33467],{"class":37,"line":33423},151,[35,33425,32777],{"class":58},[35,33427,499],{"class":359},[35,33429,3926],{"class":306},[35,33431,32785],{"class":58},[35,33433,33434],{"class":306},"train loss:",[35,33436,1390],{"class":58},[35,33438,33439],{"class":495},":.4f",[35,33441,1440],{"class":58},[35,33443,33444],{"class":306}," train acc:",[35,33446,1390],{"class":58},[35,33448,33439],{"class":495},[35,33450,1440],{"class":58},[35,33452,3926],{"class":306},[35,33454,33455],{"class":359},".format(epoch,train_loss_all[",[35,33457,1026],{"class":495},[35,33459,713],{"class":58},[35,33461,33462],{"class":359},"],train_acc_all[",[35,33464,1026],{"class":495},[35,33466,713],{"class":58},[35,33468,33469],{"class":359},"]))\n",[35,33471,33473,33475,33477,33479,33481,33484,33486,33488,33490,33493,33495,33497,33499,33501,33504,33506,33508,33511,33513,33515],{"class":37,"line":33472},152,[35,33474,32777],{"class":58},[35,33476,499],{"class":359},[35,33478,3926],{"class":306},[35,33480,32785],{"class":58},[35,33482,33483],{"class":306},"val loss:",[35,33485,1390],{"class":58},[35,33487,33439],{"class":495},[35,33489,1440],{"class":58},[35,33491,33492],{"class":306}," val acc:",[35,33494,1390],{"class":58},[35,33496,33439],{"class":495},[35,33498,1440],{"class":58},[35,33500,3926],{"class":306},[35,33502,33503],{"class":359},".format(epoch,val_loss_all[",[35,33505,1026],{"class":495},[35,33507,713],{"class":58},[35,33509,33510],{"class":359},"],val_acc_all[",[35,33512,1026],{"class":495},[35,33514,713],{"class":58},[35,33516,33469],{"class":359},[35,33518,33520],{"class":37,"line":33519},153,[35,33521,141],{"emptyLinePlaceholder":140},[35,33523,33525],{"class":37,"line":33524},154,[35,33526,33527],{"class":41},"        # 判断准确度--->保存最优模型\n",[35,33529,33531,33533,33536,33538,33540,33542,33544],{"class":37,"line":33530},155,[35,33532,2837],{"class":495},[35,33534,33535],{"class":359}," val_acc_all[",[35,33537,1026],{"class":495},[35,33539,713],{"class":58},[35,33541,1434],{"class":359},[35,33543,1454],{"class":495},[35,33545,33546],{"class":359},"best_acc:\n",[35,33548,33550],{"class":37,"line":33549},156,[35,33551,33552],{"class":41},"            # 保存当前模型准确度\n",[35,33554,33556,33559,33561,33563,33566,33568,33570],{"class":37,"line":33555},157,[35,33557,33558],{"class":359},"            best_acc:",[35,33560,538],{"class":58},[35,33562,544],{"class":495},[35,33564,33565],{"class":359},"val_acc_all[",[35,33567,1026],{"class":495},[35,33569,713],{"class":58},[35,33571,33572],{"class":359},"]\n",[35,33574,33576],{"class":37,"line":33575},158,[35,33577,33578],{"class":41},"            # 保存当前的准确度\n",[35,33580,33582],{"class":37,"line":33581},159,[35,33583,33584],{"class":41},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[35,33586,33588,33591,33593],{"class":37,"line":33587},160,[35,33589,33590],{"class":359},"            best_model_wts",[35,33592,544],{"class":495},[35,33594,32640],{"class":359},[35,33596,33598],{"class":37,"line":33597},161,[35,33599,141],{"emptyLinePlaceholder":140},[35,33601,33603],{"class":37,"line":33602},162,[35,33604,33605],{"class":41},"        # 计算耗时\n",[35,33607,33609,33612,33614,33617,33619],{"class":37,"line":33608},163,[35,33610,33611],{"class":359},"        time_use",[35,33613,544],{"class":495},[35,33615,33616],{"class":359},"time.time()",[35,33618,1026],{"class":495},[35,33620,33621],{"class":359},"since\n",[35,33623,33625,33627,33629,33632,33634,33637,33639,33641,33643,33645,33647,33650,33653,33656,33658,33661,33663,33665],{"class":37,"line":33624},164,[35,33626,32777],{"class":58},[35,33628,499],{"class":359},[35,33630,33631],{"class":306},"'训练和验证耗费的时间",[35,33633,1390],{"class":58},[35,33635,33636],{"class":495},":.0f",[35,33638,1440],{"class":58},[35,33640,1038],{"class":306},[35,33642,1390],{"class":58},[35,33644,33636],{"class":495},[35,33646,1440],{"class":58},[35,33648,33649],{"class":306},"s'",[35,33651,33652],{"class":359},".format(time_use",[35,33654,33655],{"class":495},"\u002F\u002F",[35,33657,1401],{"class":58},[35,33659,33660],{"class":359},",time_use",[35,33662,823],{"class":495},[35,33664,1401],{"class":58},[35,33666,30823],{"class":359},[35,33668,33670],{"class":37,"line":33669},165,[35,33671,33672],{"class":41},"    # 选择最优参数\n",[35,33674,33676],{"class":37,"line":33675},166,[35,33677,33678],{"class":41},"    # 加载最高准确率下的模型参数\n",[35,33680,33682],{"class":37,"line":33681},167,[35,33683,33684],{"class":41},"    # model.load_state_dict(best_model_wts)\n",[35,33686,33688,33691,33694],{"class":37,"line":33687},168,[35,33689,33690],{"class":359},"    torch.save(model.state_dict(best_model_wts), ",[35,33692,33693],{"class":306},"'.\u002Fbest_model.pth'",[35,33695,505],{"class":359},[35,33697,33699],{"class":37,"line":33698},169,[35,33700,33701],{"class":41},"    # 或者写成\n",[35,33703,33705],{"class":37,"line":33704},170,[35,33706,33707],{"class":41},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[35,33709,33711],{"class":37,"line":33710},171,[35,33712,33713],{"class":41},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[35,33715,33717,33720,33722,33725,33728,33730],{"class":37,"line":33716},172,[35,33718,33719],{"class":359},"    train_process",[35,33721,544],{"class":495},[35,33723,33724],{"class":359},"pd.DataFrame(",[35,33726,33727],{"class":5550},"data",[35,33729,544],{"class":495},[35,33731,1907],{"class":359},[35,33733,33735,33738,33740,33743],{"class":37,"line":33734},173,[35,33736,33737],{"class":306},"        \"epoch\"",[35,33739,1353],{"class":359},[35,33741,33742],{"class":58},"range",[35,33744,33745],{"class":359},"(num_epochs),\n",[35,33747,33749,33752],{"class":37,"line":33748},174,[35,33750,33751],{"class":306},"        \"train_loss_all\"",[35,33753,33754],{"class":359},":train_loss_all,\n",[35,33756,33758,33761],{"class":37,"line":33757},175,[35,33759,33760],{"class":306},"        \"val_loss_all\"",[35,33762,33763],{"class":359},":val_loss_all,\n",[35,33765,33767,33770],{"class":37,"line":33766},176,[35,33768,33769],{"class":306},"        \"train_acc_all\"",[35,33771,33772],{"class":359},":train_acc_all,\n",[35,33774,33776,33779],{"class":37,"line":33775},177,[35,33777,33778],{"class":306},"        \"val_acc_all\"",[35,33780,33781],{"class":359},":val_acc_all\n",[35,33783,33785],{"class":37,"line":33784},178,[35,33786,33787],{"class":359},"    })\n",[35,33789,33791],{"class":37,"line":33790},179,[35,33792,33793],{"class":41},"    # 返回训练保存的过程\n",[35,33795,33797,33799],{"class":37,"line":33796},180,[35,33798,4424],{"class":495},[35,33800,33801],{"class":359}," train_process\n",[35,33803,33805],{"class":37,"line":33804},181,[35,33806,141],{"emptyLinePlaceholder":140},[35,33808,33810],{"class":37,"line":33809},182,[35,33811,33812],{"class":41},"# 将loss值和精度按照图片的形式展示出来\n",[35,33814,33816,33818,33821],{"class":37,"line":33815},183,[35,33817,32273],{"class":495},[35,33819,33820],{"class":48}," matplot_acc_loss",[35,33822,33823],{"class":359},"(train_process):\n",[35,33825,33827],{"class":37,"line":33826},184,[35,33828,33829],{"class":41},"    # 设置图的大小\n",[35,33831,33833,33836,33838,33840,33842,33844,33846,33848],{"class":37,"line":33832},185,[35,33834,33835],{"class":359},"    plt.figure(",[35,33837,32019],{"class":5550},[35,33839,544],{"class":495},[35,33841,499],{"class":359},[35,33843,992],{"class":58},[35,33845,872],{"class":359},[35,33847,789],{"class":58},[35,33849,30823],{"class":359},[35,33851,33853],{"class":37,"line":33852},186,[35,33854,33855],{"class":41},"    # 设置图中有几张图\n",[35,33857,33859],{"class":37,"line":33858},187,[35,33860,33861],{"class":41},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[35,33863,33865],{"class":37,"line":33864},188,[35,33866,33867],{"class":41},"    # ①loss图\n",[35,33869,33871,33873,33875,33877,33879,33881,33883],{"class":37,"line":33870},189,[35,33872,32053],{"class":359},[35,33874,713],{"class":58},[35,33876,872],{"class":359},[35,33878,574],{"class":58},[35,33880,872],{"class":359},[35,33882,713],{"class":58},[35,33884,505],{"class":359},[35,33886,33888],{"class":37,"line":33887},190,[35,33889,33890],{"class":41},"    # 补充:\n",[35,33892,33894],{"class":37,"line":33893},191,[35,33895,33896],{"class":41},"    # plt.subplot(nrows, ncols, index)\n",[35,33898,33900],{"class":37,"line":33899},192,[35,33901,33902],{"class":41},"    # nrows：行数\n",[35,33904,33906],{"class":37,"line":33905},193,[35,33907,33908],{"class":41},"    # ncols：列数\n",[35,33910,33912],{"class":37,"line":33911},194,[35,33913,33914],{"class":41},"    # index：目前选中第几个子图（从1开始）\n",[35,33916,33918,33921,33924,33927,33930,33932,33935,33937,33940],{"class":37,"line":33917},195,[35,33919,33920],{"class":359},"    plt.plot(train_process[",[35,33922,33923],{"class":306},"\"epoch\"",[35,33925,33926],{"class":359},"],train_process.train_loss_all,",[35,33928,33929],{"class":306},"'ro-'",[35,33931,872],{"class":359},[35,33933,33934],{"class":5550},"label",[35,33936,544],{"class":495},[35,33938,33939],{"class":306},"'train loss'",[35,33941,505],{"class":359},[35,33943,33945,33947,33949,33952,33955,33957,33959,33961,33964],{"class":37,"line":33944},196,[35,33946,33920],{"class":359},[35,33948,33923],{"class":306},[35,33950,33951],{"class":359},"],train_process.val_loss_all,",[35,33953,33954],{"class":306},"'bs--'",[35,33956,872],{"class":359},[35,33958,33934],{"class":5550},[35,33960,544],{"class":495},[35,33962,33963],{"class":306},"'val loss'",[35,33965,505],{"class":359},[35,33967,33969],{"class":37,"line":33968},197,[35,33970,33971],{"class":41},"    # 添加一个图例\n",[35,33973,33975],{"class":37,"line":33974},198,[35,33976,33977],{"class":359},"    plt.legend()\n",[35,33979,33981],{"class":37,"line":33980},199,[35,33982,33983],{"class":41},"    # 给轴添加标签\n",[35,33985,33987,33990,33993],{"class":37,"line":33986},200,[35,33988,33989],{"class":359},"    plt.xlabel(",[35,33991,33992],{"class":306},"'epoch'",[35,33994,505],{"class":359},[35,33996,33998,34001,34004],{"class":37,"line":33997},201,[35,33999,34000],{"class":359},"    plt.ylabel(",[35,34002,34003],{"class":306},"'loss'",[35,34005,505],{"class":359},[35,34007,34009],{"class":37,"line":34008},202,[35,34010,34011],{"class":41},"    # ②准确度图\n",[35,34013,34015,34017,34019,34021,34023,34025,34027],{"class":37,"line":34014},203,[35,34016,32053],{"class":359},[35,34018,713],{"class":58},[35,34020,872],{"class":359},[35,34022,574],{"class":58},[35,34024,872],{"class":359},[35,34026,574],{"class":58},[35,34028,505],{"class":359},[35,34030,34032,34034,34036,34039,34041,34043,34045,34047,34050],{"class":37,"line":34031},204,[35,34033,33920],{"class":359},[35,34035,33923],{"class":306},[35,34037,34038],{"class":359},"],train_process.train_acc_all,",[35,34040,33929],{"class":306},[35,34042,872],{"class":359},[35,34044,33934],{"class":5550},[35,34046,544],{"class":495},[35,34048,34049],{"class":306},"'train acc'",[35,34051,505],{"class":359},[35,34053,34055,34057,34059,34062,34064,34066,34068,34070,34073],{"class":37,"line":34054},205,[35,34056,33920],{"class":359},[35,34058,33923],{"class":306},[35,34060,34061],{"class":359},"],train_process.val_acc_all,",[35,34063,33954],{"class":306},[35,34065,872],{"class":359},[35,34067,33934],{"class":5550},[35,34069,544],{"class":495},[35,34071,34072],{"class":306},"'val acc'",[35,34074,505],{"class":359},[35,34076,34078],{"class":37,"line":34077},206,[35,34079,34080],{"class":41},"    # 添加图例\n",[35,34082,34084],{"class":37,"line":34083},207,[35,34085,33977],{"class":359},[35,34087,34089,34091,34093],{"class":37,"line":34088},208,[35,34090,33989],{"class":359},[35,34092,33923],{"class":306},[35,34094,505],{"class":359},[35,34096,34098,34100,34103],{"class":37,"line":34097},209,[35,34099,34000],{"class":359},[35,34101,34102],{"class":306},"\"acc\"",[35,34104,505],{"class":359},[35,34106,34108],{"class":37,"line":34107},210,[35,34109,34110],{"class":359},"    plt.show()\n",[35,34112,34114],{"class":37,"line":34113},211,[35,34115,141],{"emptyLinePlaceholder":140},[35,34117,34119],{"class":37,"line":34118},212,[35,34120,34121],{"class":41},"# 正式开始训练:\n",[35,34123,34125,34127,34129,34131,34133],{"class":37,"line":34124},213,[35,34126,1892],{"class":495},[35,34128,31546],{"class":58},[35,34130,3283],{"class":495},[35,34132,31551],{"class":306},[35,34134,4073],{"class":359},[35,34136,34138],{"class":37,"line":34137},214,[35,34139,34140],{"class":41},"    # 将模型实例化\n",[35,34142,34144,34147,34149],{"class":37,"line":34143},215,[35,34145,34146],{"class":359},"    LeNet",[35,34148,544],{"class":495},[35,34150,34151],{"class":359},"LeNet()\n",[35,34153,34155,34158,34160],{"class":37,"line":34154},216,[35,34156,34157],{"class":359},"    train_dataloader,val_dataloader",[35,34159,544],{"class":495},[35,34161,34162],{"class":359},"train_val_data_process()\n",[35,34164,34166,34168,34170,34173,34176,34178,34180],{"class":37,"line":34165},217,[35,34167,33719],{"class":359},[35,34169,544],{"class":495},[35,34171,34172],{"class":359},"train_model_process(LeNet,train_dataloader,val_dataloader,",[35,34174,34175],{"class":5550},"num_epochs",[35,34177,544],{"class":495},[35,34179,1194],{"class":58},[35,34181,505],{"class":359},[35,34183,34185],{"class":37,"line":34184},218,[35,34186,34187],{"class":359},"    matplot_acc_loss(train_process)\n",[21,34189,34190],{},"画图的补充点学习：",[21,34192,34193],{},[1823,34194],{"alt":30,"src":34195},"\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",[14,34197,34198],{"start":55},[17,34199,34200],{},"测试",[25,34202,34204],{"className":30704,"code":34203,"language":30706,"meta":30,"style":30},"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",[32,34205,34206,34212,34222,34234,34244,34249,34259,34269,34273,34278,34287,34304,34316,34333,34344,34360,34365,34376,34387,34398,34405,34409,34414,34424,34429,34446,34454,34458,34463,34472,34481,34485,34490,34495,34500,34507,34512,34524,34534,34544,34549,34553,34558,34567,34572,34588,34593,34598,34603,34617,34622,34636,34640,34645,34660,34665,34677,34681,34686,34698,34703,34711,34716,34721,34731,34736,34745,34750,34755,34759,34764,34769,34785,34793,34798,34803,34862,34868,34873,34884,34892,34900,34904,34909,34913,34918,34926,34931,34947,34952,34962,34972],{"__ignoreMap":30},[35,34207,34208,34210],{"class":37,"line":38},[35,34209,30718],{"class":495},[35,34211,30721],{"class":359},[35,34213,34214,34216,34218,34220],{"class":37,"line":45},[35,34215,30718],{"class":495},[35,34217,31741],{"class":359},[35,34219,31709],{"class":495},[35,34221,31746],{"class":359},[35,34223,34224,34226,34229,34231],{"class":37,"line":55},[35,34225,31063],{"class":495},[35,34227,34228],{"class":359}," jupyter_client.consoleapp ",[35,34230,30718],{"class":495},[35,34232,34233],{"class":359}," classes\n",[35,34235,34236,34238,34240,34242],{"class":37,"line":65},[35,34237,31063],{"class":495},[35,34239,31724],{"class":359},[35,34241,30718],{"class":495},[35,34243,31729],{"class":359},[35,34245,34246],{"class":37,"line":74},[35,34247,34248],{"class":41},"# 导入数据集\n",[35,34250,34251,34253,34255,34257],{"class":37,"line":83},[35,34252,31063],{"class":495},[35,34254,31694],{"class":359},[35,34256,30718],{"class":495},[35,34258,31699],{"class":359},[35,34260,34261,34263,34265,34267],{"class":37,"line":92},[35,34262,31063],{"class":495},[35,34264,32240],{"class":359},[35,34266,30718],{"class":495},[35,34268,32245],{"class":359},[35,34270,34271],{"class":37,"line":101},[35,34272,141],{"emptyLinePlaceholder":140},[35,34274,34275],{"class":37,"line":110},[35,34276,34277],{"class":41},"# 测试数据处理\n",[35,34279,34280,34282,34285],{"class":37,"line":119},[35,34281,32273],{"class":495},[35,34283,34284],{"class":48}," test_data_process",[35,34286,32279],{"class":359},[35,34288,34289,34292,34294,34296,34298,34300,34302],{"class":37,"line":128},[35,34290,34291],{"class":359},"    test_data",[35,34293,544],{"class":495},[35,34295,31781],{"class":359},[35,34297,31784],{"class":5550},[35,34299,544],{"class":495},[35,34301,31789],{"class":306},[35,34303,31792],{"class":359},[35,34305,34306,34309,34311,34314],{"class":37,"line":137},[35,34307,34308],{"class":5550},"                           train",[35,34310,544],{"class":495},[35,34312,34313],{"class":58},"False",[35,34315,31792],{"class":359},[35,34317,34318,34321,34323,34325,34327,34329,34331],{"class":37,"line":144},[35,34319,34320],{"class":5550},"                           transform",[35,34322,544],{"class":495},[35,34324,31819],{"class":359},[35,34326,31822],{"class":5550},[35,34328,544],{"class":495},[35,34330,1395],{"class":58},[35,34332,31830],{"class":359},[35,34334,34335,34338,34340,34342],{"class":37,"line":150},[35,34336,34337],{"class":5550},"                           download",[35,34339,544],{"class":495},[35,34341,31802],{"class":58},[35,34343,505],{"class":359},[35,34345,34346,34349,34351,34353,34355,34357],{"class":37,"line":159},[35,34347,34348],{"class":359},"    test_dataloader",[35,34350,544],{"class":495},[35,34352,31860],{"class":359},[35,34354,31863],{"class":5550},[35,34356,544],{"class":495},[35,34358,34359],{"class":359},"test_data,\n",[35,34361,34362],{"class":37,"line":168},[35,34363,34364],{"class":41},"                                    # 这里是一张一张进行测试\n",[35,34366,34367,34370,34372,34374],{"class":37,"line":177},[35,34368,34369],{"class":5550},"                                    batch_size",[35,34371,544],{"class":495},[35,34373,713],{"class":58},[35,34375,31792],{"class":359},[35,34377,34378,34381,34383,34385],{"class":37,"line":182},[35,34379,34380],{"class":5550},"                                    shuffle",[35,34382,544],{"class":495},[35,34384,31802],{"class":58},[35,34386,31792],{"class":359},[35,34388,34389,34392,34394,34396],{"class":37,"line":188},[35,34390,34391],{"class":5550},"                                    num_workers",[35,34393,544],{"class":495},[35,34395,687],{"class":58},[35,34397,505],{"class":359},[35,34399,34400,34402],{"class":37,"line":197},[35,34401,4424],{"class":495},[35,34403,34404],{"class":359}," test_dataloader\n",[35,34406,34407],{"class":37,"line":206},[35,34408,141],{"emptyLinePlaceholder":140},[35,34410,34411],{"class":37,"line":215},[35,34412,34413],{"class":41},"# 定义模型测试函数\n",[35,34415,34416,34418,34421],{"class":37,"line":224},[35,34417,32273],{"class":495},[35,34419,34420],{"class":48}," test_model_process",[35,34422,34423],{"class":359},"(model,test_dataloader):\n",[35,34425,34426],{"class":37,"line":233},[35,34427,34428],{"class":41},"    # 将模型放到设备当中，先进行判断\n",[35,34430,34431,34433,34435,34437,34439,34441,34443],{"class":37,"line":238},[35,34432,31563],{"class":359},[35,34434,544],{"class":495},[35,34436,31570],{"class":306},[35,34438,2054],{"class":495},[35,34440,31575],{"class":359},[35,34442,2051],{"class":495},[35,34444,34445],{"class":306}," \"cpu\"\n",[35,34447,34448,34450,34452],{"class":37,"line":244},[35,34449,31615],{"class":359},[35,34451,544],{"class":495},[35,34453,32615],{"class":359},[35,34455,34456],{"class":37,"line":253},[35,34457,141],{"emptyLinePlaceholder":140},[35,34459,34460],{"class":37,"line":262},[35,34461,34462],{"class":41},"    # 设置初始化参数\n",[35,34464,34465,34468,34470],{"class":37,"line":271},[35,34466,34467],{"class":359},"    test_corrects",[35,34469,544],{"class":495},[35,34471,32668],{"class":58},[35,34473,34474,34477,34479],{"class":37,"line":280},[35,34475,34476],{"class":359},"    test_num",[35,34478,544],{"class":495},[35,34480,3419],{"class":58},[35,34482,34483],{"class":37,"line":289},[35,34484,141],{"emptyLinePlaceholder":140},[35,34486,34487],{"class":37,"line":294},[35,34488,34489],{"class":41},"    # 进行模型测试\n",[35,34491,34492],{"class":37,"line":300},[35,34493,34494],{"class":41},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[35,34496,34497],{"class":37,"line":313},[35,34498,34499],{"class":41},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[35,34501,34502,34505],{"class":37,"line":324},[35,34503,34504],{"class":495},"    with",[35,34506,33210],{"class":359},[35,34508,34509],{"class":37,"line":2955},[35,34510,34511],{"class":41},"        # 从数据中进行\n",[35,34513,34514,34516,34519,34521],{"class":37,"line":8282},[35,34515,3737],{"class":495},[35,34517,34518],{"class":359}," test_data_x,test_data_y ",[35,34520,26374],{"class":495},[35,34522,34523],{"class":359}," test_dataloader:\n",[35,34525,34526,34529,34531],{"class":37,"line":8306},[35,34527,34528],{"class":359},"            test_data_x",[35,34530,544],{"class":495},[35,34532,34533],{"class":359},"test_data_x.to(device)\n",[35,34535,34536,34539,34541],{"class":37,"line":8311},[35,34537,34538],{"class":359},"            test_data_y",[35,34540,544],{"class":495},[35,34542,34543],{"class":359},"test_data_y.to(device)\n",[35,34545,34546],{"class":37,"line":8317},[35,34547,34548],{"class":41},"            # 设置为验证模式\n",[35,34550,34551],{"class":37,"line":8344},[35,34552,33201],{"class":359},[35,34554,34555],{"class":37,"line":8349},[35,34556,34557],{"class":41},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[35,34559,34560,34562,34564],{"class":37,"line":8355},[35,34561,32986],{"class":359},[35,34563,544],{"class":495},[35,34565,34566],{"class":359},"model(test_data_x)\n",[35,34568,34569],{"class":37,"line":8367},[35,34570,34571],{"class":41},"            # 查找每一行中最大值对应的下标\n",[35,34573,34574,34576,34578,34580,34582,34584,34586],{"class":37,"line":8379},[35,34575,33003],{"class":359},[35,34577,544],{"class":495},[35,34579,33008],{"class":359},[35,34581,33011],{"class":5550},[35,34583,544],{"class":495},[35,34585,713],{"class":58},[35,34587,505],{"class":359},[35,34589,34590],{"class":37,"line":8391},[35,34591,34592],{"class":41},"            # 计算正确率\n",[35,34594,34595],{"class":37,"line":10050},[35,34596,34597],{"class":41},"            # .data表示是一个不带梯度信息的tensor\n",[35,34599,34600],{"class":37,"line":10075},[35,34601,34602],{"class":41},"            # 如果预测正确，则准确度test_corrects加1\n",[35,34604,34605,34608,34610,34612,34614],{"class":37,"line":10098},[35,34606,34607],{"class":359},"            test_corrects",[35,34609,9811],{"class":495},[35,34611,33113],{"class":359},[35,34613,3283],{"class":495},[35,34615,34616],{"class":359},"test_data_y.data)\n",[35,34618,34619],{"class":37,"line":10122},[35,34620,34621],{"class":41},"            # 将所有的测试样本进行累计\n",[35,34623,34624,34627,34629,34632,34634],{"class":37,"line":10127},[35,34625,34626],{"class":359},"            test_num",[35,34628,9811],{"class":495},[35,34630,34631],{"class":359},"test_data_x.size(",[35,34633,687],{"class":58},[35,34635,505],{"class":359},[35,34637,34638],{"class":37,"line":10132},[35,34639,141],{"emptyLinePlaceholder":140},[35,34641,34642],{"class":37,"line":10137},[35,34643,34644],{"class":41},"        # 计算准确度\n",[35,34646,34647,34650,34652,34655,34657],{"class":37,"line":10146},[35,34648,34649],{"class":359},"        test_acc",[35,34651,544],{"class":495},[35,34653,34654],{"class":359},"test_corrects.double().item()",[35,34656,1078],{"class":495},[35,34658,34659],{"class":359},"test_num\n",[35,34661,34662],{"class":37,"line":10151},[35,34663,34664],{"class":41},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[35,34666,34667,34669,34671,34674],{"class":37,"line":10157},[35,34668,32777],{"class":58},[35,34670,499],{"class":359},[35,34672,34673],{"class":306},"\"测试的准确率：\"",[35,34675,34676],{"class":359},",test_acc)\n",[35,34678,34679],{"class":37,"line":10178},[35,34680,141],{"emptyLinePlaceholder":140},[35,34682,34683],{"class":37,"line":10184},[35,34684,34685],{"class":41},"# 实现模型的测试功能\n",[35,34687,34688,34690,34692,34694,34696],{"class":37,"line":10198},[35,34689,1892],{"class":495},[35,34691,31546],{"class":58},[35,34693,3283],{"class":495},[35,34695,31551],{"class":306},[35,34697,4073],{"class":359},[35,34699,34700],{"class":37,"line":10204},[35,34701,34702],{"class":41},"    # 加载模型\n",[35,34704,34705,34707,34709],{"class":37,"line":10231},[35,34706,31615],{"class":359},[35,34708,544],{"class":495},[35,34710,34151],{"class":359},[35,34712,34713],{"class":37,"line":10240},[35,34714,34715],{"class":41},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[35,34717,34718],{"class":37,"line":10246},[35,34719,34720],{"class":41},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[35,34722,34723,34726,34729],{"class":37,"line":10254},[35,34724,34725],{"class":359},"    model.load_state_dict(torch.load(",[35,34727,34728],{"class":306},"'best_model.pth'",[35,34730,30823],{"class":359},[35,34732,34733],{"class":37,"line":10259},[35,34734,34735],{"class":41},"    # 数据加载\n",[35,34737,34738,34740,34742],{"class":37,"line":16938},[35,34739,34348],{"class":359},[35,34741,544],{"class":495},[35,34743,34744],{"class":359},"test_data_process()\n",[35,34746,34747],{"class":37,"line":16944},[35,34748,34749],{"class":41},"    # 加载模型测试的函数\n",[35,34751,34752],{"class":37,"line":16967},[35,34753,34754],{"class":359},"    test_model_process(model,test_dataloader)\n",[35,34756,34757],{"class":37,"line":16973},[35,34758,141],{"emptyLinePlaceholder":140},[35,34760,34761],{"class":37,"line":16996},[35,34762,34763],{"class":41},"    # 验证集推理实现：\n",[35,34765,34766],{"class":37,"line":17010},[35,34767,34768],{"class":41},"    # 加载数据加载的更详细一些\n",[35,34770,34771,34773,34775,34777,34779,34781,34783],{"class":37,"line":17030},[35,34772,31563],{"class":359},[35,34774,544],{"class":495},[35,34776,31570],{"class":306},[35,34778,2054],{"class":495},[35,34780,31575],{"class":359},[35,34782,2051],{"class":495},[35,34784,34445],{"class":306},[35,34786,34787,34789,34791],{"class":37,"line":17036},[35,34788,31615],{"class":359},[35,34790,544],{"class":495},[35,34792,32615],{"class":359},[35,34794,34795],{"class":37,"line":17047},[35,34796,34797],{"class":41},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[35,34799,34800],{"class":37,"line":17070},[35,34801,34802],{"class":41},"    # 顺序不可改变\n",[35,34804,34805,34808,34810,34812,34815,34817,34820,34822,34825,34827,34830,34832,34835,34837,34840,34842,34845,34847,34850,34852,34855,34857,34860],{"class":37,"line":17092},[35,34806,34807],{"class":359},"    classes",[35,34809,544],{"class":495},[35,34811,1384],{"class":359},[35,34813,34814],{"class":306},"'T-shirt\u002Ftop'",[35,34816,872],{"class":359},[35,34818,34819],{"class":306},"'Trouser'",[35,34821,872],{"class":359},[35,34823,34824],{"class":306},"'Pullover'",[35,34826,872],{"class":359},[35,34828,34829],{"class":306},"'Dress'",[35,34831,872],{"class":359},[35,34833,34834],{"class":306},"'Coat'",[35,34836,872],{"class":359},[35,34838,34839],{"class":306},"'Sandal'",[35,34841,872],{"class":359},[35,34843,34844],{"class":306},"'Shirt'",[35,34846,872],{"class":359},[35,34848,34849],{"class":306},"'Sneaker'",[35,34851,872],{"class":359},[35,34853,34854],{"class":306},"'Bag'",[35,34856,872],{"class":359},[35,34858,34859],{"class":306},"'Ankle boot'",[35,34861,33572],{"class":359},[35,34863,34864,34866],{"class":37,"line":17097},[35,34865,34504],{"class":495},[35,34867,33210],{"class":359},[35,34869,34870],{"class":37,"line":17103},[35,34871,34872],{"class":41},"        # 将数据和标签都放到设备当中\n",[35,34874,34875,34877,34880,34882],{"class":37,"line":17117},[35,34876,3737],{"class":495},[35,34878,34879],{"class":359}," b_x,b_y ",[35,34881,26374],{"class":495},[35,34883,34523],{"class":359},[35,34885,34886,34888,34890],{"class":37,"line":17130},[35,34887,32936],{"class":359},[35,34889,544],{"class":495},[35,34891,32941],{"class":359},[35,34893,34894,34896,34898],{"class":37,"line":17135},[35,34895,32951],{"class":359},[35,34897,544],{"class":495},[35,34899,32956],{"class":359},[35,34901,34902],{"class":37,"line":17149},[35,34903,141],{"emptyLinePlaceholder":140},[35,34905,34906],{"class":37,"line":17154},[35,34907,34908],{"class":41},"            # 设置模型为验证模式\n",[35,34910,34911],{"class":37,"line":17160},[35,34912,33201],{"class":359},[35,34914,34915],{"class":37,"line":17165},[35,34916,34917],{"class":41},"            # 模型推理结果\n",[35,34919,34920,34922,34924],{"class":37,"line":17179},[35,34921,32986],{"class":359},[35,34923,544],{"class":495},[35,34925,32991],{"class":359},[35,34927,34928],{"class":37,"line":17184},[35,34929,34930],{"class":41},"            # 获取最大下标，最大下标就是类别号\n",[35,34932,34933,34935,34937,34939,34941,34943,34945],{"class":37,"line":17189},[35,34934,33003],{"class":359},[35,34936,544],{"class":495},[35,34938,33008],{"class":359},[35,34940,33011],{"class":5550},[35,34942,544],{"class":495},[35,34944,713],{"class":58},[35,34946,505],{"class":359},[35,34948,34949],{"class":37,"line":17203},[35,34950,34951],{"class":41},"            # 取出张量中的数值\n",[35,34953,34954,34957,34959],{"class":37,"line":17215},[35,34955,34956],{"class":359},"            result",[35,34958,544],{"class":495},[35,34960,34961],{"class":359},"pre_lab.item()\n",[35,34963,34964,34967,34969],{"class":37,"line":17220},[35,34965,34966],{"class":359},"            label",[35,34968,544],{"class":495},[35,34970,34971],{"class":359},"b_y.item()\n",[35,34973,34974,34977,34979,34982,34985,34988,34990,34993],{"class":37,"line":17233},[35,34975,34976],{"class":58},"            print",[35,34978,499],{"class":359},[35,34980,34981],{"class":306},"\"预测值：\"",[35,34983,34984],{"class":359},",classes[result],",[35,34986,34987],{"class":306},"\"------\"",[35,34989,872],{"class":359},[35,34991,34992],{"class":306},"\"真实值：\"",[35,34994,34995],{"class":359},",classes[label])\n",[21,34997,34998],{},"（2）AlexNet",[14,35000,35001],{},[17,35002,35003],{},"神经网络构建",[25,35005,35007],{"className":30704,"code":35006,"language":30706,"meta":30,"style":30},"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",[32,35008,35009,35015,35025,35035,35047,35051,35068,35076,35091,35103,35145,35172,35215,35241,35285,35328,35371,35398,35402,35412,35417,35445,35464,35483,35487,35492,35500,35515,35525,35539,35549,35564,35579,35594,35605,35609,35614,35624,35639,35644,35658,35673,35685,35690,35701,35706,35712,35717,35729,35749,35754,35763],{"__ignoreMap":30},[35,35010,35011,35013],{"class":37,"line":38},[35,35012,30718],{"class":495},[35,35014,30721],{"class":359},[35,35016,35017,35019,35021,35023],{"class":37,"line":45},[35,35018,31063],{"class":495},[35,35020,31066],{"class":359},[35,35022,30718],{"class":495},[35,35024,31071],{"class":359},[35,35026,35027,35029,35031,35033],{"class":37,"line":55},[35,35028,31063],{"class":495},[35,35030,31083],{"class":359},[35,35032,30718],{"class":495},[35,35034,31088],{"class":359},[35,35036,35037,35039,35042,35044],{"class":37,"line":65},[35,35038,30718],{"class":495},[35,35040,35041],{"class":359}," torch.nn.functional ",[35,35043,31709],{"class":495},[35,35045,35046],{"class":359}," F\n",[35,35048,35049],{"class":37,"line":74},[35,35050,141],{"emptyLinePlaceholder":140},[35,35052,35053,35055,35058,35060,35062,35064,35066],{"class":37,"line":83},[35,35054,15028],{"class":495},[35,35056,35057],{"class":48}," AlexNet",[35,35059,499],{"class":359},[35,35061,31104],{"class":48},[35,35063,1052],{"class":359},[35,35065,31109],{"class":48},[35,35067,31112],{"class":359},[35,35069,35070,35072,35074],{"class":37,"line":92},[35,35071,31127],{"class":495},[35,35073,31130],{"class":58},[35,35075,31133],{"class":359},[35,35077,35078,35080,35083,35085,35087,35089],{"class":37,"line":101},[35,35079,31143],{"class":58},[35,35081,35082],{"class":359},"(AlexNet,",[35,35084,31149],{"class":58},[35,35086,31152],{"class":359},[35,35088,31155],{"class":58},[35,35090,2317],{"class":359},[35,35092,35093,35095,35098,35100],{"class":37,"line":110},[35,35094,31171],{"class":58},[35,35096,35097],{"class":359},".ReLu",[35,35099,544],{"class":495},[35,35101,35102],{"class":359},"nn.ReLU()\n",[35,35104,35105,35107,35109,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129,35131,35133,35135,35137,35139,35141,35143],{"class":37,"line":119},[35,35106,31171],{"class":58},[35,35108,31174],{"class":359},[35,35110,544],{"class":495},[35,35112,31179],{"class":359},[35,35114,31182],{"class":5550},[35,35116,544],{"class":495},[35,35118,713],{"class":58},[35,35120,872],{"class":359},[35,35122,31191],{"class":5550},[35,35124,544],{"class":495},[35,35126,705],{"class":58},[35,35128,872],{"class":359},[35,35130,31200],{"class":5550},[35,35132,544],{"class":495},[35,35134,966],{"class":58},[35,35136,872],{"class":359},[35,35138,31255],{"class":5550},[35,35140,544],{"class":495},[35,35142,789],{"class":58},[35,35144,505],{"class":359},[35,35146,35147,35149,35151,35153,35156,35158,35160,35162,35164,35166,35168,35170],{"class":37,"line":128},[35,35148,31171],{"class":58},[35,35150,31239],{"class":359},[35,35152,544],{"class":495},[35,35154,35155],{"class":359},"nn.MaxPool2d(",[35,35157,31200],{"class":5550},[35,35159,544],{"class":495},[35,35161,568],{"class":58},[35,35163,872],{"class":359},[35,35165,31255],{"class":5550},[35,35167,544],{"class":495},[35,35169,574],{"class":58},[35,35171,505],{"class":359},[35,35173,35174,35176,35178,35180,35182,35184,35186,35188,35190,35192,35194,35197,35199,35201,35203,35205,35207,35209,35211,35213],{"class":37,"line":137},[35,35175,31171],{"class":58},[35,35177,31268],{"class":359},[35,35179,544],{"class":495},[35,35181,31179],{"class":359},[35,35183,31182],{"class":5550},[35,35185,544],{"class":495},[35,35187,705],{"class":58},[35,35189,872],{"class":359},[35,35191,31191],{"class":5550},[35,35193,544],{"class":495},[35,35195,35196],{"class":58},"256",[35,35198,872],{"class":359},[35,35200,31200],{"class":5550},[35,35202,544],{"class":495},[35,35204,372],{"class":58},[35,35206,872],{"class":359},[35,35208,31209],{"class":5550},[35,35210,544],{"class":495},[35,35212,574],{"class":58},[35,35214,505],{"class":359},[35,35216,35217,35219,35221,35223,35225,35227,35229,35231,35233,35235,35237,35239],{"class":37,"line":144},[35,35218,31171],{"class":58},[35,35220,31303],{"class":359},[35,35222,544],{"class":495},[35,35224,35155],{"class":359},[35,35226,31200],{"class":5550},[35,35228,544],{"class":495},[35,35230,568],{"class":58},[35,35232,872],{"class":359},[35,35234,31255],{"class":5550},[35,35236,544],{"class":495},[35,35238,574],{"class":58},[35,35240,505],{"class":359},[35,35242,35243,35245,35248,35250,35252,35254,35256,35258,35260,35262,35264,35267,35269,35271,35273,35275,35277,35279,35281,35283],{"class":37,"line":150},[35,35244,31171],{"class":58},[35,35246,35247],{"class":359},".c5",[35,35249,544],{"class":495},[35,35251,31179],{"class":359},[35,35253,31182],{"class":5550},[35,35255,544],{"class":495},[35,35257,35196],{"class":58},[35,35259,872],{"class":359},[35,35261,31191],{"class":5550},[35,35263,544],{"class":495},[35,35265,35266],{"class":58},"384",[35,35268,872],{"class":359},[35,35270,31200],{"class":5550},[35,35272,544],{"class":495},[35,35274,568],{"class":58},[35,35276,872],{"class":359},[35,35278,31209],{"class":5550},[35,35280,544],{"class":495},[35,35282,713],{"class":58},[35,35284,505],{"class":359},[35,35286,35287,35289,35292,35294,35296,35298,35300,35302,35304,35306,35308,35310,35312,35314,35316,35318,35320,35322,35324,35326],{"class":37,"line":159},[35,35288,31171],{"class":58},[35,35290,35291],{"class":359},".c6",[35,35293,544],{"class":495},[35,35295,31179],{"class":359},[35,35297,31182],{"class":5550},[35,35299,544],{"class":495},[35,35301,35266],{"class":58},[35,35303,872],{"class":359},[35,35305,31191],{"class":5550},[35,35307,544],{"class":495},[35,35309,35266],{"class":58},[35,35311,872],{"class":359},[35,35313,31200],{"class":5550},[35,35315,544],{"class":495},[35,35317,568],{"class":58},[35,35319,872],{"class":359},[35,35321,31209],{"class":5550},[35,35323,544],{"class":495},[35,35325,713],{"class":58},[35,35327,505],{"class":359},[35,35329,35330,35332,35335,35337,35339,35341,35343,35345,35347,35349,35351,35353,35355,35357,35359,35361,35363,35365,35367,35369],{"class":37,"line":168},[35,35331,31171],{"class":58},[35,35333,35334],{"class":359},".c7",[35,35336,544],{"class":495},[35,35338,31179],{"class":359},[35,35340,31182],{"class":5550},[35,35342,544],{"class":495},[35,35344,35266],{"class":58},[35,35346,872],{"class":359},[35,35348,31191],{"class":5550},[35,35350,544],{"class":495},[35,35352,35196],{"class":58},[35,35354,872],{"class":359},[35,35356,31200],{"class":5550},[35,35358,544],{"class":495},[35,35360,568],{"class":58},[35,35362,872],{"class":359},[35,35364,31209],{"class":5550},[35,35366,544],{"class":495},[35,35368,713],{"class":58},[35,35370,505],{"class":359},[35,35372,35373,35375,35378,35380,35382,35384,35386,35388,35390,35392,35394,35396],{"class":37,"line":177},[35,35374,31171],{"class":58},[35,35376,35377],{"class":359},".s8",[35,35379,544],{"class":495},[35,35381,35155],{"class":359},[35,35383,31200],{"class":5550},[35,35385,544],{"class":495},[35,35387,568],{"class":58},[35,35389,872],{"class":359},[35,35391,31255],{"class":5550},[35,35393,544],{"class":495},[35,35395,574],{"class":58},[35,35397,505],{"class":359},[35,35399,35400],{"class":37,"line":182},[35,35401,31328],{"class":41},[35,35403,35404,35406,35408,35410],{"class":37,"line":188},[35,35405,31171],{"class":58},[35,35407,31335],{"class":359},[35,35409,544],{"class":495},[35,35411,31340],{"class":359},[35,35413,35414],{"class":37,"line":197},[35,35415,35416],{"class":41},"       # 定义全连接层\n",[35,35418,35419,35421,35424,35426,35428,35430,35432,35434,35436,35438,35440,35443],{"class":37,"line":206},[35,35420,31171],{"class":58},[35,35422,35423],{"class":359},".f1",[35,35425,544],{"class":495},[35,35427,31357],{"class":359},[35,35429,408],{"class":58},[35,35431,949],{"class":495},[35,35433,408],{"class":58},[35,35435,949],{"class":495},[35,35437,35196],{"class":58},[35,35439,872],{"class":359},[35,35441,35442],{"class":58},"4096",[35,35444,505],{"class":359},[35,35446,35447,35449,35452,35454,35456,35458,35460,35462],{"class":37,"line":215},[35,35448,31171],{"class":58},[35,35450,35451],{"class":359},".f2",[35,35453,544],{"class":495},[35,35455,31357],{"class":359},[35,35457,35442],{"class":58},[35,35459,872],{"class":359},[35,35461,35442],{"class":58},[35,35463,505],{"class":359},[35,35465,35466,35468,35471,35473,35475,35477,35479,35481],{"class":37,"line":224},[35,35467,31171],{"class":58},[35,35469,35470],{"class":359},".f3",[35,35472,544],{"class":495},[35,35474,31357],{"class":359},[35,35476,35442],{"class":58},[35,35478,872],{"class":359},[35,35480,940],{"class":58},[35,35482,505],{"class":359},[35,35484,35485],{"class":37,"line":233},[35,35486,141],{"emptyLinePlaceholder":140},[35,35488,35489],{"class":37,"line":238},[35,35490,35491],{"class":41},"    # 定义前向传播\n",[35,35493,35494,35496,35498],{"class":37,"line":244},[35,35495,31127],{"class":495},[35,35497,31419],{"class":48},[35,35499,31422],{"class":359},[35,35501,35502,35504,35506,35508,35511,35513],{"class":37,"line":253},[35,35503,31427],{"class":359},[35,35505,544],{"class":495},[35,35507,31149],{"class":58},[35,35509,35510],{"class":359},".ReLu(",[35,35512,31149],{"class":58},[35,35514,31439],{"class":359},[35,35516,35517,35519,35521,35523],{"class":37,"line":262},[35,35518,31427],{"class":359},[35,35520,544],{"class":495},[35,35522,31149],{"class":58},[35,35524,31450],{"class":359},[35,35526,35527,35529,35531,35533,35535,35537],{"class":37,"line":271},[35,35528,31427],{"class":359},[35,35530,544],{"class":495},[35,35532,31149],{"class":58},[35,35534,35510],{"class":359},[35,35536,31149],{"class":58},[35,35538,31465],{"class":359},[35,35540,35541,35543,35545,35547],{"class":37,"line":280},[35,35542,31427],{"class":359},[35,35544,544],{"class":495},[35,35546,31149],{"class":58},[35,35548,31476],{"class":359},[35,35550,35551,35553,35555,35557,35559,35561],{"class":37,"line":289},[35,35552,31427],{"class":359},[35,35554,544],{"class":495},[35,35556,31149],{"class":58},[35,35558,35510],{"class":359},[35,35560,31149],{"class":58},[35,35562,35563],{"class":359},".c5(x))\n",[35,35565,35566,35568,35570,35572,35574,35576],{"class":37,"line":294},[35,35567,31427],{"class":359},[35,35569,544],{"class":495},[35,35571,31149],{"class":58},[35,35573,35510],{"class":359},[35,35575,31149],{"class":58},[35,35577,35578],{"class":359},".c6(x))\n",[35,35580,35581,35583,35585,35587,35589,35591],{"class":37,"line":300},[35,35582,31427],{"class":359},[35,35584,544],{"class":495},[35,35586,31149],{"class":58},[35,35588,35510],{"class":359},[35,35590,31149],{"class":58},[35,35592,35593],{"class":359},".c7(x))\n",[35,35595,35596,35598,35600,35602],{"class":37,"line":313},[35,35597,31427],{"class":359},[35,35599,544],{"class":495},[35,35601,31149],{"class":58},[35,35603,35604],{"class":359},".s8(x)\n",[35,35606,35607],{"class":37,"line":324},[35,35608,141],{"emptyLinePlaceholder":140},[35,35610,35611],{"class":37,"line":2955},[35,35612,35613],{"class":41},"        # 展平加线性全连接层\n",[35,35615,35616,35618,35620,35622],{"class":37,"line":8282},[35,35617,31427],{"class":359},[35,35619,544],{"class":495},[35,35621,31149],{"class":58},[35,35623,31487],{"class":359},[35,35625,35626,35628,35630,35632,35634,35636],{"class":37,"line":8306},[35,35627,31427],{"class":359},[35,35629,544],{"class":495},[35,35631,31149],{"class":58},[35,35633,35510],{"class":359},[35,35635,31149],{"class":58},[35,35637,35638],{"class":359},".f1(x))\n",[35,35640,35641],{"class":37,"line":8311},[35,35642,35643],{"class":41},"        # 还需要dropout对神经元随机进行失活\n",[35,35645,35646,35648,35650,35653,35656],{"class":37,"line":8317},[35,35647,31427],{"class":359},[35,35649,544],{"class":495},[35,35651,35652],{"class":359},"F.dropout(x,",[35,35654,35655],{"class":58},"0.5",[35,35657,505],{"class":359},[35,35659,35660,35662,35664,35666,35668,35670],{"class":37,"line":8344},[35,35661,31427],{"class":359},[35,35663,544],{"class":495},[35,35665,31149],{"class":58},[35,35667,35510],{"class":359},[35,35669,31149],{"class":58},[35,35671,35672],{"class":359},".f2(x))\n",[35,35674,35675,35677,35679,35681,35683],{"class":37,"line":8349},[35,35676,31427],{"class":359},[35,35678,544],{"class":495},[35,35680,35652],{"class":359},[35,35682,35655],{"class":58},[35,35684,505],{"class":359},[35,35686,35687],{"class":37,"line":8355},[35,35688,35689],{"class":41},"        # 直接输出\n",[35,35691,35692,35694,35696,35698],{"class":37,"line":8367},[35,35693,31427],{"class":359},[35,35695,544],{"class":495},[35,35697,31149],{"class":58},[35,35699,35700],{"class":359},".f3(x)\n",[35,35702,35703],{"class":37,"line":8379},[35,35704,35705],{"class":41},"        # 前向传播输出\n",[35,35707,35708,35710],{"class":37,"line":8391},[35,35709,15086],{"class":495},[35,35711,31535],{"class":359},[35,35713,35714],{"class":37,"line":10050},[35,35715,35716],{"class":41},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[35,35718,35719,35721,35723,35725,35727],{"class":37,"line":10075},[35,35720,1892],{"class":495},[35,35722,31546],{"class":58},[35,35724,3283],{"class":495},[35,35726,31551],{"class":306},[35,35728,4073],{"class":359},[35,35730,35731,35733,35735,35737,35739,35741,35743,35745,35747],{"class":37,"line":10098},[35,35732,31563],{"class":359},[35,35734,544],{"class":495},[35,35736,30777],{"class":359},[35,35738,31570],{"class":306},[35,35740,2054],{"class":495},[35,35742,31575],{"class":359},[35,35744,2051],{"class":495},[35,35746,30802],{"class":306},[35,35748,505],{"class":359},[35,35750,35751],{"class":37,"line":10122},[35,35752,35753],{"class":41},"    # 模型实例化，然后将实例化的模型放到设备中\n",[35,35755,35756,35758,35760],{"class":37,"line":10127},[35,35757,31615],{"class":359},[35,35759,544],{"class":495},[35,35761,35762],{"class":359},"AlexNet().to(device)\n",[35,35764,35765,35767,35769,35771,35773,35776,35778,35780],{"class":37,"line":10132},[35,35766,31625],{"class":58},[35,35768,31628],{"class":359},[35,35770,713],{"class":58},[35,35772,872],{"class":359},[35,35774,35775],{"class":58},"227",[35,35777,872],{"class":359},[35,35779,35775],{"class":58},[35,35781,31641],{"class":359},[14,35783,35784],{"start":45},[17,35785,31654],{},[25,35787,35789],{"className":30704,"code":35788,"language":30706,"meta":30,"style":30},"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",[32,35790,35791,35797,35803,35813,35819,35829,35839,35849,35859,35869,35873,35884,35894,35898,35902,35906,35914,35926,35936,35952,35962,35994,36008,36018,36028,36032,36042,36056,36066,36076,36086,36092,36096,36100,36104,36108,36112,36120,36140,36144,36148,36152,36156,36160,36176,36180,36184,36192,36196,36200,36208,36212,36216,36220,36228,36232,36236,36240,36244,36252,36256,36264,36268,36276,36280,36288,36292,36300,36304,36308,36316,36320,36324,36328,36340,36364,36378,36382,36386,36390,36398,36402,36410,36414,36422,36426,36434,36438,36446,36450,36458,36462,36474,36478,36486,36490,36498,36502,36506,36510,36514,36522,36526,36542,36546,36554,36558,36562,36566,36570,36574,36578,36582,36598,36602,36614,36618,36630,36634,36646,36650,36658,36662,36670,36674,36678,36683,36689,36693,36702,36706,36723,36727,36736,36740,36758,36771,36776,36789,36793,36797,36805,36809,36813,36821,36825,36833,36837,36845,36849,36853,36895,36937,36941,36945,36961,36965,36981,36985,36989,36997,37001,37005,37017,37055,37060,37065,37074,37078,37092,37102,37108,37114,37120,37126,37130,37134,37140,37144,37148,37156,37160,37178,37182,37186,37190,37206,37210,37214,37218,37222,37226,37246,37266,37270,37274,37278,37286,37294,37298,37314,37334,37354,37358,37362,37370,37378,37382,37386,37390,37402,37406,37416,37424,37441],{"__ignoreMap":30},[35,35792,35793,35795],{"class":37,"line":38},[35,35794,30718],{"class":495},[35,35796,32148],{"class":359},[35,35798,35799,35801],{"class":37,"line":45},[35,35800,30718],{"class":495},[35,35802,32155],{"class":359},[35,35804,35805,35807,35809,35811],{"class":37,"line":55},[35,35806,30718],{"class":495},[35,35808,32166],{"class":359},[35,35810,31709],{"class":495},[35,35812,32171],{"class":359},[35,35814,35815,35817],{"class":37,"line":65},[35,35816,30718],{"class":495},[35,35818,30721],{"class":359},[35,35820,35821,35823,35825,35827],{"class":37,"line":74},[35,35822,31063],{"class":495},[35,35824,31741],{"class":359},[35,35826,30718],{"class":495},[35,35828,32188],{"class":359},[35,35830,35831,35833,35835,35837],{"class":37,"line":83},[35,35832,31063],{"class":495},[35,35834,31694],{"class":359},[35,35836,30718],{"class":495},[35,35838,31699],{"class":359},[35,35840,35841,35843,35845,35847],{"class":37,"line":92},[35,35842,31063],{"class":495},[35,35844,31724],{"class":359},[35,35846,30718],{"class":495},[35,35848,31729],{"class":359},[35,35850,35851,35853,35855,35857],{"class":37,"line":101},[35,35852,30718],{"class":495},[35,35854,31741],{"class":359},[35,35856,31709],{"class":495},[35,35858,31746],{"class":359},[35,35860,35861,35863,35865,35867],{"class":37,"line":110},[35,35862,30718],{"class":495},[35,35864,31758],{"class":359},[35,35866,31709],{"class":495},[35,35868,31763],{"class":359},[35,35870,35871],{"class":37,"line":119},[35,35872,32233],{"class":41},[35,35874,35875,35877,35879,35881],{"class":37,"line":128},[35,35876,31063],{"class":495},[35,35878,32240],{"class":359},[35,35880,30718],{"class":495},[35,35882,35883],{"class":359}," AlexNet\n",[35,35885,35886,35888,35890,35892],{"class":37,"line":137},[35,35887,31063],{"class":495},[35,35889,31066],{"class":359},[35,35891,30718],{"class":495},[35,35893,31071],{"class":359},[35,35895,35896],{"class":37,"line":144},[35,35897,141],{"emptyLinePlaceholder":140},[35,35899,35900],{"class":37,"line":150},[35,35901,141],{"emptyLinePlaceholder":140},[35,35903,35904],{"class":37,"line":159},[35,35905,32268],{"class":41},[35,35907,35908,35910,35912],{"class":37,"line":168},[35,35909,32273],{"class":495},[35,35911,32276],{"class":48},[35,35913,32279],{"class":359},[35,35915,35916,35918,35920,35922,35924],{"class":37,"line":177},[35,35917,32284],{"class":359},[35,35919,544],{"class":495},[35,35921,31781],{"class":359},[35,35923,31789],{"class":306},[35,35925,31792],{"class":359},[35,35927,35928,35930,35932,35934],{"class":37,"line":182},[35,35929,32297],{"class":5550},[35,35931,544],{"class":495},[35,35933,31802],{"class":58},[35,35935,31792],{"class":359},[35,35937,35938,35940,35942,35944,35946,35948,35950],{"class":37,"line":188},[35,35939,32308],{"class":5550},[35,35941,544],{"class":495},[35,35943,31819],{"class":359},[35,35945,31822],{"class":5550},[35,35947,544],{"class":495},[35,35949,35775],{"class":58},[35,35951,31830],{"class":359},[35,35953,35954,35956,35958,35960],{"class":37,"line":197},[35,35955,32325],{"class":5550},[35,35957,544],{"class":495},[35,35959,31802],{"class":58},[35,35961,505],{"class":359},[35,35963,35964,35966,35968,35970,35972,35974,35976,35978,35980,35982,35984,35986,35988,35990,35992],{"class":37,"line":206},[35,35965,32336],{"class":359},[35,35967,544],{"class":495},[35,35969,32341],{"class":359},[35,35971,32344],{"class":58},[35,35973,499],{"class":359},[35,35975,32349],{"class":58},[35,35977,949],{"class":495},[35,35979,7692],{"class":58},[35,35981,32356],{"class":359},[35,35983,32344],{"class":58},[35,35985,499],{"class":359},[35,35987,32363],{"class":58},[35,35989,949],{"class":495},[35,35991,7692],{"class":58},[35,35993,32370],{"class":359},[35,35995,35996,35998,36000,36002,36004,36006],{"class":37,"line":215},[35,35997,32375],{"class":359},[35,35999,544],{"class":495},[35,36001,32380],{"class":359},[35,36003,31863],{"class":5550},[35,36005,544],{"class":495},[35,36007,31868],{"class":359},[35,36009,36010,36012,36014,36016],{"class":37,"line":224},[35,36011,32391],{"class":5550},[35,36013,544],{"class":495},[35,36015,32396],{"class":58},[35,36017,31792],{"class":359},[35,36019,36020,36022,36024,36026],{"class":37,"line":233},[35,36021,32403],{"class":5550},[35,36023,544],{"class":495},[35,36025,31802],{"class":58},[35,36027,31792],{"class":359},[35,36029,36030],{"class":37,"line":238},[35,36031,32414],{"class":41},[35,36033,36034,36036,36038,36040],{"class":37,"line":244},[35,36035,32419],{"class":5550},[35,36037,544],{"class":495},[35,36039,889],{"class":58},[35,36041,505],{"class":359},[35,36043,36044,36046,36048,36050,36052,36054],{"class":37,"line":253},[35,36045,32430],{"class":359},[35,36047,544],{"class":495},[35,36049,31860],{"class":359},[35,36051,31863],{"class":5550},[35,36053,544],{"class":495},[35,36055,32441],{"class":359},[35,36057,36058,36060,36062,36064],{"class":37,"line":262},[35,36059,32446],{"class":5550},[35,36061,544],{"class":495},[35,36063,32396],{"class":58},[35,36065,31792],{"class":359},[35,36067,36068,36070,36072,36074],{"class":37,"line":271},[35,36069,32457],{"class":5550},[35,36071,544],{"class":495},[35,36073,31802],{"class":58},[35,36075,31792],{"class":359},[35,36077,36078,36080,36082,36084],{"class":37,"line":280},[35,36079,32468],{"class":5550},[35,36081,544],{"class":495},[35,36083,889],{"class":58},[35,36085,505],{"class":359},[35,36087,36088,36090],{"class":37,"line":289},[35,36089,4424],{"class":495},[35,36091,32481],{"class":359},[35,36093,36094],{"class":37,"line":294},[35,36095,141],{"emptyLinePlaceholder":140},[35,36097,36098],{"class":37,"line":300},[35,36099,32490],{"class":41},[35,36101,36102],{"class":37,"line":313},[35,36103,32495],{"class":41},[35,36105,36106],{"class":37,"line":324},[35,36107,141],{"emptyLinePlaceholder":140},[35,36109,36110],{"class":37,"line":2955},[35,36111,32504],{"class":41},[35,36113,36114,36116,36118],{"class":37,"line":8282},[35,36115,32273],{"class":495},[35,36117,32511],{"class":48},[35,36119,32514],{"class":359},[35,36121,36122,36124,36126,36128,36130,36132,36134,36136,36138],{"class":37,"line":8306},[35,36123,31563],{"class":359},[35,36125,544],{"class":495},[35,36127,30777],{"class":359},[35,36129,31570],{"class":306},[35,36131,2054],{"class":495},[35,36133,31575],{"class":359},[35,36135,2051],{"class":495},[35,36137,32533],{"class":306},[35,36139,505],{"class":359},[35,36141,36142],{"class":37,"line":8311},[35,36143,141],{"emptyLinePlaceholder":140},[35,36145,36146],{"class":37,"line":8317},[35,36147,141],{"emptyLinePlaceholder":140},[35,36149,36150],{"class":37,"line":8344},[35,36151,32548],{"class":41},[35,36153,36154],{"class":37,"line":8349},[35,36155,32553],{"class":41},[35,36157,36158],{"class":37,"line":8355},[35,36159,32558],{"class":41},[35,36161,36162,36164,36166,36168,36170,36172,36174],{"class":37,"line":8367},[35,36163,32563],{"class":359},[35,36165,544],{"class":495},[35,36167,32568],{"class":359},[35,36169,32571],{"class":5550},[35,36171,544],{"class":495},[35,36173,32576],{"class":58},[35,36175,505],{"class":359},[35,36177,36178],{"class":37,"line":8379},[35,36179,141],{"emptyLinePlaceholder":140},[35,36181,36182],{"class":37,"line":8391},[35,36183,32587],{"class":41},[35,36185,36186,36188,36190],{"class":37,"line":10050},[35,36187,32592],{"class":359},[35,36189,544],{"class":495},[35,36191,32597],{"class":359},[35,36193,36194],{"class":37,"line":10075},[35,36195,141],{"emptyLinePlaceholder":140},[35,36197,36198],{"class":37,"line":10098},[35,36199,32606],{"class":41},[35,36201,36202,36204,36206],{"class":37,"line":10122},[35,36203,31615],{"class":359},[35,36205,544],{"class":495},[35,36207,32615],{"class":359},[35,36209,36210],{"class":37,"line":10127},[35,36211,32620],{"class":41},[35,36213,36214],{"class":37,"line":10132},[35,36215,32625],{"class":41},[35,36217,36218],{"class":37,"line":10137},[35,36219,32630],{"class":41},[35,36221,36222,36224,36226],{"class":37,"line":10146},[35,36223,32635],{"class":359},[35,36225,544],{"class":495},[35,36227,32640],{"class":359},[35,36229,36230],{"class":37,"line":10151},[35,36231,141],{"emptyLinePlaceholder":140},[35,36233,36234],{"class":37,"line":10157},[35,36235,141],{"emptyLinePlaceholder":140},[35,36237,36238],{"class":37,"line":10178},[35,36239,32653],{"class":41},[35,36241,36242],{"class":37,"line":10184},[35,36243,32658],{"class":41},[35,36245,36246,36248,36250],{"class":37,"line":10198},[35,36247,32663],{"class":359},[35,36249,544],{"class":495},[35,36251,32668],{"class":58},[35,36253,36254],{"class":37,"line":10204},[35,36255,32673],{"class":41},[35,36257,36258,36260,36262],{"class":37,"line":10231},[35,36259,32678],{"class":359},[35,36261,544],{"class":495},[35,36263,32683],{"class":359},[35,36265,36266],{"class":37,"line":10240},[35,36267,32688],{"class":41},[35,36269,36270,36272,36274],{"class":37,"line":10246},[35,36271,32693],{"class":359},[35,36273,544],{"class":495},[35,36275,32683],{"class":359},[35,36277,36278],{"class":37,"line":10254},[35,36279,32702],{"class":41},[35,36281,36282,36284,36286],{"class":37,"line":10259},[35,36283,32707],{"class":359},[35,36285,544],{"class":495},[35,36287,32683],{"class":359},[35,36289,36290],{"class":37,"line":16938},[35,36291,32716],{"class":41},[35,36293,36294,36296,36298],{"class":37,"line":16944},[35,36295,32721],{"class":359},[35,36297,544],{"class":495},[35,36299,32683],{"class":359},[35,36301,36302],{"class":37,"line":16967},[35,36303,141],{"emptyLinePlaceholder":140},[35,36305,36306],{"class":37,"line":16973},[35,36307,32734],{"class":41},[35,36309,36310,36312,36314],{"class":37,"line":16996},[35,36311,32739],{"class":359},[35,36313,544],{"class":495},[35,36315,32744],{"class":359},[35,36317,36318],{"class":37,"line":17010},[35,36319,141],{"emptyLinePlaceholder":140},[35,36321,36322],{"class":37,"line":17030},[35,36323,141],{"emptyLinePlaceholder":140},[35,36325,36326],{"class":37,"line":17036},[35,36327,32757],{"class":41},[35,36329,36330,36332,36334,36336,36338],{"class":37,"line":17047},[35,36331,3535],{"class":495},[35,36333,32764],{"class":359},[35,36335,26374],{"class":495},[35,36337,32769],{"class":58},[35,36339,32772],{"class":359},[35,36341,36342,36344,36346,36348,36350,36352,36354,36356,36358,36360,36362],{"class":37,"line":17070},[35,36343,32777],{"class":58},[35,36345,499],{"class":359},[35,36347,32782],{"class":306},[35,36349,32785],{"class":58},[35,36351,1078],{"class":306},[35,36353,32785],{"class":58},[35,36355,747],{"class":306},[35,36357,32794],{"class":359},[35,36359,1026],{"class":495},[35,36361,713],{"class":58},[35,36363,30823],{"class":359},[35,36365,36366,36368,36370,36372,36374,36376],{"class":37,"line":17092},[35,36367,32777],{"class":58},[35,36369,499],{"class":359},[35,36371,32809],{"class":306},[35,36373,949],{"class":495},[35,36375,940],{"class":58},[35,36377,505],{"class":359},[35,36379,36380],{"class":37,"line":17097},[35,36381,141],{"emptyLinePlaceholder":140},[35,36383,36384],{"class":37,"line":17103},[35,36385,32824],{"class":41},[35,36387,36388],{"class":37,"line":17117},[35,36389,32829],{"class":41},[35,36391,36392,36394,36396],{"class":37,"line":17130},[35,36393,32834],{"class":359},[35,36395,544],{"class":495},[35,36397,32668],{"class":58},[35,36399,36400],{"class":37,"line":17135},[35,36401,32843],{"class":41},[35,36403,36404,36406,36408],{"class":37,"line":17149},[35,36405,32848],{"class":359},[35,36407,544],{"class":495},[35,36409,3419],{"class":58},[35,36411,36412],{"class":37,"line":17154},[35,36413,32857],{"class":41},[35,36415,36416,36418,36420],{"class":37,"line":17160},[35,36417,32862],{"class":359},[35,36419,544],{"class":495},[35,36421,32668],{"class":58},[35,36423,36424],{"class":37,"line":17165},[35,36425,32871],{"class":41},[35,36427,36428,36430,36432],{"class":37,"line":17179},[35,36429,32876],{"class":359},[35,36431,544],{"class":495},[35,36433,3419],{"class":58},[35,36435,36436],{"class":37,"line":17184},[35,36437,32885],{"class":41},[35,36439,36440,36442,36444],{"class":37,"line":17189},[35,36441,32890],{"class":359},[35,36443,544],{"class":495},[35,36445,3419],{"class":58},[35,36447,36448],{"class":37,"line":17203},[35,36449,32899],{"class":41},[35,36451,36452,36454,36456],{"class":37,"line":17215},[35,36453,32904],{"class":359},[35,36455,544],{"class":495},[35,36457,3419],{"class":58},[35,36459,36460],{"class":37,"line":17220},[35,36461,32913],{"class":41},[35,36463,36464,36466,36468,36470,36472],{"class":37,"line":17233},[35,36465,3737],{"class":495},[35,36467,31927],{"class":359},[35,36469,26374],{"class":495},[35,36471,31932],{"class":58},[35,36473,32926],{"class":359},[35,36475,36476],{"class":37,"line":17238},[35,36477,32931],{"class":41},[35,36479,36480,36482,36484],{"class":37,"line":17243},[35,36481,32936],{"class":359},[35,36483,544],{"class":495},[35,36485,32941],{"class":359},[35,36487,36488],{"class":37,"line":17248},[35,36489,32946],{"class":41},[35,36491,36492,36494,36496],{"class":37,"line":17261},[35,36493,32951],{"class":359},[35,36495,544],{"class":495},[35,36497,32956],{"class":359},[35,36499,36500],{"class":37,"line":17266},[35,36501,32962],{"class":41},[35,36503,36504],{"class":37,"line":32959},[35,36505,32968],{"class":359},[35,36507,36508],{"class":37,"line":32965},[35,36509,32974],{"class":41},[35,36511,36512],{"class":37,"line":32971},[35,36513,32980],{"class":41},[35,36515,36516,36518,36520],{"class":37,"line":32977},[35,36517,32986],{"class":359},[35,36519,544],{"class":495},[35,36521,32991],{"class":359},[35,36523,36524],{"class":37,"line":32983},[35,36525,32997],{"class":41},[35,36527,36528,36530,36532,36534,36536,36538,36540],{"class":37,"line":32994},[35,36529,33003],{"class":359},[35,36531,544],{"class":495},[35,36533,33008],{"class":359},[35,36535,33011],{"class":5550},[35,36537,544],{"class":495},[35,36539,713],{"class":58},[35,36541,505],{"class":359},[35,36543,36544],{"class":37,"line":33000},[35,36545,33023],{"class":41},[35,36547,36548,36550,36552],{"class":37,"line":33020},[35,36549,33029],{"class":359},[35,36551,544],{"class":495},[35,36553,33034],{"class":359},[35,36555,36556],{"class":37,"line":33026},[35,36557,33040],{"class":41},[35,36559,36560],{"class":37,"line":33037},[35,36561,33046],{"class":359},[35,36563,36564],{"class":37,"line":33043},[35,36565,33052],{"class":41},[35,36567,36568],{"class":37,"line":33049},[35,36569,33058],{"class":359},[35,36571,36572],{"class":37,"line":33055},[35,36573,33064],{"class":41},[35,36575,36576],{"class":37,"line":33061},[35,36577,33070],{"class":359},[35,36579,36580],{"class":37,"line":33067},[35,36581,33076],{"class":41},[35,36583,36584,36586,36588,36590,36592,36594,36596],{"class":37,"line":33073},[35,36585,33082],{"class":359},[35,36587,9811],{"class":495},[35,36589,33087],{"class":359},[35,36591,949],{"class":495},[35,36593,33092],{"class":359},[35,36595,687],{"class":58},[35,36597,505],{"class":359},[35,36599,36600],{"class":37,"line":33079},[35,36601,33102],{"class":41},[35,36603,36604,36606,36608,36610,36612],{"class":37,"line":33099},[35,36605,33108],{"class":359},[35,36607,9811],{"class":495},[35,36609,33113],{"class":359},[35,36611,3283],{"class":495},[35,36613,33118],{"class":359},[35,36615,36616],{"class":37,"line":33105},[35,36617,33124],{"class":41},[35,36619,36620,36622,36624,36626,36628],{"class":37,"line":33121},[35,36621,33130],{"class":359},[35,36623,9811],{"class":495},[35,36625,33092],{"class":359},[35,36627,687],{"class":58},[35,36629,505],{"class":359},[35,36631,36632],{"class":37,"line":33127},[35,36633,33144],{"class":41},[35,36635,36636,36638,36640,36642,36644],{"class":37,"line":33141},[35,36637,3737],{"class":495},[35,36639,33152],{"class":359},[35,36641,26374],{"class":495},[35,36643,31932],{"class":58},[35,36645,33159],{"class":359},[35,36647,36648],{"class":37,"line":33147},[35,36649,33165],{"class":41},[35,36651,36652,36654,36656],{"class":37,"line":33162},[35,36653,32936],{"class":359},[35,36655,544],{"class":495},[35,36657,32941],{"class":359},[35,36659,36660],{"class":37,"line":33168},[35,36661,33180],{"class":41},[35,36663,36664,36666,36668],{"class":37,"line":33177},[35,36665,32951],{"class":359},[35,36667,544],{"class":495},[35,36669,32956],{"class":359},[35,36671,36672],{"class":37,"line":33183},[35,36673,33195],{"class":41},[35,36675,36676],{"class":37,"line":33192},[35,36677,33201],{"class":359},[35,36679,36680],{"class":37,"line":33198},[35,36681,36682],{"class":41},"            # 验证时不计算梯度以节省内存\u002F计算\n",[35,36684,36685,36687],{"class":37,"line":33204},[35,36686,33207],{"class":495},[35,36688,33210],{"class":359},[35,36690,36691],{"class":37,"line":33213},[35,36692,33216],{"class":41},[35,36694,36695,36698,36700],{"class":37,"line":33219},[35,36696,36697],{"class":359},"                output",[35,36699,544],{"class":495},[35,36701,32991],{"class":359},[35,36703,36704],{"class":37,"line":33230},[35,36705,33233],{"class":41},[35,36707,36708,36711,36713,36715,36717,36719,36721],{"class":37,"line":33236},[35,36709,36710],{"class":359},"                pre_lab",[35,36712,544],{"class":495},[35,36714,33008],{"class":359},[35,36716,33011],{"class":5550},[35,36718,544],{"class":495},[35,36720,713],{"class":58},[35,36722,505],{"class":359},[35,36724,36725],{"class":37,"line":33255},[35,36726,33258],{"class":41},[35,36728,36729,36732,36734],{"class":37,"line":33261},[35,36730,36731],{"class":359},"                val_batch_loss",[35,36733,544],{"class":495},[35,36735,33034],{"class":359},[35,36737,36738],{"class":37,"line":33272},[35,36739,33275],{"class":41},[35,36741,36742,36745,36747,36750,36752,36754,36756],{"class":37,"line":33278},[35,36743,36744],{"class":359},"                val_loss",[35,36746,9811],{"class":495},[35,36748,36749],{"class":359},"val_batch_loss.item()",[35,36751,949],{"class":495},[35,36753,33092],{"class":359},[35,36755,687],{"class":58},[35,36757,505],{"class":359},[35,36759,36760,36763,36765,36767,36769],{"class":37,"line":33298},[35,36761,36762],{"class":359},"                val_corrects",[35,36764,9811],{"class":495},[35,36766,33113],{"class":359},[35,36768,3283],{"class":495},[35,36770,33118],{"class":359},[35,36772,36773],{"class":37,"line":33314},[35,36774,36775],{"class":41},"            # 当前用于验证的样本数量\n",[35,36777,36778,36781,36783,36785,36787],{"class":37,"line":33320},[35,36779,36780],{"class":359},"            val_num",[35,36782,9811],{"class":495},[35,36784,33092],{"class":359},[35,36786,687],{"class":58},[35,36788,505],{"class":359},[35,36790,36791],{"class":37,"line":33334},[35,36792,33337],{"class":41},[35,36794,36795],{"class":37,"line":33340},[35,36796,33343],{"class":41},[35,36798,36799,36801,36803],{"class":37,"line":33346},[35,36800,33349],{"class":359},[35,36802,1078],{"class":495},[35,36804,33354],{"class":359},[35,36806,36807],{"class":37,"line":33357},[35,36808,33360],{"class":41},[35,36810,36811],{"class":37,"line":33363},[35,36812,33366],{"class":41},[35,36814,36815,36817,36819],{"class":37,"line":33369},[35,36816,33372],{"class":359},[35,36818,1078],{"class":495},[35,36820,33354],{"class":359},[35,36822,36823],{"class":37,"line":33379},[35,36824,33382],{"class":41},[35,36826,36827,36829,36831],{"class":37,"line":33385},[35,36828,33388],{"class":359},[35,36830,1078],{"class":495},[35,36832,33393],{"class":359},[35,36834,36835],{"class":37,"line":33396},[35,36836,33399],{"class":41},[35,36838,36839,36841,36843],{"class":37,"line":33402},[35,36840,33405],{"class":359},[35,36842,1078],{"class":495},[35,36844,33393],{"class":359},[35,36846,36847],{"class":37,"line":33412},[35,36848,141],{"emptyLinePlaceholder":140},[35,36850,36851],{"class":37,"line":33417},[35,36852,33420],{"class":41},[35,36854,36855,36857,36859,36861,36863,36865,36867,36869,36871,36873,36875,36877,36879,36881,36883,36885,36887,36889,36891,36893],{"class":37,"line":33423},[35,36856,32777],{"class":58},[35,36858,499],{"class":359},[35,36860,3926],{"class":306},[35,36862,32785],{"class":58},[35,36864,33434],{"class":306},[35,36866,1390],{"class":58},[35,36868,33439],{"class":495},[35,36870,1440],{"class":58},[35,36872,33444],{"class":306},[35,36874,1390],{"class":58},[35,36876,33439],{"class":495},[35,36878,1440],{"class":58},[35,36880,3926],{"class":306},[35,36882,33455],{"class":359},[35,36884,1026],{"class":495},[35,36886,713],{"class":58},[35,36888,33462],{"class":359},[35,36890,1026],{"class":495},[35,36892,713],{"class":58},[35,36894,33469],{"class":359},[35,36896,36897,36899,36901,36903,36905,36907,36909,36911,36913,36915,36917,36919,36921,36923,36925,36927,36929,36931,36933,36935],{"class":37,"line":33472},[35,36898,32777],{"class":58},[35,36900,499],{"class":359},[35,36902,3926],{"class":306},[35,36904,32785],{"class":58},[35,36906,33483],{"class":306},[35,36908,1390],{"class":58},[35,36910,33439],{"class":495},[35,36912,1440],{"class":58},[35,36914,33492],{"class":306},[35,36916,1390],{"class":58},[35,36918,33439],{"class":495},[35,36920,1440],{"class":58},[35,36922,3926],{"class":306},[35,36924,33503],{"class":359},[35,36926,1026],{"class":495},[35,36928,713],{"class":58},[35,36930,33510],{"class":359},[35,36932,1026],{"class":495},[35,36934,713],{"class":58},[35,36936,33469],{"class":359},[35,36938,36939],{"class":37,"line":33519},[35,36940,141],{"emptyLinePlaceholder":140},[35,36942,36943],{"class":37,"line":33524},[35,36944,33527],{"class":41},[35,36946,36947,36949,36951,36953,36955,36957,36959],{"class":37,"line":33530},[35,36948,2837],{"class":495},[35,36950,33535],{"class":359},[35,36952,1026],{"class":495},[35,36954,713],{"class":58},[35,36956,1434],{"class":359},[35,36958,1454],{"class":495},[35,36960,33546],{"class":359},[35,36962,36963],{"class":37,"line":33549},[35,36964,33552],{"class":41},[35,36966,36967,36969,36971,36973,36975,36977,36979],{"class":37,"line":33555},[35,36968,33558],{"class":359},[35,36970,538],{"class":58},[35,36972,544],{"class":495},[35,36974,33565],{"class":359},[35,36976,1026],{"class":495},[35,36978,713],{"class":58},[35,36980,33572],{"class":359},[35,36982,36983],{"class":37,"line":33575},[35,36984,33578],{"class":41},[35,36986,36987],{"class":37,"line":33581},[35,36988,33584],{"class":41},[35,36990,36991,36993,36995],{"class":37,"line":33587},[35,36992,33590],{"class":359},[35,36994,544],{"class":495},[35,36996,32640],{"class":359},[35,36998,36999],{"class":37,"line":33597},[35,37000,141],{"emptyLinePlaceholder":140},[35,37002,37003],{"class":37,"line":33602},[35,37004,33605],{"class":41},[35,37006,37007,37009,37011,37013,37015],{"class":37,"line":33608},[35,37008,33611],{"class":359},[35,37010,544],{"class":495},[35,37012,33616],{"class":359},[35,37014,1026],{"class":495},[35,37016,33621],{"class":359},[35,37018,37019,37021,37023,37025,37027,37029,37031,37033,37035,37037,37039,37041,37043,37045,37047,37049,37051,37053],{"class":37,"line":33624},[35,37020,32777],{"class":58},[35,37022,499],{"class":359},[35,37024,33631],{"class":306},[35,37026,1390],{"class":58},[35,37028,33636],{"class":495},[35,37030,1440],{"class":58},[35,37032,1038],{"class":306},[35,37034,1390],{"class":58},[35,37036,33636],{"class":495},[35,37038,1440],{"class":58},[35,37040,33649],{"class":306},[35,37042,33652],{"class":359},[35,37044,33655],{"class":495},[35,37046,1401],{"class":58},[35,37048,33660],{"class":359},[35,37050,823],{"class":495},[35,37052,1401],{"class":58},[35,37054,30823],{"class":359},[35,37056,37057],{"class":37,"line":33669},[35,37058,37059],{"class":41},"    # 选择最优参数并保存\n",[35,37061,37062],{"class":37,"line":33675},[35,37063,37064],{"class":41},"    # 保存最佳模型权重字典\n",[35,37066,37067,37070,37072],{"class":37,"line":33681},[35,37068,37069],{"class":359},"    torch.save(best_model_wts,",[35,37071,33693],{"class":306},[35,37073,505],{"class":359},[35,37075,37076],{"class":37,"line":33687},[35,37077,33713],{"class":41},[35,37079,37080,37082,37084,37086,37088,37090],{"class":37,"line":33698},[35,37081,33719],{"class":359},[35,37083,544],{"class":495},[35,37085,33724],{"class":359},[35,37087,33727],{"class":5550},[35,37089,544],{"class":495},[35,37091,1907],{"class":359},[35,37093,37094,37096,37098,37100],{"class":37,"line":33704},[35,37095,33737],{"class":306},[35,37097,1353],{"class":359},[35,37099,33742],{"class":58},[35,37101,33745],{"class":359},[35,37103,37104,37106],{"class":37,"line":33710},[35,37105,33751],{"class":306},[35,37107,33754],{"class":359},[35,37109,37110,37112],{"class":37,"line":33716},[35,37111,33760],{"class":306},[35,37113,33763],{"class":359},[35,37115,37116,37118],{"class":37,"line":33734},[35,37117,33769],{"class":306},[35,37119,33772],{"class":359},[35,37121,37122,37124],{"class":37,"line":33748},[35,37123,33778],{"class":306},[35,37125,33781],{"class":359},[35,37127,37128],{"class":37,"line":33757},[35,37129,33787],{"class":359},[35,37131,37132],{"class":37,"line":33766},[35,37133,33793],{"class":41},[35,37135,37136,37138],{"class":37,"line":33775},[35,37137,4424],{"class":495},[35,37139,33801],{"class":359},[35,37141,37142],{"class":37,"line":33784},[35,37143,141],{"emptyLinePlaceholder":140},[35,37145,37146],{"class":37,"line":33790},[35,37147,33812],{"class":41},[35,37149,37150,37152,37154],{"class":37,"line":33796},[35,37151,32273],{"class":495},[35,37153,33820],{"class":48},[35,37155,33823],{"class":359},[35,37157,37158],{"class":37,"line":33804},[35,37159,33829],{"class":41},[35,37161,37162,37164,37166,37168,37170,37172,37174,37176],{"class":37,"line":33809},[35,37163,33835],{"class":359},[35,37165,32019],{"class":5550},[35,37167,544],{"class":495},[35,37169,499],{"class":359},[35,37171,992],{"class":58},[35,37173,872],{"class":359},[35,37175,789],{"class":58},[35,37177,30823],{"class":359},[35,37179,37180],{"class":37,"line":33815},[35,37181,33855],{"class":41},[35,37183,37184],{"class":37,"line":33826},[35,37185,33861],{"class":41},[35,37187,37188],{"class":37,"line":33832},[35,37189,33867],{"class":41},[35,37191,37192,37194,37196,37198,37200,37202,37204],{"class":37,"line":33852},[35,37193,32053],{"class":359},[35,37195,713],{"class":58},[35,37197,872],{"class":359},[35,37199,574],{"class":58},[35,37201,872],{"class":359},[35,37203,713],{"class":58},[35,37205,505],{"class":359},[35,37207,37208],{"class":37,"line":33858},[35,37209,33890],{"class":41},[35,37211,37212],{"class":37,"line":33864},[35,37213,33896],{"class":41},[35,37215,37216],{"class":37,"line":33870},[35,37217,33902],{"class":41},[35,37219,37220],{"class":37,"line":33887},[35,37221,33908],{"class":41},[35,37223,37224],{"class":37,"line":33893},[35,37225,33914],{"class":41},[35,37227,37228,37230,37232,37234,37236,37238,37240,37242,37244],{"class":37,"line":33899},[35,37229,33920],{"class":359},[35,37231,33923],{"class":306},[35,37233,33926],{"class":359},[35,37235,33929],{"class":306},[35,37237,872],{"class":359},[35,37239,33934],{"class":5550},[35,37241,544],{"class":495},[35,37243,33939],{"class":306},[35,37245,505],{"class":359},[35,37247,37248,37250,37252,37254,37256,37258,37260,37262,37264],{"class":37,"line":33905},[35,37249,33920],{"class":359},[35,37251,33923],{"class":306},[35,37253,33951],{"class":359},[35,37255,33954],{"class":306},[35,37257,872],{"class":359},[35,37259,33934],{"class":5550},[35,37261,544],{"class":495},[35,37263,33963],{"class":306},[35,37265,505],{"class":359},[35,37267,37268],{"class":37,"line":33911},[35,37269,33971],{"class":41},[35,37271,37272],{"class":37,"line":33917},[35,37273,33977],{"class":359},[35,37275,37276],{"class":37,"line":33944},[35,37277,33983],{"class":41},[35,37279,37280,37282,37284],{"class":37,"line":33968},[35,37281,33989],{"class":359},[35,37283,33992],{"class":306},[35,37285,505],{"class":359},[35,37287,37288,37290,37292],{"class":37,"line":33974},[35,37289,34000],{"class":359},[35,37291,34003],{"class":306},[35,37293,505],{"class":359},[35,37295,37296],{"class":37,"line":33980},[35,37297,34011],{"class":41},[35,37299,37300,37302,37304,37306,37308,37310,37312],{"class":37,"line":33986},[35,37301,32053],{"class":359},[35,37303,713],{"class":58},[35,37305,872],{"class":359},[35,37307,574],{"class":58},[35,37309,872],{"class":359},[35,37311,574],{"class":58},[35,37313,505],{"class":359},[35,37315,37316,37318,37320,37322,37324,37326,37328,37330,37332],{"class":37,"line":33997},[35,37317,33920],{"class":359},[35,37319,33923],{"class":306},[35,37321,34038],{"class":359},[35,37323,33929],{"class":306},[35,37325,872],{"class":359},[35,37327,33934],{"class":5550},[35,37329,544],{"class":495},[35,37331,34049],{"class":306},[35,37333,505],{"class":359},[35,37335,37336,37338,37340,37342,37344,37346,37348,37350,37352],{"class":37,"line":34008},[35,37337,33920],{"class":359},[35,37339,33923],{"class":306},[35,37341,34061],{"class":359},[35,37343,33954],{"class":306},[35,37345,872],{"class":359},[35,37347,33934],{"class":5550},[35,37349,544],{"class":495},[35,37351,34072],{"class":306},[35,37353,505],{"class":359},[35,37355,37356],{"class":37,"line":34014},[35,37357,34080],{"class":41},[35,37359,37360],{"class":37,"line":34031},[35,37361,33977],{"class":359},[35,37363,37364,37366,37368],{"class":37,"line":34054},[35,37365,33989],{"class":359},[35,37367,33923],{"class":306},[35,37369,505],{"class":359},[35,37371,37372,37374,37376],{"class":37,"line":34077},[35,37373,34000],{"class":359},[35,37375,34102],{"class":306},[35,37377,505],{"class":359},[35,37379,37380],{"class":37,"line":34083},[35,37381,34110],{"class":359},[35,37383,37384],{"class":37,"line":34088},[35,37385,141],{"emptyLinePlaceholder":140},[35,37387,37388],{"class":37,"line":34097},[35,37389,34121],{"class":41},[35,37391,37392,37394,37396,37398,37400],{"class":37,"line":34107},[35,37393,1892],{"class":495},[35,37395,31546],{"class":58},[35,37397,3283],{"class":495},[35,37399,31551],{"class":306},[35,37401,4073],{"class":359},[35,37403,37404],{"class":37,"line":34113},[35,37405,34140],{"class":41},[35,37407,37408,37411,37413],{"class":37,"line":34118},[35,37409,37410],{"class":359},"    AlexNet",[35,37412,544],{"class":495},[35,37414,37415],{"class":359},"AlexNet()\n",[35,37417,37418,37420,37422],{"class":37,"line":34124},[35,37419,34157],{"class":359},[35,37421,544],{"class":495},[35,37423,34162],{"class":359},[35,37425,37426,37428,37430,37433,37435,37437,37439],{"class":37,"line":34137},[35,37427,33719],{"class":359},[35,37429,544],{"class":495},[35,37431,37432],{"class":359},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[35,37434,34175],{"class":5550},[35,37436,544],{"class":495},[35,37438,1194],{"class":58},[35,37440,505],{"class":359},[35,37442,37443],{"class":37,"line":34143},[35,37444,34187],{"class":359},[14,37446,37447],{"start":55},[17,37448,34200],{},[25,37450,37452],{"className":30704,"code":37451,"language":30706,"meta":30,"style":30},"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",[32,37453,37454,37460,37470,37480,37490,37494,37504,37514,37525,37529,37533,37537,37545,37561,37571,37587,37597,37611,37615,37625,37635,37645,37651,37655,37659,37667,37671,37687,37695,37699,37703,37711,37719,37723,37727,37731,37735,37741,37745,37755,37763,37771,37775,37779,37783,37791,37795,37811,37815,37819,37823,37835,37839,37851,37855,37859,37871,37875,37885,37889,37893,37905,37909,37917,37921,37925,37933,37937,37945,37949,37953,37957,37961,37965,37981,37989,37993,37997,38045,38051,38055,38065,38073,38081,38085,38089,38093,38097,38105,38109,38125,38129,38137,38145],{"__ignoreMap":30},[35,37455,37456,37458],{"class":37,"line":38},[35,37457,30718],{"class":495},[35,37459,30721],{"class":359},[35,37461,37462,37464,37466,37468],{"class":37,"line":45},[35,37463,30718],{"class":495},[35,37465,31741],{"class":359},[35,37467,31709],{"class":495},[35,37469,31746],{"class":359},[35,37471,37472,37474,37476,37478],{"class":37,"line":55},[35,37473,31063],{"class":495},[35,37475,34228],{"class":359},[35,37477,30718],{"class":495},[35,37479,34233],{"class":359},[35,37481,37482,37484,37486,37488],{"class":37,"line":65},[35,37483,31063],{"class":495},[35,37485,31724],{"class":359},[35,37487,30718],{"class":495},[35,37489,31729],{"class":359},[35,37491,37492],{"class":37,"line":74},[35,37493,34248],{"class":41},[35,37495,37496,37498,37500,37502],{"class":37,"line":83},[35,37497,31063],{"class":495},[35,37499,31694],{"class":359},[35,37501,30718],{"class":495},[35,37503,31699],{"class":359},[35,37505,37506,37508,37510,37512],{"class":37,"line":92},[35,37507,31063],{"class":495},[35,37509,32240],{"class":359},[35,37511,30718],{"class":495},[35,37513,35883],{"class":359},[35,37515,37516,37518,37521,37523],{"class":37,"line":101},[35,37517,31063],{"class":495},[35,37519,37520],{"class":359}," 练习.AlexNet.model ",[35,37522,30718],{"class":495},[35,37524,35883],{"class":359},[35,37526,37527],{"class":37,"line":110},[35,37528,141],{"emptyLinePlaceholder":140},[35,37530,37531],{"class":37,"line":119},[35,37532,141],{"emptyLinePlaceholder":140},[35,37534,37535],{"class":37,"line":128},[35,37536,34277],{"class":41},[35,37538,37539,37541,37543],{"class":37,"line":137},[35,37540,32273],{"class":495},[35,37542,34284],{"class":48},[35,37544,32279],{"class":359},[35,37546,37547,37549,37551,37553,37555,37557,37559],{"class":37,"line":144},[35,37548,34291],{"class":359},[35,37550,544],{"class":495},[35,37552,31781],{"class":359},[35,37554,31784],{"class":5550},[35,37556,544],{"class":495},[35,37558,31789],{"class":306},[35,37560,31792],{"class":359},[35,37562,37563,37565,37567,37569],{"class":37,"line":150},[35,37564,34308],{"class":5550},[35,37566,544],{"class":495},[35,37568,34313],{"class":58},[35,37570,31792],{"class":359},[35,37572,37573,37575,37577,37579,37581,37583,37585],{"class":37,"line":159},[35,37574,34320],{"class":5550},[35,37576,544],{"class":495},[35,37578,31819],{"class":359},[35,37580,31822],{"class":5550},[35,37582,544],{"class":495},[35,37584,35775],{"class":58},[35,37586,31830],{"class":359},[35,37588,37589,37591,37593,37595],{"class":37,"line":168},[35,37590,34337],{"class":5550},[35,37592,544],{"class":495},[35,37594,31802],{"class":58},[35,37596,505],{"class":359},[35,37598,37599,37601,37603,37605,37607,37609],{"class":37,"line":177},[35,37600,34348],{"class":359},[35,37602,544],{"class":495},[35,37604,31860],{"class":359},[35,37606,31863],{"class":5550},[35,37608,544],{"class":495},[35,37610,34359],{"class":359},[35,37612,37613],{"class":37,"line":182},[35,37614,34364],{"class":41},[35,37616,37617,37619,37621,37623],{"class":37,"line":188},[35,37618,34369],{"class":5550},[35,37620,544],{"class":495},[35,37622,713],{"class":58},[35,37624,31792],{"class":359},[35,37626,37627,37629,37631,37633],{"class":37,"line":197},[35,37628,34380],{"class":5550},[35,37630,544],{"class":495},[35,37632,31802],{"class":58},[35,37634,31792],{"class":359},[35,37636,37637,37639,37641,37643],{"class":37,"line":206},[35,37638,34391],{"class":5550},[35,37640,544],{"class":495},[35,37642,687],{"class":58},[35,37644,505],{"class":359},[35,37646,37647,37649],{"class":37,"line":215},[35,37648,4424],{"class":495},[35,37650,34404],{"class":359},[35,37652,37653],{"class":37,"line":224},[35,37654,141],{"emptyLinePlaceholder":140},[35,37656,37657],{"class":37,"line":233},[35,37658,34413],{"class":41},[35,37660,37661,37663,37665],{"class":37,"line":238},[35,37662,32273],{"class":495},[35,37664,34420],{"class":48},[35,37666,34423],{"class":359},[35,37668,37669],{"class":37,"line":244},[35,37670,34428],{"class":41},[35,37672,37673,37675,37677,37679,37681,37683,37685],{"class":37,"line":253},[35,37674,31563],{"class":359},[35,37676,544],{"class":495},[35,37678,31570],{"class":306},[35,37680,2054],{"class":495},[35,37682,31575],{"class":359},[35,37684,2051],{"class":495},[35,37686,34445],{"class":306},[35,37688,37689,37691,37693],{"class":37,"line":262},[35,37690,31615],{"class":359},[35,37692,544],{"class":495},[35,37694,32615],{"class":359},[35,37696,37697],{"class":37,"line":271},[35,37698,141],{"emptyLinePlaceholder":140},[35,37700,37701],{"class":37,"line":280},[35,37702,34462],{"class":41},[35,37704,37705,37707,37709],{"class":37,"line":289},[35,37706,34467],{"class":359},[35,37708,544],{"class":495},[35,37710,32668],{"class":58},[35,37712,37713,37715,37717],{"class":37,"line":294},[35,37714,34476],{"class":359},[35,37716,544],{"class":495},[35,37718,3419],{"class":58},[35,37720,37721],{"class":37,"line":300},[35,37722,141],{"emptyLinePlaceholder":140},[35,37724,37725],{"class":37,"line":313},[35,37726,34489],{"class":41},[35,37728,37729],{"class":37,"line":324},[35,37730,34494],{"class":41},[35,37732,37733],{"class":37,"line":2955},[35,37734,34499],{"class":41},[35,37736,37737,37739],{"class":37,"line":8282},[35,37738,34504],{"class":495},[35,37740,33210],{"class":359},[35,37742,37743],{"class":37,"line":8306},[35,37744,34511],{"class":41},[35,37746,37747,37749,37751,37753],{"class":37,"line":8311},[35,37748,3737],{"class":495},[35,37750,34518],{"class":359},[35,37752,26374],{"class":495},[35,37754,34523],{"class":359},[35,37756,37757,37759,37761],{"class":37,"line":8317},[35,37758,34528],{"class":359},[35,37760,544],{"class":495},[35,37762,34533],{"class":359},[35,37764,37765,37767,37769],{"class":37,"line":8344},[35,37766,34538],{"class":359},[35,37768,544],{"class":495},[35,37770,34543],{"class":359},[35,37772,37773],{"class":37,"line":8349},[35,37774,34548],{"class":41},[35,37776,37777],{"class":37,"line":8355},[35,37778,33201],{"class":359},[35,37780,37781],{"class":37,"line":8367},[35,37782,34557],{"class":41},[35,37784,37785,37787,37789],{"class":37,"line":8379},[35,37786,32986],{"class":359},[35,37788,544],{"class":495},[35,37790,34566],{"class":359},[35,37792,37793],{"class":37,"line":8391},[35,37794,34571],{"class":41},[35,37796,37797,37799,37801,37803,37805,37807,37809],{"class":37,"line":10050},[35,37798,33003],{"class":359},[35,37800,544],{"class":495},[35,37802,33008],{"class":359},[35,37804,33011],{"class":5550},[35,37806,544],{"class":495},[35,37808,713],{"class":58},[35,37810,505],{"class":359},[35,37812,37813],{"class":37,"line":10075},[35,37814,34592],{"class":41},[35,37816,37817],{"class":37,"line":10098},[35,37818,34597],{"class":41},[35,37820,37821],{"class":37,"line":10122},[35,37822,34602],{"class":41},[35,37824,37825,37827,37829,37831,37833],{"class":37,"line":10127},[35,37826,34607],{"class":359},[35,37828,9811],{"class":495},[35,37830,33113],{"class":359},[35,37832,3283],{"class":495},[35,37834,34616],{"class":359},[35,37836,37837],{"class":37,"line":10132},[35,37838,34621],{"class":41},[35,37840,37841,37843,37845,37847,37849],{"class":37,"line":10137},[35,37842,34626],{"class":359},[35,37844,9811],{"class":495},[35,37846,34631],{"class":359},[35,37848,687],{"class":58},[35,37850,505],{"class":359},[35,37852,37853],{"class":37,"line":10146},[35,37854,141],{"emptyLinePlaceholder":140},[35,37856,37857],{"class":37,"line":10151},[35,37858,34644],{"class":41},[35,37860,37861,37863,37865,37867,37869],{"class":37,"line":10157},[35,37862,34649],{"class":359},[35,37864,544],{"class":495},[35,37866,34654],{"class":359},[35,37868,1078],{"class":495},[35,37870,34659],{"class":359},[35,37872,37873],{"class":37,"line":10178},[35,37874,34664],{"class":41},[35,37876,37877,37879,37881,37883],{"class":37,"line":10184},[35,37878,32777],{"class":58},[35,37880,499],{"class":359},[35,37882,34673],{"class":306},[35,37884,34676],{"class":359},[35,37886,37887],{"class":37,"line":10198},[35,37888,141],{"emptyLinePlaceholder":140},[35,37890,37891],{"class":37,"line":10204},[35,37892,34685],{"class":41},[35,37894,37895,37897,37899,37901,37903],{"class":37,"line":10231},[35,37896,1892],{"class":495},[35,37898,31546],{"class":58},[35,37900,3283],{"class":495},[35,37902,31551],{"class":306},[35,37904,4073],{"class":359},[35,37906,37907],{"class":37,"line":10240},[35,37908,34702],{"class":41},[35,37910,37911,37913,37915],{"class":37,"line":10246},[35,37912,31615],{"class":359},[35,37914,544],{"class":495},[35,37916,37415],{"class":359},[35,37918,37919],{"class":37,"line":10254},[35,37920,34715],{"class":41},[35,37922,37923],{"class":37,"line":10259},[35,37924,34720],{"class":41},[35,37926,37927,37929,37931],{"class":37,"line":16938},[35,37928,34725],{"class":359},[35,37930,34728],{"class":306},[35,37932,30823],{"class":359},[35,37934,37935],{"class":37,"line":16944},[35,37936,34735],{"class":41},[35,37938,37939,37941,37943],{"class":37,"line":16967},[35,37940,34348],{"class":359},[35,37942,544],{"class":495},[35,37944,34744],{"class":359},[35,37946,37947],{"class":37,"line":16973},[35,37948,34749],{"class":41},[35,37950,37951],{"class":37,"line":16996},[35,37952,34754],{"class":359},[35,37954,37955],{"class":37,"line":17010},[35,37956,141],{"emptyLinePlaceholder":140},[35,37958,37959],{"class":37,"line":17030},[35,37960,34763],{"class":41},[35,37962,37963],{"class":37,"line":17036},[35,37964,34768],{"class":41},[35,37966,37967,37969,37971,37973,37975,37977,37979],{"class":37,"line":17047},[35,37968,31563],{"class":359},[35,37970,544],{"class":495},[35,37972,31570],{"class":306},[35,37974,2054],{"class":495},[35,37976,31575],{"class":359},[35,37978,2051],{"class":495},[35,37980,34445],{"class":306},[35,37982,37983,37985,37987],{"class":37,"line":17070},[35,37984,31615],{"class":359},[35,37986,544],{"class":495},[35,37988,32615],{"class":359},[35,37990,37991],{"class":37,"line":17092},[35,37992,34797],{"class":41},[35,37994,37995],{"class":37,"line":17097},[35,37996,34802],{"class":41},[35,37998,37999,38001,38003,38005,38007,38009,38011,38013,38015,38017,38019,38021,38023,38025,38027,38029,38031,38033,38035,38037,38039,38041,38043],{"class":37,"line":17103},[35,38000,34807],{"class":359},[35,38002,544],{"class":495},[35,38004,1384],{"class":359},[35,38006,34814],{"class":306},[35,38008,872],{"class":359},[35,38010,34819],{"class":306},[35,38012,872],{"class":359},[35,38014,34824],{"class":306},[35,38016,872],{"class":359},[35,38018,34829],{"class":306},[35,38020,872],{"class":359},[35,38022,34834],{"class":306},[35,38024,872],{"class":359},[35,38026,34839],{"class":306},[35,38028,872],{"class":359},[35,38030,34844],{"class":306},[35,38032,872],{"class":359},[35,38034,34849],{"class":306},[35,38036,872],{"class":359},[35,38038,34854],{"class":306},[35,38040,872],{"class":359},[35,38042,34859],{"class":306},[35,38044,33572],{"class":359},[35,38046,38047,38049],{"class":37,"line":17117},[35,38048,34504],{"class":495},[35,38050,33210],{"class":359},[35,38052,38053],{"class":37,"line":17130},[35,38054,34872],{"class":41},[35,38056,38057,38059,38061,38063],{"class":37,"line":17135},[35,38058,3737],{"class":495},[35,38060,34879],{"class":359},[35,38062,26374],{"class":495},[35,38064,34523],{"class":359},[35,38066,38067,38069,38071],{"class":37,"line":17149},[35,38068,32936],{"class":359},[35,38070,544],{"class":495},[35,38072,32941],{"class":359},[35,38074,38075,38077,38079],{"class":37,"line":17154},[35,38076,32951],{"class":359},[35,38078,544],{"class":495},[35,38080,32956],{"class":359},[35,38082,38083],{"class":37,"line":17160},[35,38084,141],{"emptyLinePlaceholder":140},[35,38086,38087],{"class":37,"line":17165},[35,38088,34908],{"class":41},[35,38090,38091],{"class":37,"line":17179},[35,38092,33201],{"class":359},[35,38094,38095],{"class":37,"line":17184},[35,38096,34917],{"class":41},[35,38098,38099,38101,38103],{"class":37,"line":17189},[35,38100,32986],{"class":359},[35,38102,544],{"class":495},[35,38104,32991],{"class":359},[35,38106,38107],{"class":37,"line":17203},[35,38108,34930],{"class":41},[35,38110,38111,38113,38115,38117,38119,38121,38123],{"class":37,"line":17215},[35,38112,33003],{"class":359},[35,38114,544],{"class":495},[35,38116,33008],{"class":359},[35,38118,33011],{"class":5550},[35,38120,544],{"class":495},[35,38122,713],{"class":58},[35,38124,505],{"class":359},[35,38126,38127],{"class":37,"line":17220},[35,38128,34951],{"class":41},[35,38130,38131,38133,38135],{"class":37,"line":17233},[35,38132,34956],{"class":359},[35,38134,544],{"class":495},[35,38136,34961],{"class":359},[35,38138,38139,38141,38143],{"class":37,"line":17238},[35,38140,34966],{"class":359},[35,38142,544],{"class":495},[35,38144,34971],{"class":359},[35,38146,38147,38149,38151,38153,38155,38157,38159,38161],{"class":37,"line":17243},[35,38148,34976],{"class":58},[35,38150,499],{"class":359},[35,38152,34981],{"class":306},[35,38154,34984],{"class":359},[35,38156,34987],{"class":306},[35,38158,872],{"class":359},[35,38160,34992],{"class":306},[35,38162,34995],{"class":359},[465,38164,38166],{"id":38165},"_22vgg","2.2.VGG",[22332,38168,38170],{"id":38169},"_221原理","2.2.1.原理",[21,38172,38173],{},[1823,38174],{"alt":30,"src":38175},"\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",[21,38177,38178],{},[1823,38179],{"alt":30,"src":38180},"\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",[21,38182,38183],{},[1823,38184],{"alt":30,"src":38185},"\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",[21,38187,38188],{},"参数详细描述：",[21,38190,38191],{},[1823,38192],{"alt":30,"src":38193},"\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",[21,38195,38196],{},[1823,38197],{"alt":30,"src":38198},"\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",[21,38200,38201],{},[1823,38202],{"alt":30,"src":38203},"\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",[21,38205,38206],{},[1823,38207],{"alt":30,"src":38208},"\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",[21,38210,38211],{},[1823,38212],{"alt":30,"src":38213},"\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",[22332,38215,38217],{"id":38216},"_222代码实现","2.2.2.代码实现",[14,38219,38220],{},[17,38221,38222],{},"网络搭建",[25,38224,38226],{"className":30704,"code":38225,"language":30706,"meta":30,"style":30},"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",[32,38227,38228,38234,38246,38256,38266,38270,38287,38295,38314,38319,38324,38336,38374,38379,38415,38419,38448,38453,38458,38469,38505,38509,38545,38549,38577,38581,38586,38597,38633,38637,38673,38677,38713,38717,38745,38749,38754,38765,38802,38806,38842,38846,38882,38886,38914,38918,38923,38934,38970,38974,39010,39014,39050,39054,39082,39086,39091,39102,39107,39112,39117,39138,39142,39154,39158,39170,39174,39178,39183,39188,39203,39208,39218,39223,39238,39243,39262,39267,39276,39281,39291,39296,39301,39315,39320,39334,39342,39346,39350,39358,39369,39380,39391,39402,39413,39424,39430,39434,39439,39452,39472,39478,39487],{"__ignoreMap":30},[35,38229,38230,38232],{"class":37,"line":38},[35,38231,30718],{"class":495},[35,38233,30721],{"class":359},[35,38235,38236,38238,38241,38243],{"class":37,"line":45},[35,38237,31063],{"class":495},[35,38239,38240],{"class":359}," sympy.core.sympify ",[35,38242,30718],{"class":495},[35,38244,38245],{"class":359}," kernS\n",[35,38247,38248,38250,38252,38254],{"class":37,"line":55},[35,38249,31063],{"class":495},[35,38251,31066],{"class":359},[35,38253,30718],{"class":495},[35,38255,31071],{"class":359},[35,38257,38258,38260,38262,38264],{"class":37,"line":65},[35,38259,31063],{"class":495},[35,38261,31083],{"class":359},[35,38263,30718],{"class":495},[35,38265,31088],{"class":359},[35,38267,38268],{"class":37,"line":74},[35,38269,141],{"emptyLinePlaceholder":140},[35,38271,38272,38274,38277,38279,38281,38283,38285],{"class":37,"line":83},[35,38273,15028],{"class":495},[35,38275,38276],{"class":48}," VGG16",[35,38278,499],{"class":359},[35,38280,31104],{"class":48},[35,38282,1052],{"class":359},[35,38284,31109],{"class":48},[35,38286,31112],{"class":359},[35,38288,38289,38291,38293],{"class":37,"line":92},[35,38290,31127],{"class":495},[35,38292,31130],{"class":58},[35,38294,31133],{"class":359},[35,38296,38297,38299,38301,38304,38306,38308,38310,38312],{"class":37,"line":101},[35,38298,31143],{"class":58},[35,38300,499],{"class":359},[35,38302,38303],{"class":58},"VGG16",[35,38305,12769],{"class":359},[35,38307,31149],{"class":58},[35,38309,31152],{"class":359},[35,38311,31155],{"class":58},[35,38313,2317],{"class":359},[35,38315,38316],{"class":37,"line":110},[35,38317,38318],{"class":41},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[35,38320,38321],{"class":37,"line":119},[35,38322,38323],{"class":41},"        # 这里用的是灰度图\n",[35,38325,38326,38328,38331,38333],{"class":37,"line":128},[35,38327,31171],{"class":58},[35,38329,38330],{"class":359},".block1",[35,38332,544],{"class":495},[35,38334,38335],{"class":359},"nn.Sequential(\n",[35,38337,38338,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371],{"class":37,"line":137},[35,38339,38340],{"class":359},"            nn.Conv2d(",[35,38342,31182],{"class":5550},[35,38344,544],{"class":495},[35,38346,713],{"class":58},[35,38348,872],{"class":359},[35,38350,31191],{"class":5550},[35,38352,544],{"class":495},[35,38354,699],{"class":58},[35,38356,872],{"class":359},[35,38358,31200],{"class":5550},[35,38360,544],{"class":495},[35,38362,568],{"class":58},[35,38364,872],{"class":359},[35,38366,31209],{"class":5550},[35,38368,544],{"class":495},[35,38370,713],{"class":58},[35,38372,38373],{"class":359},"),\n",[35,38375,38376],{"class":37,"line":144},[35,38377,38378],{"class":359},"            nn.ReLU(),\n",[35,38380,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413],{"class":37,"line":150},[35,38382,38340],{"class":359},[35,38384,31182],{"class":5550},[35,38386,544],{"class":495},[35,38388,699],{"class":58},[35,38390,872],{"class":359},[35,38392,31191],{"class":5550},[35,38394,544],{"class":495},[35,38396,699],{"class":58},[35,38398,872],{"class":359},[35,38400,31200],{"class":5550},[35,38402,544],{"class":495},[35,38404,568],{"class":58},[35,38406,872],{"class":359},[35,38408,31209],{"class":5550},[35,38410,544],{"class":495},[35,38412,713],{"class":58},[35,38414,38373],{"class":359},[35,38416,38417],{"class":37,"line":159},[35,38418,38378],{"class":359},[35,38420,38421,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446],{"class":37,"line":168},[35,38422,38423],{"class":359},"            nn.MaxPool2d(",[35,38425,31200],{"class":5550},[35,38427,544],{"class":495},[35,38429,574],{"class":58},[35,38431,872],{"class":359},[35,38433,31255],{"class":5550},[35,38435,544],{"class":495},[35,38437,574],{"class":58},[35,38439,872],{"class":359},[35,38441,31209],{"class":5550},[35,38443,544],{"class":495},[35,38445,687],{"class":58},[35,38447,505],{"class":359},[35,38449,38450],{"class":37,"line":177},[35,38451,38452],{"class":359},"        )\n",[35,38454,38455],{"class":37,"line":182},[35,38456,38457],{"class":41},"        # 第二层\n",[35,38459,38460,38462,38465,38467],{"class":37,"line":188},[35,38461,31171],{"class":58},[35,38463,38464],{"class":359},".block2",[35,38466,544],{"class":495},[35,38468,38335],{"class":359},[35,38470,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503],{"class":37,"line":197},[35,38472,38340],{"class":359},[35,38474,31182],{"class":5550},[35,38476,544],{"class":495},[35,38478,699],{"class":58},[35,38480,872],{"class":359},[35,38482,31191],{"class":5550},[35,38484,544],{"class":495},[35,38486,32396],{"class":58},[35,38488,872],{"class":359},[35,38490,31200],{"class":5550},[35,38492,544],{"class":495},[35,38494,568],{"class":58},[35,38496,872],{"class":359},[35,38498,31209],{"class":5550},[35,38500,544],{"class":495},[35,38502,713],{"class":58},[35,38504,38373],{"class":359},[35,38506,38507],{"class":37,"line":206},[35,38508,38378],{"class":359},[35,38510,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543],{"class":37,"line":215},[35,38512,38340],{"class":359},[35,38514,31182],{"class":5550},[35,38516,544],{"class":495},[35,38518,32396],{"class":58},[35,38520,872],{"class":359},[35,38522,31191],{"class":5550},[35,38524,544],{"class":495},[35,38526,32396],{"class":58},[35,38528,872],{"class":359},[35,38530,31200],{"class":5550},[35,38532,544],{"class":495},[35,38534,568],{"class":58},[35,38536,872],{"class":359},[35,38538,31209],{"class":5550},[35,38540,544],{"class":495},[35,38542,713],{"class":58},[35,38544,38373],{"class":359},[35,38546,38547],{"class":37,"line":224},[35,38548,38378],{"class":359},[35,38550,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575],{"class":37,"line":233},[35,38552,38423],{"class":359},[35,38554,31200],{"class":5550},[35,38556,544],{"class":495},[35,38558,574],{"class":58},[35,38560,872],{"class":359},[35,38562,31255],{"class":5550},[35,38564,544],{"class":495},[35,38566,574],{"class":58},[35,38568,872],{"class":359},[35,38570,31209],{"class":5550},[35,38572,544],{"class":495},[35,38574,687],{"class":58},[35,38576,505],{"class":359},[35,38578,38579],{"class":37,"line":238},[35,38580,38452],{"class":359},[35,38582,38583],{"class":37,"line":244},[35,38584,38585],{"class":41},"        # 第三层\n",[35,38587,38588,38590,38593,38595],{"class":37,"line":253},[35,38589,31171],{"class":58},[35,38591,38592],{"class":359},".block3",[35,38594,544],{"class":495},[35,38596,38335],{"class":359},[35,38598,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631],{"class":37,"line":262},[35,38600,38340],{"class":359},[35,38602,31182],{"class":5550},[35,38604,544],{"class":495},[35,38606,32396],{"class":58},[35,38608,872],{"class":359},[35,38610,31191],{"class":5550},[35,38612,544],{"class":495},[35,38614,35196],{"class":58},[35,38616,872],{"class":359},[35,38618,31200],{"class":5550},[35,38620,544],{"class":495},[35,38622,568],{"class":58},[35,38624,872],{"class":359},[35,38626,31209],{"class":5550},[35,38628,544],{"class":495},[35,38630,713],{"class":58},[35,38632,38373],{"class":359},[35,38634,38635],{"class":37,"line":271},[35,38636,38378],{"class":359},[35,38638,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671],{"class":37,"line":280},[35,38640,38340],{"class":359},[35,38642,31182],{"class":5550},[35,38644,544],{"class":495},[35,38646,35196],{"class":58},[35,38648,872],{"class":359},[35,38650,31191],{"class":5550},[35,38652,544],{"class":495},[35,38654,35196],{"class":58},[35,38656,872],{"class":359},[35,38658,31200],{"class":5550},[35,38660,544],{"class":495},[35,38662,568],{"class":58},[35,38664,872],{"class":359},[35,38666,31209],{"class":5550},[35,38668,544],{"class":495},[35,38670,713],{"class":58},[35,38672,38373],{"class":359},[35,38674,38675],{"class":37,"line":289},[35,38676,38378],{"class":359},[35,38678,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":37,"line":294},[35,38680,38340],{"class":359},[35,38682,31182],{"class":5550},[35,38684,544],{"class":495},[35,38686,35196],{"class":58},[35,38688,872],{"class":359},[35,38690,31191],{"class":5550},[35,38692,544],{"class":495},[35,38694,35196],{"class":58},[35,38696,872],{"class":359},[35,38698,31200],{"class":5550},[35,38700,544],{"class":495},[35,38702,568],{"class":58},[35,38704,872],{"class":359},[35,38706,31209],{"class":5550},[35,38708,544],{"class":495},[35,38710,713],{"class":58},[35,38712,38373],{"class":359},[35,38714,38715],{"class":37,"line":300},[35,38716,38378],{"class":359},[35,38718,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743],{"class":37,"line":313},[35,38720,38423],{"class":359},[35,38722,31200],{"class":5550},[35,38724,544],{"class":495},[35,38726,574],{"class":58},[35,38728,872],{"class":359},[35,38730,31255],{"class":5550},[35,38732,544],{"class":495},[35,38734,574],{"class":58},[35,38736,872],{"class":359},[35,38738,31209],{"class":5550},[35,38740,544],{"class":495},[35,38742,687],{"class":58},[35,38744,505],{"class":359},[35,38746,38747],{"class":37,"line":324},[35,38748,38452],{"class":359},[35,38750,38751],{"class":37,"line":2955},[35,38752,38753],{"class":41},"        # 第四层\n",[35,38755,38756,38758,38761,38763],{"class":37,"line":8282},[35,38757,31171],{"class":58},[35,38759,38760],{"class":359},".block4",[35,38762,544],{"class":495},[35,38764,38335],{"class":359},[35,38766,38767,38769,38771,38773,38775,38777,38779,38781,38784,38786,38788,38790,38792,38794,38796,38798,38800],{"class":37,"line":8306},[35,38768,38340],{"class":359},[35,38770,31182],{"class":5550},[35,38772,544],{"class":495},[35,38774,35196],{"class":58},[35,38776,872],{"class":359},[35,38778,31191],{"class":5550},[35,38780,544],{"class":495},[35,38782,38783],{"class":58},"512",[35,38785,872],{"class":359},[35,38787,31200],{"class":5550},[35,38789,544],{"class":495},[35,38791,568],{"class":58},[35,38793,872],{"class":359},[35,38795,31209],{"class":5550},[35,38797,544],{"class":495},[35,38799,713],{"class":58},[35,38801,38373],{"class":359},[35,38803,38804],{"class":37,"line":8311},[35,38805,38378],{"class":359},[35,38807,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840],{"class":37,"line":8317},[35,38809,38340],{"class":359},[35,38811,31182],{"class":5550},[35,38813,544],{"class":495},[35,38815,38783],{"class":58},[35,38817,872],{"class":359},[35,38819,31191],{"class":5550},[35,38821,544],{"class":495},[35,38823,38783],{"class":58},[35,38825,872],{"class":359},[35,38827,31200],{"class":5550},[35,38829,544],{"class":495},[35,38831,568],{"class":58},[35,38833,872],{"class":359},[35,38835,31209],{"class":5550},[35,38837,544],{"class":495},[35,38839,713],{"class":58},[35,38841,38373],{"class":359},[35,38843,38844],{"class":37,"line":8344},[35,38845,38378],{"class":359},[35,38847,38848,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880],{"class":37,"line":8349},[35,38849,38340],{"class":359},[35,38851,31182],{"class":5550},[35,38853,544],{"class":495},[35,38855,38783],{"class":58},[35,38857,872],{"class":359},[35,38859,31191],{"class":5550},[35,38861,544],{"class":495},[35,38863,38783],{"class":58},[35,38865,872],{"class":359},[35,38867,31200],{"class":5550},[35,38869,544],{"class":495},[35,38871,568],{"class":58},[35,38873,872],{"class":359},[35,38875,31209],{"class":5550},[35,38877,544],{"class":495},[35,38879,713],{"class":58},[35,38881,38373],{"class":359},[35,38883,38884],{"class":37,"line":8355},[35,38885,38378],{"class":359},[35,38887,38888,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912],{"class":37,"line":8367},[35,38889,38423],{"class":359},[35,38891,31200],{"class":5550},[35,38893,544],{"class":495},[35,38895,574],{"class":58},[35,38897,872],{"class":359},[35,38899,31255],{"class":5550},[35,38901,544],{"class":495},[35,38903,574],{"class":58},[35,38905,872],{"class":359},[35,38907,31209],{"class":5550},[35,38909,544],{"class":495},[35,38911,687],{"class":58},[35,38913,505],{"class":359},[35,38915,38916],{"class":37,"line":8379},[35,38917,38452],{"class":359},[35,38919,38920],{"class":37,"line":8391},[35,38921,38922],{"class":41},"        # 第五层\n",[35,38924,38925,38927,38930,38932],{"class":37,"line":10050},[35,38926,31171],{"class":58},[35,38928,38929],{"class":359},".block5",[35,38931,544],{"class":495},[35,38933,38335],{"class":359},[35,38935,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968],{"class":37,"line":10075},[35,38937,38340],{"class":359},[35,38939,31182],{"class":5550},[35,38941,544],{"class":495},[35,38943,38783],{"class":58},[35,38945,872],{"class":359},[35,38947,31191],{"class":5550},[35,38949,544],{"class":495},[35,38951,38783],{"class":58},[35,38953,872],{"class":359},[35,38955,31200],{"class":5550},[35,38957,544],{"class":495},[35,38959,568],{"class":58},[35,38961,872],{"class":359},[35,38963,31209],{"class":5550},[35,38965,544],{"class":495},[35,38967,713],{"class":58},[35,38969,38373],{"class":359},[35,38971,38972],{"class":37,"line":10098},[35,38973,38378],{"class":359},[35,38975,38976,38978,38980,38982,38984,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008],{"class":37,"line":10122},[35,38977,38340],{"class":359},[35,38979,31182],{"class":5550},[35,38981,544],{"class":495},[35,38983,38783],{"class":58},[35,38985,872],{"class":359},[35,38987,31191],{"class":5550},[35,38989,544],{"class":495},[35,38991,38783],{"class":58},[35,38993,872],{"class":359},[35,38995,31200],{"class":5550},[35,38997,544],{"class":495},[35,38999,568],{"class":58},[35,39001,872],{"class":359},[35,39003,31209],{"class":5550},[35,39005,544],{"class":495},[35,39007,713],{"class":58},[35,39009,38373],{"class":359},[35,39011,39012],{"class":37,"line":10127},[35,39013,38378],{"class":359},[35,39015,39016,39018,39020,39022,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048],{"class":37,"line":10132},[35,39017,38340],{"class":359},[35,39019,31182],{"class":5550},[35,39021,544],{"class":495},[35,39023,38783],{"class":58},[35,39025,872],{"class":359},[35,39027,31191],{"class":5550},[35,39029,544],{"class":495},[35,39031,38783],{"class":58},[35,39033,872],{"class":359},[35,39035,31200],{"class":5550},[35,39037,544],{"class":495},[35,39039,568],{"class":58},[35,39041,872],{"class":359},[35,39043,31209],{"class":5550},[35,39045,544],{"class":495},[35,39047,713],{"class":58},[35,39049,38373],{"class":359},[35,39051,39052],{"class":37,"line":10137},[35,39053,38378],{"class":359},[35,39055,39056,39058,39060,39062,39064,39066,39068,39070,39072,39074,39076,39078,39080],{"class":37,"line":10146},[35,39057,38423],{"class":359},[35,39059,31200],{"class":5550},[35,39061,544],{"class":495},[35,39063,574],{"class":58},[35,39065,872],{"class":359},[35,39067,31255],{"class":5550},[35,39069,544],{"class":495},[35,39071,574],{"class":58},[35,39073,872],{"class":359},[35,39075,31209],{"class":5550},[35,39077,544],{"class":495},[35,39079,687],{"class":58},[35,39081,505],{"class":359},[35,39083,39084],{"class":37,"line":10151},[35,39085,38452],{"class":359},[35,39087,39088],{"class":37,"line":10157},[35,39089,39090],{"class":41},"        # 全连接层\n",[35,39092,39093,39095,39098,39100],{"class":37,"line":10178},[35,39094,31171],{"class":58},[35,39096,39097],{"class":359},".block6",[35,39099,544],{"class":495},[35,39101,38335],{"class":359},[35,39103,39104],{"class":37,"line":10184},[35,39105,39106],{"class":41},"            # 平展操作\n",[35,39108,39109],{"class":37,"line":10198},[35,39110,39111],{"class":41},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[35,39113,39114],{"class":37,"line":10204},[35,39115,39116],{"class":359},"            nn.Flatten(),\n",[35,39118,39119,39122,39124,39126,39128,39130,39132,39134,39136],{"class":37,"line":10231},[35,39120,39121],{"class":359},"            nn.Linear(",[35,39123,863],{"class":58},[35,39125,949],{"class":495},[35,39127,863],{"class":58},[35,39129,949],{"class":495},[35,39131,38783],{"class":58},[35,39133,872],{"class":359},[35,39135,35196],{"class":58},[35,39137,38373],{"class":359},[35,39139,39140],{"class":37,"line":10240},[35,39141,38378],{"class":359},[35,39143,39144,39146,39148,39150,39152],{"class":37,"line":10246},[35,39145,39121],{"class":359},[35,39147,35196],{"class":58},[35,39149,872],{"class":359},[35,39151,32396],{"class":58},[35,39153,38373],{"class":359},[35,39155,39156],{"class":37,"line":10254},[35,39157,38378],{"class":359},[35,39159,39160,39162,39164,39166,39168],{"class":37,"line":10259},[35,39161,39121],{"class":359},[35,39163,32396],{"class":58},[35,39165,872],{"class":359},[35,39167,940],{"class":58},[35,39169,505],{"class":359},[35,39171,39172],{"class":37,"line":16938},[35,39173,38452],{"class":359},[35,39175,39176],{"class":37,"line":16944},[35,39177,141],{"emptyLinePlaceholder":140},[35,39179,39180],{"class":37,"line":16967},[35,39181,39182],{"class":41},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[35,39184,39185],{"class":37,"line":16973},[35,39186,39187],{"class":41},"        # 循环遍历模型\n",[35,39189,39190,39192,39195,39197,39200],{"class":37,"line":16996},[35,39191,3737],{"class":495},[35,39193,39194],{"class":359}," m ",[35,39196,26374],{"class":495},[35,39198,39199],{"class":58}," self",[35,39201,39202],{"class":359},".modules():\n",[35,39204,39205],{"class":37,"line":17010},[35,39206,39207],{"class":41},"            # print(m)\n",[35,39209,39210,39212,39215],{"class":37,"line":17030},[35,39211,4976],{"class":495},[35,39213,39214],{"class":58}," isinstance",[35,39216,39217],{"class":359},"(m,nn.Conv2d):\n",[35,39219,39220],{"class":37,"line":17036},[35,39221,39222],{"class":41},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[35,39224,39225,39228,39231,39233,39236],{"class":37,"line":17047},[35,39226,39227],{"class":359},"                nn.init.kaiming_normal_(m.weight,",[35,39229,39230],{"class":5550},"nonlinearity",[35,39232,544],{"class":495},[35,39234,39235],{"class":306},"'relu'",[35,39237,505],{"class":359},[35,39239,39240],{"class":37,"line":17070},[35,39241,39242],{"class":41},"                # 判断b参数是否存在\n",[35,39244,39245,39248,39251,39254,39257,39260],{"class":37,"line":17092},[35,39246,39247],{"class":495},"                if",[35,39249,39250],{"class":359}," m.bias ",[35,39252,39253],{"class":495},"is",[35,39255,39256],{"class":495}," not",[35,39258,39259],{"class":58}," None",[35,39261,4073],{"class":359},[35,39263,39264],{"class":37,"line":17097},[35,39265,39266],{"class":41},"                    # 如果参数不存在的化初始化b=0\n",[35,39268,39269,39272,39274],{"class":37,"line":17103},[35,39270,39271],{"class":359},"                    nn.init.constant_(m.bias,",[35,39273,687],{"class":58},[35,39275,505],{"class":359},[35,39277,39278],{"class":37,"line":17117},[35,39279,39280],{"class":41},"            # 全连接层初始化\n",[35,39282,39283,39286,39288],{"class":37,"line":17130},[35,39284,39285],{"class":495},"            elif",[35,39287,39214],{"class":58},[35,39289,39290],{"class":359},"(m,nn.Linear):\n",[35,39292,39293],{"class":37,"line":17135},[35,39294,39295],{"class":41},"                # 这个初始化方法是利用的是正太分布的方式\n",[35,39297,39298],{"class":37,"line":17149},[35,39299,39300],{"class":41},"                # 均值为0，方差为0.01\n",[35,39302,39303,39306,39308,39310,39313],{"class":37,"line":17154},[35,39304,39305],{"class":359},"                nn.init.normal_(m.weight,",[35,39307,687],{"class":58},[35,39309,872],{"class":359},[35,39311,39312],{"class":58},"0.01",[35,39314,505],{"class":359},[35,39316,39317],{"class":37,"line":17160},[35,39318,39319],{"class":41},"                # 初始化b参数\n",[35,39321,39322,39324,39326,39328,39330,39332],{"class":37,"line":17165},[35,39323,39247],{"class":495},[35,39325,39250],{"class":359},[35,39327,39253],{"class":495},[35,39329,39256],{"class":495},[35,39331,39259],{"class":58},[35,39333,4073],{"class":359},[35,39335,39336,39338,39340],{"class":37,"line":17179},[35,39337,39271],{"class":359},[35,39339,687],{"class":58},[35,39341,505],{"class":359},[35,39343,39344],{"class":37,"line":17184},[35,39345,141],{"emptyLinePlaceholder":140},[35,39347,39348],{"class":37,"line":17189},[35,39349,35491],{"class":41},[35,39351,39352,39354,39356],{"class":37,"line":17203},[35,39353,31127],{"class":495},[35,39355,31419],{"class":48},[35,39357,31422],{"class":359},[35,39359,39360,39362,39364,39366],{"class":37,"line":17215},[35,39361,31427],{"class":359},[35,39363,544],{"class":495},[35,39365,31149],{"class":58},[35,39367,39368],{"class":359},".block1(x)\n",[35,39370,39371,39373,39375,39377],{"class":37,"line":17220},[35,39372,31427],{"class":359},[35,39374,544],{"class":495},[35,39376,31149],{"class":58},[35,39378,39379],{"class":359},".block2(x)\n",[35,39381,39382,39384,39386,39388],{"class":37,"line":17233},[35,39383,31427],{"class":359},[35,39385,544],{"class":495},[35,39387,31149],{"class":58},[35,39389,39390],{"class":359},".block3(x)\n",[35,39392,39393,39395,39397,39399],{"class":37,"line":17238},[35,39394,31427],{"class":359},[35,39396,544],{"class":495},[35,39398,31149],{"class":58},[35,39400,39401],{"class":359},".block4(x)\n",[35,39403,39404,39406,39408,39410],{"class":37,"line":17243},[35,39405,31427],{"class":359},[35,39407,544],{"class":495},[35,39409,31149],{"class":58},[35,39411,39412],{"class":359},".block5(x)\n",[35,39414,39415,39417,39419,39421],{"class":37,"line":17248},[35,39416,31427],{"class":359},[35,39418,544],{"class":495},[35,39420,31149],{"class":58},[35,39422,39423],{"class":359},".block6(x)\n",[35,39425,39426,39428],{"class":37,"line":17261},[35,39427,15086],{"class":495},[35,39429,31535],{"class":359},[35,39431,39432],{"class":37,"line":17266},[35,39433,141],{"emptyLinePlaceholder":140},[35,39435,39436],{"class":37,"line":32959},[35,39437,39438],{"class":41},"# 验证模型\n",[35,39440,39441,39443,39445,39447,39450],{"class":37,"line":32965},[35,39442,1892],{"class":495},[35,39444,31546],{"class":58},[35,39446,3283],{"class":495},[35,39448,39449],{"class":306},"'__main__'",[35,39451,4073],{"class":359},[35,39453,39454,39456,39458,39460,39462,39464,39466,39468,39470],{"class":37,"line":32971},[35,39455,31563],{"class":359},[35,39457,544],{"class":495},[35,39459,30777],{"class":359},[35,39461,31570],{"class":306},[35,39463,2054],{"class":495},[35,39465,31575],{"class":359},[35,39467,2051],{"class":495},[35,39469,30802],{"class":306},[35,39471,505],{"class":359},[35,39473,39474,39476],{"class":37,"line":32977},[35,39475,31625],{"class":58},[35,39477,30811],{"class":359},[35,39479,39480,39482,39484],{"class":37,"line":32983},[35,39481,31615],{"class":359},[35,39483,544],{"class":495},[35,39485,39486],{"class":359},"VGG16().to(device)\n",[35,39488,39489,39491,39493,39495,39497,39499,39501,39503],{"class":37,"line":32994},[35,39490,31625],{"class":58},[35,39492,31628],{"class":359},[35,39494,713],{"class":58},[35,39496,872],{"class":359},[35,39498,31827],{"class":58},[35,39500,872],{"class":359},[35,39502,31827],{"class":58},[35,39504,31641],{"class":359},[14,39506,39507],{"start":45},[17,39508,39509],{},"训练代码",[21,39511,39512],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[21,39514,39515],{},"解决方式:",[21,39517,39518],{},"①权重初始化",[25,39520,39522],{"className":30704,"code":39521,"language":30706,"meta":30,"style":30},"# 权重初始化,保证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",[32,39523,39524,39529,39534,39546,39551,39559,39564,39577,39582,39596,39601,39610,39615,39624,39629,39634,39647,39652,39666],{"__ignoreMap":30},[35,39525,39526],{"class":37,"line":38},[35,39527,39528],{"class":41},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[35,39530,39531],{"class":37,"line":45},[35,39532,39533],{"class":41},"# 循环遍历模型\n",[35,39535,39536,39538,39540,39542,39544],{"class":37,"line":55},[35,39537,3359],{"class":495},[35,39539,39194],{"class":359},[35,39541,26374],{"class":495},[35,39543,39199],{"class":58},[35,39545,39202],{"class":359},[35,39547,39548],{"class":37,"line":65},[35,39549,39550],{"class":41},"    # print(m)\n",[35,39552,39553,39555,39557],{"class":37,"line":74},[35,39554,3435],{"class":495},[35,39556,39214],{"class":58},[35,39558,39217],{"class":359},[35,39560,39561],{"class":37,"line":83},[35,39562,39563],{"class":41},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[35,39565,39566,39569,39571,39573,39575],{"class":37,"line":92},[35,39567,39568],{"class":359},"        nn.init.kaiming_normal_(m.weight,",[35,39570,39230],{"class":5550},[35,39572,544],{"class":495},[35,39574,39235],{"class":306},[35,39576,505],{"class":359},[35,39578,39579],{"class":37,"line":101},[35,39580,39581],{"class":41},"        # 判断b参数是否存在\n",[35,39583,39584,39586,39588,39590,39592,39594],{"class":37,"line":110},[35,39585,2837],{"class":495},[35,39587,39250],{"class":359},[35,39589,39253],{"class":495},[35,39591,39256],{"class":495},[35,39593,39259],{"class":58},[35,39595,4073],{"class":359},[35,39597,39598],{"class":37,"line":119},[35,39599,39600],{"class":41},"            # 如果参数不存在的化初始化b=0\n",[35,39602,39603,39606,39608],{"class":37,"line":128},[35,39604,39605],{"class":359},"            nn.init.constant_(m.bias,",[35,39607,687],{"class":58},[35,39609,505],{"class":359},[35,39611,39612],{"class":37,"line":137},[35,39613,39614],{"class":41},"    # 全连接层初始化\n",[35,39616,39617,39620,39622],{"class":37,"line":144},[35,39618,39619],{"class":495},"    elif",[35,39621,39214],{"class":58},[35,39623,39290],{"class":359},[35,39625,39626],{"class":37,"line":150},[35,39627,39628],{"class":41},"        # 这个初始化方法是利用的是正太分布的方式\n",[35,39630,39631],{"class":37,"line":159},[35,39632,39633],{"class":41},"        # 均值为0，方差为0.01\n",[35,39635,39636,39639,39641,39643,39645],{"class":37,"line":168},[35,39637,39638],{"class":359},"        nn.init.normal_(m.weight,",[35,39640,687],{"class":58},[35,39642,872],{"class":359},[35,39644,39312],{"class":58},[35,39646,505],{"class":359},[35,39648,39649],{"class":37,"line":177},[35,39650,39651],{"class":41},"        # 初始化b参数\n",[35,39653,39654,39656,39658,39660,39662,39664],{"class":37,"line":182},[35,39655,2837],{"class":495},[35,39657,39250],{"class":359},[35,39659,39253],{"class":495},[35,39661,39256],{"class":495},[35,39663,39259],{"class":58},[35,39665,4073],{"class":359},[35,39667,39668,39670,39672],{"class":37,"line":188},[35,39669,39605],{"class":359},[35,39671,687],{"class":58},[35,39673,505],{"class":359},[21,39675,39676],{},"②尽可能地增加批次",[21,39678,39679],{},"训练完整代码：",[25,39681,39682],{"className":30704,"code":38225,"language":30706,"meta":30,"style":30},[32,39683,39684,39690,39700,39710,39720,39724,39740,39748,39766,39770,39774,39784,39820,39824,39860,39864,39892,39896,39900,39910,39946,39950,39986,39990,40018,40022,40026,40036,40072,40076,40112,40116,40152,40156,40184,40188,40192,40202,40238,40242,40278,40282,40318,40322,40350,40354,40358,40368,40404,40408,40444,40448,40484,40488,40516,40520,40524,40534,40538,40542,40546,40566,40570,40582,40586,40598,40602,40606,40610,40614,40626,40630,40638,40642,40654,40658,40672,40676,40684,40688,40696,40700,40704,40716,40720,40734,40742,40746,40750,40758,40768,40778,40788,40798,40808,40818,40824,40828,40832,40844,40864,40870,40878],{"__ignoreMap":30},[35,39685,39686,39688],{"class":37,"line":38},[35,39687,30718],{"class":495},[35,39689,30721],{"class":359},[35,39691,39692,39694,39696,39698],{"class":37,"line":45},[35,39693,31063],{"class":495},[35,39695,38240],{"class":359},[35,39697,30718],{"class":495},[35,39699,38245],{"class":359},[35,39701,39702,39704,39706,39708],{"class":37,"line":55},[35,39703,31063],{"class":495},[35,39705,31066],{"class":359},[35,39707,30718],{"class":495},[35,39709,31071],{"class":359},[35,39711,39712,39714,39716,39718],{"class":37,"line":65},[35,39713,31063],{"class":495},[35,39715,31083],{"class":359},[35,39717,30718],{"class":495},[35,39719,31088],{"class":359},[35,39721,39722],{"class":37,"line":74},[35,39723,141],{"emptyLinePlaceholder":140},[35,39725,39726,39728,39730,39732,39734,39736,39738],{"class":37,"line":83},[35,39727,15028],{"class":495},[35,39729,38276],{"class":48},[35,39731,499],{"class":359},[35,39733,31104],{"class":48},[35,39735,1052],{"class":359},[35,39737,31109],{"class":48},[35,39739,31112],{"class":359},[35,39741,39742,39744,39746],{"class":37,"line":92},[35,39743,31127],{"class":495},[35,39745,31130],{"class":58},[35,39747,31133],{"class":359},[35,39749,39750,39752,39754,39756,39758,39760,39762,39764],{"class":37,"line":101},[35,39751,31143],{"class":58},[35,39753,499],{"class":359},[35,39755,38303],{"class":58},[35,39757,12769],{"class":359},[35,39759,31149],{"class":58},[35,39761,31152],{"class":359},[35,39763,31155],{"class":58},[35,39765,2317],{"class":359},[35,39767,39768],{"class":37,"line":110},[35,39769,38318],{"class":41},[35,39771,39772],{"class":37,"line":119},[35,39773,38323],{"class":41},[35,39775,39776,39778,39780,39782],{"class":37,"line":128},[35,39777,31171],{"class":58},[35,39779,38330],{"class":359},[35,39781,544],{"class":495},[35,39783,38335],{"class":359},[35,39785,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818],{"class":37,"line":137},[35,39787,38340],{"class":359},[35,39789,31182],{"class":5550},[35,39791,544],{"class":495},[35,39793,713],{"class":58},[35,39795,872],{"class":359},[35,39797,31191],{"class":5550},[35,39799,544],{"class":495},[35,39801,699],{"class":58},[35,39803,872],{"class":359},[35,39805,31200],{"class":5550},[35,39807,544],{"class":495},[35,39809,568],{"class":58},[35,39811,872],{"class":359},[35,39813,31209],{"class":5550},[35,39815,544],{"class":495},[35,39817,713],{"class":58},[35,39819,38373],{"class":359},[35,39821,39822],{"class":37,"line":144},[35,39823,38378],{"class":359},[35,39825,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858],{"class":37,"line":150},[35,39827,38340],{"class":359},[35,39829,31182],{"class":5550},[35,39831,544],{"class":495},[35,39833,699],{"class":58},[35,39835,872],{"class":359},[35,39837,31191],{"class":5550},[35,39839,544],{"class":495},[35,39841,699],{"class":58},[35,39843,872],{"class":359},[35,39845,31200],{"class":5550},[35,39847,544],{"class":495},[35,39849,568],{"class":58},[35,39851,872],{"class":359},[35,39853,31209],{"class":5550},[35,39855,544],{"class":495},[35,39857,713],{"class":58},[35,39859,38373],{"class":359},[35,39861,39862],{"class":37,"line":159},[35,39863,38378],{"class":359},[35,39865,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890],{"class":37,"line":168},[35,39867,38423],{"class":359},[35,39869,31200],{"class":5550},[35,39871,544],{"class":495},[35,39873,574],{"class":58},[35,39875,872],{"class":359},[35,39877,31255],{"class":5550},[35,39879,544],{"class":495},[35,39881,574],{"class":58},[35,39883,872],{"class":359},[35,39885,31209],{"class":5550},[35,39887,544],{"class":495},[35,39889,687],{"class":58},[35,39891,505],{"class":359},[35,39893,39894],{"class":37,"line":177},[35,39895,38452],{"class":359},[35,39897,39898],{"class":37,"line":182},[35,39899,38457],{"class":41},[35,39901,39902,39904,39906,39908],{"class":37,"line":188},[35,39903,31171],{"class":58},[35,39905,38464],{"class":359},[35,39907,544],{"class":495},[35,39909,38335],{"class":359},[35,39911,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944],{"class":37,"line":197},[35,39913,38340],{"class":359},[35,39915,31182],{"class":5550},[35,39917,544],{"class":495},[35,39919,699],{"class":58},[35,39921,872],{"class":359},[35,39923,31191],{"class":5550},[35,39925,544],{"class":495},[35,39927,32396],{"class":58},[35,39929,872],{"class":359},[35,39931,31200],{"class":5550},[35,39933,544],{"class":495},[35,39935,568],{"class":58},[35,39937,872],{"class":359},[35,39939,31209],{"class":5550},[35,39941,544],{"class":495},[35,39943,713],{"class":58},[35,39945,38373],{"class":359},[35,39947,39948],{"class":37,"line":206},[35,39949,38378],{"class":359},[35,39951,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984],{"class":37,"line":215},[35,39953,38340],{"class":359},[35,39955,31182],{"class":5550},[35,39957,544],{"class":495},[35,39959,32396],{"class":58},[35,39961,872],{"class":359},[35,39963,31191],{"class":5550},[35,39965,544],{"class":495},[35,39967,32396],{"class":58},[35,39969,872],{"class":359},[35,39971,31200],{"class":5550},[35,39973,544],{"class":495},[35,39975,568],{"class":58},[35,39977,872],{"class":359},[35,39979,31209],{"class":5550},[35,39981,544],{"class":495},[35,39983,713],{"class":58},[35,39985,38373],{"class":359},[35,39987,39988],{"class":37,"line":224},[35,39989,38378],{"class":359},[35,39991,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016],{"class":37,"line":233},[35,39993,38423],{"class":359},[35,39995,31200],{"class":5550},[35,39997,544],{"class":495},[35,39999,574],{"class":58},[35,40001,872],{"class":359},[35,40003,31255],{"class":5550},[35,40005,544],{"class":495},[35,40007,574],{"class":58},[35,40009,872],{"class":359},[35,40011,31209],{"class":5550},[35,40013,544],{"class":495},[35,40015,687],{"class":58},[35,40017,505],{"class":359},[35,40019,40020],{"class":37,"line":238},[35,40021,38452],{"class":359},[35,40023,40024],{"class":37,"line":244},[35,40025,38585],{"class":41},[35,40027,40028,40030,40032,40034],{"class":37,"line":253},[35,40029,31171],{"class":58},[35,40031,38592],{"class":359},[35,40033,544],{"class":495},[35,40035,38335],{"class":359},[35,40037,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070],{"class":37,"line":262},[35,40039,38340],{"class":359},[35,40041,31182],{"class":5550},[35,40043,544],{"class":495},[35,40045,32396],{"class":58},[35,40047,872],{"class":359},[35,40049,31191],{"class":5550},[35,40051,544],{"class":495},[35,40053,35196],{"class":58},[35,40055,872],{"class":359},[35,40057,31200],{"class":5550},[35,40059,544],{"class":495},[35,40061,568],{"class":58},[35,40063,872],{"class":359},[35,40065,31209],{"class":5550},[35,40067,544],{"class":495},[35,40069,713],{"class":58},[35,40071,38373],{"class":359},[35,40073,40074],{"class":37,"line":271},[35,40075,38378],{"class":359},[35,40077,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110],{"class":37,"line":280},[35,40079,38340],{"class":359},[35,40081,31182],{"class":5550},[35,40083,544],{"class":495},[35,40085,35196],{"class":58},[35,40087,872],{"class":359},[35,40089,31191],{"class":5550},[35,40091,544],{"class":495},[35,40093,35196],{"class":58},[35,40095,872],{"class":359},[35,40097,31200],{"class":5550},[35,40099,544],{"class":495},[35,40101,568],{"class":58},[35,40103,872],{"class":359},[35,40105,31209],{"class":5550},[35,40107,544],{"class":495},[35,40109,713],{"class":58},[35,40111,38373],{"class":359},[35,40113,40114],{"class":37,"line":289},[35,40115,38378],{"class":359},[35,40117,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150],{"class":37,"line":294},[35,40119,38340],{"class":359},[35,40121,31182],{"class":5550},[35,40123,544],{"class":495},[35,40125,35196],{"class":58},[35,40127,872],{"class":359},[35,40129,31191],{"class":5550},[35,40131,544],{"class":495},[35,40133,35196],{"class":58},[35,40135,872],{"class":359},[35,40137,31200],{"class":5550},[35,40139,544],{"class":495},[35,40141,568],{"class":58},[35,40143,872],{"class":359},[35,40145,31209],{"class":5550},[35,40147,544],{"class":495},[35,40149,713],{"class":58},[35,40151,38373],{"class":359},[35,40153,40154],{"class":37,"line":300},[35,40155,38378],{"class":359},[35,40157,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182],{"class":37,"line":313},[35,40159,38423],{"class":359},[35,40161,31200],{"class":5550},[35,40163,544],{"class":495},[35,40165,574],{"class":58},[35,40167,872],{"class":359},[35,40169,31255],{"class":5550},[35,40171,544],{"class":495},[35,40173,574],{"class":58},[35,40175,872],{"class":359},[35,40177,31209],{"class":5550},[35,40179,544],{"class":495},[35,40181,687],{"class":58},[35,40183,505],{"class":359},[35,40185,40186],{"class":37,"line":324},[35,40187,38452],{"class":359},[35,40189,40190],{"class":37,"line":2955},[35,40191,38753],{"class":41},[35,40193,40194,40196,40198,40200],{"class":37,"line":8282},[35,40195,31171],{"class":58},[35,40197,38760],{"class":359},[35,40199,544],{"class":495},[35,40201,38335],{"class":359},[35,40203,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236],{"class":37,"line":8306},[35,40205,38340],{"class":359},[35,40207,31182],{"class":5550},[35,40209,544],{"class":495},[35,40211,35196],{"class":58},[35,40213,872],{"class":359},[35,40215,31191],{"class":5550},[35,40217,544],{"class":495},[35,40219,38783],{"class":58},[35,40221,872],{"class":359},[35,40223,31200],{"class":5550},[35,40225,544],{"class":495},[35,40227,568],{"class":58},[35,40229,872],{"class":359},[35,40231,31209],{"class":5550},[35,40233,544],{"class":495},[35,40235,713],{"class":58},[35,40237,38373],{"class":359},[35,40239,40240],{"class":37,"line":8311},[35,40241,38378],{"class":359},[35,40243,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276],{"class":37,"line":8317},[35,40245,38340],{"class":359},[35,40247,31182],{"class":5550},[35,40249,544],{"class":495},[35,40251,38783],{"class":58},[35,40253,872],{"class":359},[35,40255,31191],{"class":5550},[35,40257,544],{"class":495},[35,40259,38783],{"class":58},[35,40261,872],{"class":359},[35,40263,31200],{"class":5550},[35,40265,544],{"class":495},[35,40267,568],{"class":58},[35,40269,872],{"class":359},[35,40271,31209],{"class":5550},[35,40273,544],{"class":495},[35,40275,713],{"class":58},[35,40277,38373],{"class":359},[35,40279,40280],{"class":37,"line":8344},[35,40281,38378],{"class":359},[35,40283,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316],{"class":37,"line":8349},[35,40285,38340],{"class":359},[35,40287,31182],{"class":5550},[35,40289,544],{"class":495},[35,40291,38783],{"class":58},[35,40293,872],{"class":359},[35,40295,31191],{"class":5550},[35,40297,544],{"class":495},[35,40299,38783],{"class":58},[35,40301,872],{"class":359},[35,40303,31200],{"class":5550},[35,40305,544],{"class":495},[35,40307,568],{"class":58},[35,40309,872],{"class":359},[35,40311,31209],{"class":5550},[35,40313,544],{"class":495},[35,40315,713],{"class":58},[35,40317,38373],{"class":359},[35,40319,40320],{"class":37,"line":8355},[35,40321,38378],{"class":359},[35,40323,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346,40348],{"class":37,"line":8367},[35,40325,38423],{"class":359},[35,40327,31200],{"class":5550},[35,40329,544],{"class":495},[35,40331,574],{"class":58},[35,40333,872],{"class":359},[35,40335,31255],{"class":5550},[35,40337,544],{"class":495},[35,40339,574],{"class":58},[35,40341,872],{"class":359},[35,40343,31209],{"class":5550},[35,40345,544],{"class":495},[35,40347,687],{"class":58},[35,40349,505],{"class":359},[35,40351,40352],{"class":37,"line":8379},[35,40353,38452],{"class":359},[35,40355,40356],{"class":37,"line":8391},[35,40357,38922],{"class":41},[35,40359,40360,40362,40364,40366],{"class":37,"line":10050},[35,40361,31171],{"class":58},[35,40363,38929],{"class":359},[35,40365,544],{"class":495},[35,40367,38335],{"class":359},[35,40369,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402],{"class":37,"line":10075},[35,40371,38340],{"class":359},[35,40373,31182],{"class":5550},[35,40375,544],{"class":495},[35,40377,38783],{"class":58},[35,40379,872],{"class":359},[35,40381,31191],{"class":5550},[35,40383,544],{"class":495},[35,40385,38783],{"class":58},[35,40387,872],{"class":359},[35,40389,31200],{"class":5550},[35,40391,544],{"class":495},[35,40393,568],{"class":58},[35,40395,872],{"class":359},[35,40397,31209],{"class":5550},[35,40399,544],{"class":495},[35,40401,713],{"class":58},[35,40403,38373],{"class":359},[35,40405,40406],{"class":37,"line":10098},[35,40407,38378],{"class":359},[35,40409,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442],{"class":37,"line":10122},[35,40411,38340],{"class":359},[35,40413,31182],{"class":5550},[35,40415,544],{"class":495},[35,40417,38783],{"class":58},[35,40419,872],{"class":359},[35,40421,31191],{"class":5550},[35,40423,544],{"class":495},[35,40425,38783],{"class":58},[35,40427,872],{"class":359},[35,40429,31200],{"class":5550},[35,40431,544],{"class":495},[35,40433,568],{"class":58},[35,40435,872],{"class":359},[35,40437,31209],{"class":5550},[35,40439,544],{"class":495},[35,40441,713],{"class":58},[35,40443,38373],{"class":359},[35,40445,40446],{"class":37,"line":10127},[35,40447,38378],{"class":359},[35,40449,40450,40452,40454,40456,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482],{"class":37,"line":10132},[35,40451,38340],{"class":359},[35,40453,31182],{"class":5550},[35,40455,544],{"class":495},[35,40457,38783],{"class":58},[35,40459,872],{"class":359},[35,40461,31191],{"class":5550},[35,40463,544],{"class":495},[35,40465,38783],{"class":58},[35,40467,872],{"class":359},[35,40469,31200],{"class":5550},[35,40471,544],{"class":495},[35,40473,568],{"class":58},[35,40475,872],{"class":359},[35,40477,31209],{"class":5550},[35,40479,544],{"class":495},[35,40481,713],{"class":58},[35,40483,38373],{"class":359},[35,40485,40486],{"class":37,"line":10137},[35,40487,38378],{"class":359},[35,40489,40490,40492,40494,40496,40498,40500,40502,40504,40506,40508,40510,40512,40514],{"class":37,"line":10146},[35,40491,38423],{"class":359},[35,40493,31200],{"class":5550},[35,40495,544],{"class":495},[35,40497,574],{"class":58},[35,40499,872],{"class":359},[35,40501,31255],{"class":5550},[35,40503,544],{"class":495},[35,40505,574],{"class":58},[35,40507,872],{"class":359},[35,40509,31209],{"class":5550},[35,40511,544],{"class":495},[35,40513,687],{"class":58},[35,40515,505],{"class":359},[35,40517,40518],{"class":37,"line":10151},[35,40519,38452],{"class":359},[35,40521,40522],{"class":37,"line":10157},[35,40523,39090],{"class":41},[35,40525,40526,40528,40530,40532],{"class":37,"line":10178},[35,40527,31171],{"class":58},[35,40529,39097],{"class":359},[35,40531,544],{"class":495},[35,40533,38335],{"class":359},[35,40535,40536],{"class":37,"line":10184},[35,40537,39106],{"class":41},[35,40539,40540],{"class":37,"line":10198},[35,40541,39111],{"class":41},[35,40543,40544],{"class":37,"line":10204},[35,40545,39116],{"class":359},[35,40547,40548,40550,40552,40554,40556,40558,40560,40562,40564],{"class":37,"line":10231},[35,40549,39121],{"class":359},[35,40551,863],{"class":58},[35,40553,949],{"class":495},[35,40555,863],{"class":58},[35,40557,949],{"class":495},[35,40559,38783],{"class":58},[35,40561,872],{"class":359},[35,40563,35196],{"class":58},[35,40565,38373],{"class":359},[35,40567,40568],{"class":37,"line":10240},[35,40569,38378],{"class":359},[35,40571,40572,40574,40576,40578,40580],{"class":37,"line":10246},[35,40573,39121],{"class":359},[35,40575,35196],{"class":58},[35,40577,872],{"class":359},[35,40579,32396],{"class":58},[35,40581,38373],{"class":359},[35,40583,40584],{"class":37,"line":10254},[35,40585,38378],{"class":359},[35,40587,40588,40590,40592,40594,40596],{"class":37,"line":10259},[35,40589,39121],{"class":359},[35,40591,32396],{"class":58},[35,40593,872],{"class":359},[35,40595,940],{"class":58},[35,40597,505],{"class":359},[35,40599,40600],{"class":37,"line":16938},[35,40601,38452],{"class":359},[35,40603,40604],{"class":37,"line":16944},[35,40605,141],{"emptyLinePlaceholder":140},[35,40607,40608],{"class":37,"line":16967},[35,40609,39182],{"class":41},[35,40611,40612],{"class":37,"line":16973},[35,40613,39187],{"class":41},[35,40615,40616,40618,40620,40622,40624],{"class":37,"line":16996},[35,40617,3737],{"class":495},[35,40619,39194],{"class":359},[35,40621,26374],{"class":495},[35,40623,39199],{"class":58},[35,40625,39202],{"class":359},[35,40627,40628],{"class":37,"line":17010},[35,40629,39207],{"class":41},[35,40631,40632,40634,40636],{"class":37,"line":17030},[35,40633,4976],{"class":495},[35,40635,39214],{"class":58},[35,40637,39217],{"class":359},[35,40639,40640],{"class":37,"line":17036},[35,40641,39222],{"class":41},[35,40643,40644,40646,40648,40650,40652],{"class":37,"line":17047},[35,40645,39227],{"class":359},[35,40647,39230],{"class":5550},[35,40649,544],{"class":495},[35,40651,39235],{"class":306},[35,40653,505],{"class":359},[35,40655,40656],{"class":37,"line":17070},[35,40657,39242],{"class":41},[35,40659,40660,40662,40664,40666,40668,40670],{"class":37,"line":17092},[35,40661,39247],{"class":495},[35,40663,39250],{"class":359},[35,40665,39253],{"class":495},[35,40667,39256],{"class":495},[35,40669,39259],{"class":58},[35,40671,4073],{"class":359},[35,40673,40674],{"class":37,"line":17097},[35,40675,39266],{"class":41},[35,40677,40678,40680,40682],{"class":37,"line":17103},[35,40679,39271],{"class":359},[35,40681,687],{"class":58},[35,40683,505],{"class":359},[35,40685,40686],{"class":37,"line":17117},[35,40687,39280],{"class":41},[35,40689,40690,40692,40694],{"class":37,"line":17130},[35,40691,39285],{"class":495},[35,40693,39214],{"class":58},[35,40695,39290],{"class":359},[35,40697,40698],{"class":37,"line":17135},[35,40699,39295],{"class":41},[35,40701,40702],{"class":37,"line":17149},[35,40703,39300],{"class":41},[35,40705,40706,40708,40710,40712,40714],{"class":37,"line":17154},[35,40707,39305],{"class":359},[35,40709,687],{"class":58},[35,40711,872],{"class":359},[35,40713,39312],{"class":58},[35,40715,505],{"class":359},[35,40717,40718],{"class":37,"line":17160},[35,40719,39319],{"class":41},[35,40721,40722,40724,40726,40728,40730,40732],{"class":37,"line":17165},[35,40723,39247],{"class":495},[35,40725,39250],{"class":359},[35,40727,39253],{"class":495},[35,40729,39256],{"class":495},[35,40731,39259],{"class":58},[35,40733,4073],{"class":359},[35,40735,40736,40738,40740],{"class":37,"line":17179},[35,40737,39271],{"class":359},[35,40739,687],{"class":58},[35,40741,505],{"class":359},[35,40743,40744],{"class":37,"line":17184},[35,40745,141],{"emptyLinePlaceholder":140},[35,40747,40748],{"class":37,"line":17189},[35,40749,35491],{"class":41},[35,40751,40752,40754,40756],{"class":37,"line":17203},[35,40753,31127],{"class":495},[35,40755,31419],{"class":48},[35,40757,31422],{"class":359},[35,40759,40760,40762,40764,40766],{"class":37,"line":17215},[35,40761,31427],{"class":359},[35,40763,544],{"class":495},[35,40765,31149],{"class":58},[35,40767,39368],{"class":359},[35,40769,40770,40772,40774,40776],{"class":37,"line":17220},[35,40771,31427],{"class":359},[35,40773,544],{"class":495},[35,40775,31149],{"class":58},[35,40777,39379],{"class":359},[35,40779,40780,40782,40784,40786],{"class":37,"line":17233},[35,40781,31427],{"class":359},[35,40783,544],{"class":495},[35,40785,31149],{"class":58},[35,40787,39390],{"class":359},[35,40789,40790,40792,40794,40796],{"class":37,"line":17238},[35,40791,31427],{"class":359},[35,40793,544],{"class":495},[35,40795,31149],{"class":58},[35,40797,39401],{"class":359},[35,40799,40800,40802,40804,40806],{"class":37,"line":17243},[35,40801,31427],{"class":359},[35,40803,544],{"class":495},[35,40805,31149],{"class":58},[35,40807,39412],{"class":359},[35,40809,40810,40812,40814,40816],{"class":37,"line":17248},[35,40811,31427],{"class":359},[35,40813,544],{"class":495},[35,40815,31149],{"class":58},[35,40817,39423],{"class":359},[35,40819,40820,40822],{"class":37,"line":17261},[35,40821,15086],{"class":495},[35,40823,31535],{"class":359},[35,40825,40826],{"class":37,"line":17266},[35,40827,141],{"emptyLinePlaceholder":140},[35,40829,40830],{"class":37,"line":32959},[35,40831,39438],{"class":41},[35,40833,40834,40836,40838,40840,40842],{"class":37,"line":32965},[35,40835,1892],{"class":495},[35,40837,31546],{"class":58},[35,40839,3283],{"class":495},[35,40841,39449],{"class":306},[35,40843,4073],{"class":359},[35,40845,40846,40848,40850,40852,40854,40856,40858,40860,40862],{"class":37,"line":32971},[35,40847,31563],{"class":359},[35,40849,544],{"class":495},[35,40851,30777],{"class":359},[35,40853,31570],{"class":306},[35,40855,2054],{"class":495},[35,40857,31575],{"class":359},[35,40859,2051],{"class":495},[35,40861,30802],{"class":306},[35,40863,505],{"class":359},[35,40865,40866,40868],{"class":37,"line":32977},[35,40867,31625],{"class":58},[35,40869,30811],{"class":359},[35,40871,40872,40874,40876],{"class":37,"line":32983},[35,40873,31615],{"class":359},[35,40875,544],{"class":495},[35,40877,39486],{"class":359},[35,40879,40880,40882,40884,40886,40888,40890,40892,40894],{"class":37,"line":32994},[35,40881,31625],{"class":58},[35,40883,31628],{"class":359},[35,40885,713],{"class":58},[35,40887,872],{"class":359},[35,40889,31827],{"class":58},[35,40891,872],{"class":359},[35,40893,31827],{"class":58},[35,40895,31641],{"class":359},[14,40897,40898],{"start":55},[17,40899,40900],{},"测试代码",[25,40902,40904],{"className":30704,"code":40903,"language":30706,"meta":30,"style":30},"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",[32,40905,40906,40912,40922,40932,40936,40946,40957,40961,40965,40969,40977,40993,41003,41019,41029,41043,41047,41057,41067,41077,41083,41087,41091,41099,41103,41119,41127,41131,41135,41143,41151,41155,41159,41163,41167,41173,41177,41187,41195,41203,41207,41211,41215,41223,41227,41243,41247,41251,41255,41267,41271,41283,41287,41291,41303,41307,41317,41321,41325,41337,41341,41350,41354,41358,41366,41370,41378,41382,41386,41390,41394,41398,41414,41422,41426,41430,41478,41484,41488,41498,41506,41514,41518,41522,41526,41530,41538,41542,41558,41562,41570,41578],{"__ignoreMap":30},[35,40907,40908,40910],{"class":37,"line":38},[35,40909,30718],{"class":495},[35,40911,30721],{"class":359},[35,40913,40914,40916,40918,40920],{"class":37,"line":45},[35,40915,30718],{"class":495},[35,40917,31741],{"class":359},[35,40919,31709],{"class":495},[35,40921,31746],{"class":359},[35,40923,40924,40926,40928,40930],{"class":37,"line":55},[35,40925,31063],{"class":495},[35,40927,31724],{"class":359},[35,40929,30718],{"class":495},[35,40931,31729],{"class":359},[35,40933,40934],{"class":37,"line":65},[35,40935,34248],{"class":41},[35,40937,40938,40940,40942,40944],{"class":37,"line":74},[35,40939,31063],{"class":495},[35,40941,31694],{"class":359},[35,40943,30718],{"class":495},[35,40945,31699],{"class":359},[35,40947,40948,40950,40952,40954],{"class":37,"line":83},[35,40949,31063],{"class":495},[35,40951,32240],{"class":359},[35,40953,30718],{"class":495},[35,40955,40956],{"class":58}," VGG16\n",[35,40958,40959],{"class":37,"line":92},[35,40960,141],{"emptyLinePlaceholder":140},[35,40962,40963],{"class":37,"line":101},[35,40964,141],{"emptyLinePlaceholder":140},[35,40966,40967],{"class":37,"line":110},[35,40968,34277],{"class":41},[35,40970,40971,40973,40975],{"class":37,"line":119},[35,40972,32273],{"class":495},[35,40974,34284],{"class":48},[35,40976,32279],{"class":359},[35,40978,40979,40981,40983,40985,40987,40989,40991],{"class":37,"line":128},[35,40980,34291],{"class":359},[35,40982,544],{"class":495},[35,40984,31781],{"class":359},[35,40986,31784],{"class":5550},[35,40988,544],{"class":495},[35,40990,31789],{"class":306},[35,40992,31792],{"class":359},[35,40994,40995,40997,40999,41001],{"class":37,"line":137},[35,40996,34308],{"class":5550},[35,40998,544],{"class":495},[35,41000,34313],{"class":58},[35,41002,31792],{"class":359},[35,41004,41005,41007,41009,41011,41013,41015,41017],{"class":37,"line":144},[35,41006,34320],{"class":5550},[35,41008,544],{"class":495},[35,41010,31819],{"class":359},[35,41012,31822],{"class":5550},[35,41014,544],{"class":495},[35,41016,31827],{"class":58},[35,41018,31830],{"class":359},[35,41020,41021,41023,41025,41027],{"class":37,"line":150},[35,41022,34337],{"class":5550},[35,41024,544],{"class":495},[35,41026,31802],{"class":58},[35,41028,505],{"class":359},[35,41030,41031,41033,41035,41037,41039,41041],{"class":37,"line":159},[35,41032,34348],{"class":359},[35,41034,544],{"class":495},[35,41036,31860],{"class":359},[35,41038,31863],{"class":5550},[35,41040,544],{"class":495},[35,41042,34359],{"class":359},[35,41044,41045],{"class":37,"line":168},[35,41046,34364],{"class":41},[35,41048,41049,41051,41053,41055],{"class":37,"line":177},[35,41050,34369],{"class":5550},[35,41052,544],{"class":495},[35,41054,713],{"class":58},[35,41056,31792],{"class":359},[35,41058,41059,41061,41063,41065],{"class":37,"line":182},[35,41060,34380],{"class":5550},[35,41062,544],{"class":495},[35,41064,31802],{"class":58},[35,41066,31792],{"class":359},[35,41068,41069,41071,41073,41075],{"class":37,"line":188},[35,41070,34391],{"class":5550},[35,41072,544],{"class":495},[35,41074,687],{"class":58},[35,41076,505],{"class":359},[35,41078,41079,41081],{"class":37,"line":197},[35,41080,4424],{"class":495},[35,41082,34404],{"class":359},[35,41084,41085],{"class":37,"line":206},[35,41086,141],{"emptyLinePlaceholder":140},[35,41088,41089],{"class":37,"line":215},[35,41090,34413],{"class":41},[35,41092,41093,41095,41097],{"class":37,"line":224},[35,41094,32273],{"class":495},[35,41096,34420],{"class":48},[35,41098,34423],{"class":359},[35,41100,41101],{"class":37,"line":233},[35,41102,34428],{"class":41},[35,41104,41105,41107,41109,41111,41113,41115,41117],{"class":37,"line":238},[35,41106,31563],{"class":359},[35,41108,544],{"class":495},[35,41110,31570],{"class":306},[35,41112,2054],{"class":495},[35,41114,31575],{"class":359},[35,41116,2051],{"class":495},[35,41118,34445],{"class":306},[35,41120,41121,41123,41125],{"class":37,"line":244},[35,41122,31615],{"class":359},[35,41124,544],{"class":495},[35,41126,32615],{"class":359},[35,41128,41129],{"class":37,"line":253},[35,41130,141],{"emptyLinePlaceholder":140},[35,41132,41133],{"class":37,"line":262},[35,41134,34462],{"class":41},[35,41136,41137,41139,41141],{"class":37,"line":271},[35,41138,34467],{"class":359},[35,41140,544],{"class":495},[35,41142,32668],{"class":58},[35,41144,41145,41147,41149],{"class":37,"line":280},[35,41146,34476],{"class":359},[35,41148,544],{"class":495},[35,41150,3419],{"class":58},[35,41152,41153],{"class":37,"line":289},[35,41154,141],{"emptyLinePlaceholder":140},[35,41156,41157],{"class":37,"line":294},[35,41158,34489],{"class":41},[35,41160,41161],{"class":37,"line":300},[35,41162,34494],{"class":41},[35,41164,41165],{"class":37,"line":313},[35,41166,34499],{"class":41},[35,41168,41169,41171],{"class":37,"line":324},[35,41170,34504],{"class":495},[35,41172,33210],{"class":359},[35,41174,41175],{"class":37,"line":2955},[35,41176,34511],{"class":41},[35,41178,41179,41181,41183,41185],{"class":37,"line":8282},[35,41180,3737],{"class":495},[35,41182,34518],{"class":359},[35,41184,26374],{"class":495},[35,41186,34523],{"class":359},[35,41188,41189,41191,41193],{"class":37,"line":8306},[35,41190,34528],{"class":359},[35,41192,544],{"class":495},[35,41194,34533],{"class":359},[35,41196,41197,41199,41201],{"class":37,"line":8311},[35,41198,34538],{"class":359},[35,41200,544],{"class":495},[35,41202,34543],{"class":359},[35,41204,41205],{"class":37,"line":8317},[35,41206,34548],{"class":41},[35,41208,41209],{"class":37,"line":8344},[35,41210,33201],{"class":359},[35,41212,41213],{"class":37,"line":8349},[35,41214,34557],{"class":41},[35,41216,41217,41219,41221],{"class":37,"line":8355},[35,41218,32986],{"class":359},[35,41220,544],{"class":495},[35,41222,34566],{"class":359},[35,41224,41225],{"class":37,"line":8367},[35,41226,34571],{"class":41},[35,41228,41229,41231,41233,41235,41237,41239,41241],{"class":37,"line":8379},[35,41230,33003],{"class":359},[35,41232,544],{"class":495},[35,41234,33008],{"class":359},[35,41236,33011],{"class":5550},[35,41238,544],{"class":495},[35,41240,713],{"class":58},[35,41242,505],{"class":359},[35,41244,41245],{"class":37,"line":8391},[35,41246,34592],{"class":41},[35,41248,41249],{"class":37,"line":10050},[35,41250,34597],{"class":41},[35,41252,41253],{"class":37,"line":10075},[35,41254,34602],{"class":41},[35,41256,41257,41259,41261,41263,41265],{"class":37,"line":10098},[35,41258,34607],{"class":359},[35,41260,9811],{"class":495},[35,41262,33113],{"class":359},[35,41264,3283],{"class":495},[35,41266,34616],{"class":359},[35,41268,41269],{"class":37,"line":10122},[35,41270,34621],{"class":41},[35,41272,41273,41275,41277,41279,41281],{"class":37,"line":10127},[35,41274,34626],{"class":359},[35,41276,9811],{"class":495},[35,41278,34631],{"class":359},[35,41280,687],{"class":58},[35,41282,505],{"class":359},[35,41284,41285],{"class":37,"line":10132},[35,41286,141],{"emptyLinePlaceholder":140},[35,41288,41289],{"class":37,"line":10137},[35,41290,34644],{"class":41},[35,41292,41293,41295,41297,41299,41301],{"class":37,"line":10146},[35,41294,34649],{"class":359},[35,41296,544],{"class":495},[35,41298,34654],{"class":359},[35,41300,1078],{"class":495},[35,41302,34659],{"class":359},[35,41304,41305],{"class":37,"line":10151},[35,41306,34664],{"class":41},[35,41308,41309,41311,41313,41315],{"class":37,"line":10157},[35,41310,32777],{"class":58},[35,41312,499],{"class":359},[35,41314,34673],{"class":306},[35,41316,34676],{"class":359},[35,41318,41319],{"class":37,"line":10178},[35,41320,141],{"emptyLinePlaceholder":140},[35,41322,41323],{"class":37,"line":10184},[35,41324,34685],{"class":41},[35,41326,41327,41329,41331,41333,41335],{"class":37,"line":10198},[35,41328,1892],{"class":495},[35,41330,31546],{"class":58},[35,41332,3283],{"class":495},[35,41334,31551],{"class":306},[35,41336,4073],{"class":359},[35,41338,41339],{"class":37,"line":10204},[35,41340,34702],{"class":41},[35,41342,41343,41345,41347],{"class":37,"line":10231},[35,41344,31615],{"class":359},[35,41346,544],{"class":495},[35,41348,41349],{"class":359},"VGG16()\n",[35,41351,41352],{"class":37,"line":10240},[35,41353,34715],{"class":41},[35,41355,41356],{"class":37,"line":10246},[35,41357,34720],{"class":41},[35,41359,41360,41362,41364],{"class":37,"line":10254},[35,41361,34725],{"class":359},[35,41363,34728],{"class":306},[35,41365,30823],{"class":359},[35,41367,41368],{"class":37,"line":10259},[35,41369,34735],{"class":41},[35,41371,41372,41374,41376],{"class":37,"line":16938},[35,41373,34348],{"class":359},[35,41375,544],{"class":495},[35,41377,34744],{"class":359},[35,41379,41380],{"class":37,"line":16944},[35,41381,34749],{"class":41},[35,41383,41384],{"class":37,"line":16967},[35,41385,34754],{"class":359},[35,41387,41388],{"class":37,"line":16973},[35,41389,141],{"emptyLinePlaceholder":140},[35,41391,41392],{"class":37,"line":16996},[35,41393,34763],{"class":41},[35,41395,41396],{"class":37,"line":17010},[35,41397,34768],{"class":41},[35,41399,41400,41402,41404,41406,41408,41410,41412],{"class":37,"line":17030},[35,41401,31563],{"class":359},[35,41403,544],{"class":495},[35,41405,31570],{"class":306},[35,41407,2054],{"class":495},[35,41409,31575],{"class":359},[35,41411,2051],{"class":495},[35,41413,34445],{"class":306},[35,41415,41416,41418,41420],{"class":37,"line":17036},[35,41417,31615],{"class":359},[35,41419,544],{"class":495},[35,41421,32615],{"class":359},[35,41423,41424],{"class":37,"line":17047},[35,41425,34797],{"class":41},[35,41427,41428],{"class":37,"line":17070},[35,41429,34802],{"class":41},[35,41431,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476],{"class":37,"line":17092},[35,41433,34807],{"class":359},[35,41435,544],{"class":495},[35,41437,1384],{"class":359},[35,41439,34814],{"class":306},[35,41441,872],{"class":359},[35,41443,34819],{"class":306},[35,41445,872],{"class":359},[35,41447,34824],{"class":306},[35,41449,872],{"class":359},[35,41451,34829],{"class":306},[35,41453,872],{"class":359},[35,41455,34834],{"class":306},[35,41457,872],{"class":359},[35,41459,34839],{"class":306},[35,41461,872],{"class":359},[35,41463,34844],{"class":306},[35,41465,872],{"class":359},[35,41467,34849],{"class":306},[35,41469,872],{"class":359},[35,41471,34854],{"class":306},[35,41473,872],{"class":359},[35,41475,34859],{"class":306},[35,41477,33572],{"class":359},[35,41479,41480,41482],{"class":37,"line":17097},[35,41481,34504],{"class":495},[35,41483,33210],{"class":359},[35,41485,41486],{"class":37,"line":17103},[35,41487,34872],{"class":41},[35,41489,41490,41492,41494,41496],{"class":37,"line":17117},[35,41491,3737],{"class":495},[35,41493,34879],{"class":359},[35,41495,26374],{"class":495},[35,41497,34523],{"class":359},[35,41499,41500,41502,41504],{"class":37,"line":17130},[35,41501,32936],{"class":359},[35,41503,544],{"class":495},[35,41505,32941],{"class":359},[35,41507,41508,41510,41512],{"class":37,"line":17135},[35,41509,32951],{"class":359},[35,41511,544],{"class":495},[35,41513,32956],{"class":359},[35,41515,41516],{"class":37,"line":17149},[35,41517,141],{"emptyLinePlaceholder":140},[35,41519,41520],{"class":37,"line":17154},[35,41521,34908],{"class":41},[35,41523,41524],{"class":37,"line":17160},[35,41525,33201],{"class":359},[35,41527,41528],{"class":37,"line":17165},[35,41529,34917],{"class":41},[35,41531,41532,41534,41536],{"class":37,"line":17179},[35,41533,32986],{"class":359},[35,41535,544],{"class":495},[35,41537,32991],{"class":359},[35,41539,41540],{"class":37,"line":17184},[35,41541,34930],{"class":41},[35,41543,41544,41546,41548,41550,41552,41554,41556],{"class":37,"line":17189},[35,41545,33003],{"class":359},[35,41547,544],{"class":495},[35,41549,33008],{"class":359},[35,41551,33011],{"class":5550},[35,41553,544],{"class":495},[35,41555,713],{"class":58},[35,41557,505],{"class":359},[35,41559,41560],{"class":37,"line":17203},[35,41561,34951],{"class":41},[35,41563,41564,41566,41568],{"class":37,"line":17215},[35,41565,34956],{"class":359},[35,41567,544],{"class":495},[35,41569,34961],{"class":359},[35,41571,41572,41574,41576],{"class":37,"line":17220},[35,41573,34966],{"class":359},[35,41575,544],{"class":495},[35,41577,34971],{"class":359},[35,41579,41580,41582,41584,41586,41588,41590,41592,41594],{"class":37,"line":17233},[35,41581,34976],{"class":58},[35,41583,499],{"class":359},[35,41585,34981],{"class":306},[35,41587,34984],{"class":359},[35,41589,34987],{"class":306},[35,41591,872],{"class":359},[35,41593,34992],{"class":306},[35,41595,34995],{"class":359},[465,41597,41599],{"id":41598},"_23googlenet","2.3.GoogLeNet",[22332,41601,41603],{"id":41602},"_231原理","2.3.1.原理",[14,41605,41606],{},[17,41607,41608],{},"网络结构",[21,41610,41611],{},[1823,41612],{"alt":30,"src":41613},"\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",[21,41615,41616],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[21,41618,41619],{},[1823,41620],{"alt":30,"src":41621},"\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",[21,41623,41624],{},[1823,41625],{"alt":30,"src":41626},"\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",[21,41628,41629],{},[1823,41630],{"alt":30,"src":41631},"\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",[14,41633,41634],{"start":45},[17,41635,41636],{},"1x1卷积的优点",[21,41638,41639],{},[1823,41640],{"alt":30,"src":41641},"\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",[14,41643,41644],{"start":55},[17,41645,41646],{},"全局平均池化层优点",[21,41648,41649],{},[1823,41650],{"alt":30,"src":41651},"\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",[21,41653,41654],{},[1823,41655],{"alt":30,"src":41656},"\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",[14,41658,41659],{"start":65},[17,41660,41661],{},"参数详细描述",[21,41663,41664],{},[1823,41665],{"alt":30,"src":41666},"\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",[21,41668,41669],{},[1823,41670],{"alt":30,"src":41671},"\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",[21,41673,41674],{},[1823,41675],{"alt":30,"src":41676},"\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",[21,41678,41679],{},[1823,41680],{"alt":30,"src":41681},"\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",[21,41683,41684],{},[1823,41685],{"alt":30,"src":41686},"\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",[21,41688,41689],{},[1823,41690],{"alt":30,"src":41691},"\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",[21,41693,41694],{},[1823,41695],{"alt":30,"src":41696},"\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",[21,41698,41699],{},[1823,41700],{"alt":30,"src":41701},"\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",[21,41703,41704],{},[1823,41705],{"alt":30,"src":41706},"\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",[21,41708,41709],{},[1823,41710],{"alt":30,"src":41711},"\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",[21,41713,41714],{},[1823,41715],{"alt":30,"src":41716},"\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",[21,41718,41719],{},[1823,41720],{"alt":30,"src":41721},"\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",[21,41723,41724],{},[1823,41725],{"alt":30,"src":41726},"\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",[21,41728,41729],{},[1823,41730],{"alt":30,"src":41731},"\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",[21,41733,41734],{},[1823,41735],{"alt":30,"src":41736},"\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",[21,41738,41739],{},[1823,41740],{"alt":30,"src":41741},"\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",[21,41743,41744],{},[1823,41745],{"alt":30,"src":41746},"\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",[21,41748,41749],{},[1823,41750],{"alt":30,"src":41751},"\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",[21,41753,41754],{},[1823,41755],{"alt":30,"src":41756},"\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",[21,41758,41759],{},[1823,41760],{"alt":30,"src":41761},"\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",[21,41763,41764],{},[1823,41765],{"alt":30,"src":41766},"\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",[22332,41768,41770],{"id":41769},"_232代码实现","2.3.2.代码实现",[14,41772,41773],{},[17,41774,31037],{},[21,41776,41777],{},"根据原理一步一步搭建即可",[25,41779,41781],{"className":30704,"code":41780,"language":30706,"meta":30,"style":30},"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",[32,41782,41783,41789,41799,41809,41813,41830,41839,41854,41864,41869,41902,41907,41944,41991,41996,42032,42079,42084,42089,42124,42156,42160,42168,42184,42208,42233,42254,42259,42274,42278,42282,42287,42304,42309,42318,42333,42344,42388,42392,42420,42424,42435,42463,42467,42504,42508,42536,42540,42551,42587,42619,42647,42651,42662,42696,42728,42760,42793,42827,42855,42859,42870,42903,42935,42949,42953,42966,42970,42975,42987,42995,43017,43022,43027,43032,43037,43042,43047,43061,43069,43078,43091,43106,43115,43119,43127,43138,43149,43160,43171,43182,43188,43192,43197,43209,43229,43238],{"__ignoreMap":30},[35,41784,41785,41787],{"class":37,"line":38},[35,41786,30718],{"class":495},[35,41788,30721],{"class":359},[35,41790,41791,41793,41795,41797],{"class":37,"line":45},[35,41792,31063],{"class":495},[35,41794,31066],{"class":359},[35,41796,30718],{"class":495},[35,41798,31071],{"class":359},[35,41800,41801,41803,41805,41807],{"class":37,"line":55},[35,41802,31063],{"class":495},[35,41804,31083],{"class":359},[35,41806,30718],{"class":495},[35,41808,31088],{"class":359},[35,41810,41811],{"class":37,"line":65},[35,41812,141],{"emptyLinePlaceholder":140},[35,41814,41815,41817,41820,41822,41824,41826,41828],{"class":37,"line":74},[35,41816,15028],{"class":495},[35,41818,41819],{"class":48}," Inception",[35,41821,499],{"class":359},[35,41823,31104],{"class":48},[35,41825,1052],{"class":359},[35,41827,31109],{"class":48},[35,41829,31112],{"class":359},[35,41831,41832,41834,41836],{"class":37,"line":83},[35,41833,31127],{"class":495},[35,41835,31130],{"class":58},[35,41837,41838],{"class":359},"(self,in_channels,c1,c2,c3,c4):\n",[35,41840,41841,41843,41846,41848,41850,41852],{"class":37,"line":92},[35,41842,31143],{"class":58},[35,41844,41845],{"class":359},"(Inception,",[35,41847,31149],{"class":58},[35,41849,31152],{"class":359},[35,41851,31155],{"class":58},[35,41853,2317],{"class":359},[35,41855,41856,41858,41860,41862],{"class":37,"line":101},[35,41857,31171],{"class":58},[35,41859,35097],{"class":359},[35,41861,544],{"class":495},[35,41863,35102],{"class":359},[35,41865,41866],{"class":37,"line":110},[35,41867,41868],{"class":41},"        # 路线1：定义1*1卷积\n",[35,41870,41871,41873,41876,41878,41880,41882,41884,41887,41889,41891,41894,41896,41898,41900],{"class":37,"line":119},[35,41872,31171],{"class":58},[35,41874,41875],{"class":359},".p1_1",[35,41877,544],{"class":495},[35,41879,31179],{"class":359},[35,41881,31182],{"class":5550},[35,41883,544],{"class":495},[35,41885,41886],{"class":359},"in_channels,",[35,41888,31191],{"class":5550},[35,41890,544],{"class":495},[35,41892,41893],{"class":359},"c1,",[35,41895,31200],{"class":5550},[35,41897,544],{"class":495},[35,41899,713],{"class":58},[35,41901,505],{"class":359},[35,41903,41904],{"class":37,"line":128},[35,41905,41906],{"class":41},"        # 路线2：定义1*1卷积和3*3\n",[35,41908,41909,41911,41914,41916,41918,41920,41922,41924,41926,41928,41931,41933,41936,41938,41940,41942],{"class":37,"line":137},[35,41910,31171],{"class":58},[35,41912,41913],{"class":359},".p2_1",[35,41915,544],{"class":495},[35,41917,31179],{"class":359},[35,41919,31182],{"class":5550},[35,41921,544],{"class":495},[35,41923,41886],{"class":359},[35,41925,31191],{"class":5550},[35,41927,544],{"class":495},[35,41929,41930],{"class":359},"c2[",[35,41932,687],{"class":58},[35,41934,41935],{"class":359},"],",[35,41937,31200],{"class":5550},[35,41939,544],{"class":495},[35,41941,713],{"class":58},[35,41943,505],{"class":359},[35,41945,41946,41948,41951,41953,41955,41957,41959,41961,41963,41965,41967,41969,41971,41973,41975,41977,41979,41981,41983,41985,41987,41989],{"class":37,"line":144},[35,41947,31171],{"class":58},[35,41949,41950],{"class":359},".p2_2",[35,41952,544],{"class":495},[35,41954,31179],{"class":359},[35,41956,31182],{"class":5550},[35,41958,544],{"class":495},[35,41960,41930],{"class":359},[35,41962,687],{"class":58},[35,41964,41935],{"class":359},[35,41966,31191],{"class":5550},[35,41968,544],{"class":495},[35,41970,41930],{"class":359},[35,41972,713],{"class":58},[35,41974,41935],{"class":359},[35,41976,31200],{"class":5550},[35,41978,544],{"class":495},[35,41980,568],{"class":58},[35,41982,872],{"class":359},[35,41984,31209],{"class":5550},[35,41986,544],{"class":495},[35,41988,713],{"class":58},[35,41990,505],{"class":359},[35,41992,41993],{"class":37,"line":150},[35,41994,41995],{"class":41},"        # 路线3：定义1*1卷积和5*5\n",[35,41997,41998,42000,42003,42005,42007,42009,42011,42013,42015,42017,42020,42022,42024,42026,42028,42030],{"class":37,"line":159},[35,41999,31171],{"class":58},[35,42001,42002],{"class":359},".p3_1",[35,42004,544],{"class":495},[35,42006,31179],{"class":359},[35,42008,31182],{"class":5550},[35,42010,544],{"class":495},[35,42012,41886],{"class":359},[35,42014,31191],{"class":5550},[35,42016,544],{"class":495},[35,42018,42019],{"class":359},"c3[",[35,42021,687],{"class":58},[35,42023,41935],{"class":359},[35,42025,31200],{"class":5550},[35,42027,544],{"class":495},[35,42029,713],{"class":58},[35,42031,505],{"class":359},[35,42033,42034,42036,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077],{"class":37,"line":168},[35,42035,31171],{"class":58},[35,42037,42038],{"class":359},".p3_2",[35,42040,544],{"class":495},[35,42042,31179],{"class":359},[35,42044,31182],{"class":5550},[35,42046,544],{"class":495},[35,42048,42019],{"class":359},[35,42050,687],{"class":58},[35,42052,41935],{"class":359},[35,42054,31191],{"class":5550},[35,42056,544],{"class":495},[35,42058,42019],{"class":359},[35,42060,713],{"class":58},[35,42062,41935],{"class":359},[35,42064,31200],{"class":5550},[35,42066,544],{"class":495},[35,42068,372],{"class":58},[35,42070,872],{"class":359},[35,42072,31209],{"class":5550},[35,42074,544],{"class":495},[35,42076,574],{"class":58},[35,42078,505],{"class":359},[35,42080,42081],{"class":37,"line":177},[35,42082,42083],{"class":41},"        # 路线4：定义3*3最大池化和1*1卷积\n",[35,42085,42086],{"class":37,"line":182},[35,42087,42088],{"class":41},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[35,42090,42091,42093,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122],{"class":37,"line":188},[35,42092,31171],{"class":58},[35,42094,42095],{"class":359},".p4_1",[35,42097,544],{"class":495},[35,42099,35155],{"class":359},[35,42101,31200],{"class":5550},[35,42103,544],{"class":495},[35,42105,568],{"class":58},[35,42107,872],{"class":359},[35,42109,31255],{"class":5550},[35,42111,544],{"class":495},[35,42113,713],{"class":58},[35,42115,872],{"class":359},[35,42117,31209],{"class":5550},[35,42119,544],{"class":495},[35,42121,713],{"class":58},[35,42123,505],{"class":359},[35,42125,42126,42128,42131,42133,42135,42137,42139,42141,42143,42145,42148,42150,42152,42154],{"class":37,"line":197},[35,42127,31171],{"class":58},[35,42129,42130],{"class":359},".p4_2",[35,42132,544],{"class":495},[35,42134,31179],{"class":359},[35,42136,31182],{"class":5550},[35,42138,544],{"class":495},[35,42140,41886],{"class":359},[35,42142,31191],{"class":5550},[35,42144,544],{"class":495},[35,42146,42147],{"class":359},"c4,",[35,42149,31200],{"class":5550},[35,42151,544],{"class":495},[35,42153,713],{"class":58},[35,42155,505],{"class":359},[35,42157,42158],{"class":37,"line":206},[35,42159,141],{"emptyLinePlaceholder":140},[35,42161,42162,42164,42166],{"class":37,"line":215},[35,42163,31127],{"class":495},[35,42165,31419],{"class":48},[35,42167,31422],{"class":359},[35,42169,42170,42173,42175,42177,42179,42181],{"class":37,"line":224},[35,42171,42172],{"class":359},"        p1",[35,42174,544],{"class":495},[35,42176,31149],{"class":58},[35,42178,35510],{"class":359},[35,42180,31149],{"class":58},[35,42182,42183],{"class":359},".p1_1(x))\n",[35,42185,42186,42188,42190,42192,42194,42196,42199,42201,42203,42205],{"class":37,"line":233},[35,42187,7419],{"class":359},[35,42189,544],{"class":495},[35,42191,31149],{"class":58},[35,42193,35510],{"class":359},[35,42195,31149],{"class":58},[35,42197,42198],{"class":359},".p2_2(",[35,42200,31149],{"class":58},[35,42202,35510],{"class":359},[35,42204,31149],{"class":58},[35,42206,42207],{"class":359},".p2_1(x))))\n",[35,42209,42210,42213,42215,42217,42219,42221,42224,42226,42228,42230],{"class":37,"line":238},[35,42211,42212],{"class":359},"        p3",[35,42214,544],{"class":495},[35,42216,31149],{"class":58},[35,42218,35510],{"class":359},[35,42220,31149],{"class":58},[35,42222,42223],{"class":359},".p3_2(",[35,42225,31149],{"class":58},[35,42227,35510],{"class":359},[35,42229,31149],{"class":58},[35,42231,42232],{"class":359},".p3_1(x))))\n",[35,42234,42235,42238,42240,42242,42244,42246,42249,42251],{"class":37,"line":244},[35,42236,42237],{"class":359},"        p4",[35,42239,544],{"class":495},[35,42241,31149],{"class":58},[35,42243,35510],{"class":359},[35,42245,31149],{"class":58},[35,42247,42248],{"class":359},".p4_2(",[35,42250,31149],{"class":58},[35,42252,42253],{"class":359},".p4_1(x)))\n",[35,42255,42256],{"class":37,"line":253},[35,42257,42258],{"class":41},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[35,42260,42261,42263,42266,42268,42270,42272],{"class":37,"line":262},[35,42262,15086],{"class":495},[35,42264,42265],{"class":359}," torch.cat((p1,p2,p3,p4),",[35,42267,33011],{"class":5550},[35,42269,544],{"class":495},[35,42271,713],{"class":58},[35,42273,505],{"class":359},[35,42275,42276],{"class":37,"line":271},[35,42277,141],{"emptyLinePlaceholder":140},[35,42279,42280],{"class":37,"line":280},[35,42281,141],{"emptyLinePlaceholder":140},[35,42283,42284],{"class":37,"line":289},[35,42285,42286],{"class":41},"# 搭建GoogLeNet网络\n",[35,42288,42289,42291,42294,42296,42298,42300,42302],{"class":37,"line":294},[35,42290,15028],{"class":495},[35,42292,42293],{"class":48}," GoogLeNet",[35,42295,499],{"class":359},[35,42297,31104],{"class":48},[35,42299,1052],{"class":359},[35,42301,31109],{"class":48},[35,42303,31112],{"class":359},[35,42305,42306],{"class":37,"line":300},[35,42307,42308],{"class":41},"    # 必须把Inception导入到里边\n",[35,42310,42311,42313,42315],{"class":37,"line":313},[35,42312,31127],{"class":495},[35,42314,31130],{"class":58},[35,42316,42317],{"class":359},"(self,Inception):\n",[35,42319,42320,42322,42325,42327,42329,42331],{"class":37,"line":324},[35,42321,31143],{"class":58},[35,42323,42324],{"class":359},"(GoogLeNet,",[35,42326,31149],{"class":58},[35,42328,31152],{"class":359},[35,42330,31155],{"class":58},[35,42332,2317],{"class":359},[35,42334,42335,42337,42340,42342],{"class":37,"line":2955},[35,42336,31171],{"class":58},[35,42338,42339],{"class":359},".b1",[35,42341,544],{"class":495},[35,42343,38335],{"class":359},[35,42345,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386],{"class":37,"line":8282},[35,42347,38340],{"class":359},[35,42349,31182],{"class":5550},[35,42351,544],{"class":495},[35,42353,713],{"class":58},[35,42355,872],{"class":359},[35,42357,31191],{"class":5550},[35,42359,544],{"class":495},[35,42361,699],{"class":58},[35,42363,872],{"class":359},[35,42365,31200],{"class":5550},[35,42367,544],{"class":495},[35,42369,863],{"class":58},[35,42371,872],{"class":359},[35,42373,31255],{"class":5550},[35,42375,544],{"class":495},[35,42377,574],{"class":58},[35,42379,872],{"class":359},[35,42381,31209],{"class":5550},[35,42383,544],{"class":495},[35,42385,568],{"class":58},[35,42387,38373],{"class":359},[35,42389,42390],{"class":37,"line":8306},[35,42391,38378],{"class":359},[35,42393,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418],{"class":37,"line":8311},[35,42395,38423],{"class":359},[35,42397,31200],{"class":5550},[35,42399,544],{"class":495},[35,42401,568],{"class":58},[35,42403,872],{"class":359},[35,42405,31255],{"class":5550},[35,42407,544],{"class":495},[35,42409,574],{"class":58},[35,42411,872],{"class":359},[35,42413,31209],{"class":5550},[35,42415,544],{"class":495},[35,42417,713],{"class":58},[35,42419,505],{"class":359},[35,42421,42422],{"class":37,"line":8317},[35,42423,38452],{"class":359},[35,42425,42426,42428,42431,42433],{"class":37,"line":8344},[35,42427,31171],{"class":58},[35,42429,42430],{"class":359},".b2",[35,42432,544],{"class":495},[35,42434,38335],{"class":359},[35,42436,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461],{"class":37,"line":8349},[35,42438,38340],{"class":359},[35,42440,31182],{"class":5550},[35,42442,544],{"class":495},[35,42444,699],{"class":58},[35,42446,872],{"class":359},[35,42448,31191],{"class":5550},[35,42450,544],{"class":495},[35,42452,699],{"class":58},[35,42454,872],{"class":359},[35,42456,31200],{"class":5550},[35,42458,544],{"class":495},[35,42460,713],{"class":58},[35,42462,38373],{"class":359},[35,42464,42465],{"class":37,"line":8355},[35,42466,38378],{"class":359},[35,42468,42469,42471,42473,42475,42477,42479,42481,42483,42486,42488,42490,42492,42494,42496,42498,42500,42502],{"class":37,"line":8367},[35,42470,38340],{"class":359},[35,42472,31182],{"class":5550},[35,42474,544],{"class":495},[35,42476,699],{"class":58},[35,42478,872],{"class":359},[35,42480,31191],{"class":5550},[35,42482,544],{"class":495},[35,42484,42485],{"class":58},"192",[35,42487,872],{"class":359},[35,42489,31200],{"class":5550},[35,42491,544],{"class":495},[35,42493,568],{"class":58},[35,42495,872],{"class":359},[35,42497,31209],{"class":5550},[35,42499,544],{"class":495},[35,42501,713],{"class":58},[35,42503,38373],{"class":359},[35,42505,42506],{"class":37,"line":8379},[35,42507,38378],{"class":359},[35,42509,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534],{"class":37,"line":8391},[35,42511,38423],{"class":359},[35,42513,31200],{"class":5550},[35,42515,544],{"class":495},[35,42517,568],{"class":58},[35,42519,872],{"class":359},[35,42521,31255],{"class":5550},[35,42523,544],{"class":495},[35,42525,574],{"class":58},[35,42527,872],{"class":359},[35,42529,31209],{"class":5550},[35,42531,544],{"class":495},[35,42533,713],{"class":58},[35,42535,505],{"class":359},[35,42537,42538],{"class":37,"line":10050},[35,42539,38452],{"class":359},[35,42541,42542,42544,42547,42549],{"class":37,"line":10075},[35,42543,31171],{"class":58},[35,42545,42546],{"class":359},".b3",[35,42548,544],{"class":495},[35,42550,38335],{"class":359},[35,42552,42553,42556,42558,42560,42562,42565,42567,42569,42571,42574,42576,42578,42580,42583,42585],{"class":37,"line":10098},[35,42554,42555],{"class":359},"            Inception(",[35,42557,42485],{"class":58},[35,42559,872],{"class":359},[35,42561,699],{"class":58},[35,42563,42564],{"class":359},",(",[35,42566,705],{"class":58},[35,42568,872],{"class":359},[35,42570,32396],{"class":58},[35,42572,42573],{"class":359},"),(",[35,42575,1095],{"class":58},[35,42577,872],{"class":359},[35,42579,693],{"class":58},[35,42581,42582],{"class":359},"),",[35,42584,693],{"class":58},[35,42586,38373],{"class":359},[35,42588,42589,42591,42593,42595,42597,42599,42601,42603,42605,42607,42609,42611,42613,42615,42617],{"class":37,"line":10122},[35,42590,42555],{"class":359},[35,42592,35196],{"class":58},[35,42594,872],{"class":359},[35,42596,32396],{"class":58},[35,42598,42564],{"class":359},[35,42600,32396],{"class":58},[35,42602,872],{"class":359},[35,42604,42485],{"class":58},[35,42606,42573],{"class":359},[35,42608,693],{"class":58},[35,42610,872],{"class":359},[35,42612,705],{"class":58},[35,42614,42582],{"class":359},[35,42616,699],{"class":58},[35,42618,38373],{"class":359},[35,42620,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639,42641,42643,42645],{"class":37,"line":10127},[35,42622,38423],{"class":359},[35,42624,31200],{"class":5550},[35,42626,544],{"class":495},[35,42628,568],{"class":58},[35,42630,872],{"class":359},[35,42632,31255],{"class":5550},[35,42634,544],{"class":495},[35,42636,574],{"class":58},[35,42638,872],{"class":359},[35,42640,31209],{"class":5550},[35,42642,544],{"class":495},[35,42644,713],{"class":58},[35,42646,505],{"class":359},[35,42648,42649],{"class":37,"line":10132},[35,42650,38452],{"class":359},[35,42652,42653,42655,42658,42660],{"class":37,"line":10137},[35,42654,31171],{"class":58},[35,42656,42657],{"class":359},".b4",[35,42659,544],{"class":495},[35,42661,38335],{"class":359},[35,42663,42664,42666,42669,42671,42673,42675,42677,42679,42682,42684,42686,42688,42690,42692,42694],{"class":37,"line":10146},[35,42665,42555],{"class":359},[35,42667,42668],{"class":58},"480",[35,42670,872],{"class":359},[35,42672,42485],{"class":58},[35,42674,42564],{"class":359},[35,42676,705],{"class":58},[35,42678,872],{"class":359},[35,42680,42681],{"class":58},"208",[35,42683,42573],{"class":359},[35,42685,1095],{"class":58},[35,42687,872],{"class":359},[35,42689,1101],{"class":58},[35,42691,42582],{"class":359},[35,42693,699],{"class":58},[35,42695,38373],{"class":359},[35,42697,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724,42726],{"class":37,"line":10151},[35,42699,42555],{"class":359},[35,42701,38783],{"class":58},[35,42703,872],{"class":359},[35,42705,21382],{"class":58},[35,42707,42564],{"class":359},[35,42709,1112],{"class":58},[35,42711,872],{"class":359},[35,42713,31827],{"class":58},[35,42715,42573],{"class":359},[35,42717,1294],{"class":58},[35,42719,872],{"class":359},[35,42721,699],{"class":58},[35,42723,42582],{"class":359},[35,42725,699],{"class":58},[35,42727,38373],{"class":359},[35,42729,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752,42754,42756,42758],{"class":37,"line":10157},[35,42731,42555],{"class":359},[35,42733,38783],{"class":58},[35,42735,872],{"class":359},[35,42737,32396],{"class":58},[35,42739,42564],{"class":359},[35,42741,32396],{"class":58},[35,42743,872],{"class":359},[35,42745,35196],{"class":58},[35,42747,42573],{"class":359},[35,42749,1294],{"class":58},[35,42751,872],{"class":359},[35,42753,699],{"class":58},[35,42755,42582],{"class":359},[35,42757,699],{"class":58},[35,42759,38373],{"class":359},[35,42761,42762,42764,42766,42768,42770,42772,42774,42776,42779,42781,42783,42785,42787,42789,42791],{"class":37,"line":10178},[35,42763,42555],{"class":359},[35,42765,38783],{"class":58},[35,42767,872],{"class":359},[35,42769,1112],{"class":58},[35,42771,42564],{"class":359},[35,42773,32396],{"class":58},[35,42775,872],{"class":359},[35,42777,42778],{"class":58},"288",[35,42780,42573],{"class":359},[35,42782,693],{"class":58},[35,42784,872],{"class":359},[35,42786,699],{"class":58},[35,42788,42582],{"class":359},[35,42790,699],{"class":58},[35,42792,38373],{"class":359},[35,42794,42795,42797,42800,42802,42804,42806,42808,42810,42813,42815,42817,42819,42821,42823,42825],{"class":37,"line":10184},[35,42796,42555],{"class":359},[35,42798,42799],{"class":58},"528",[35,42801,872],{"class":359},[35,42803,35196],{"class":58},[35,42805,42564],{"class":359},[35,42807,21382],{"class":58},[35,42809,872],{"class":359},[35,42811,42812],{"class":58},"320",[35,42814,42573],{"class":359},[35,42816,693],{"class":58},[35,42818,872],{"class":359},[35,42820,32396],{"class":58},[35,42822,42582],{"class":359},[35,42824,32396],{"class":58},[35,42826,38373],{"class":359},[35,42828,42829,42831,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853],{"class":37,"line":10198},[35,42830,38423],{"class":359},[35,42832,31200],{"class":5550},[35,42834,544],{"class":495},[35,42836,568],{"class":58},[35,42838,872],{"class":359},[35,42840,31255],{"class":5550},[35,42842,544],{"class":495},[35,42844,574],{"class":58},[35,42846,872],{"class":359},[35,42848,31209],{"class":5550},[35,42850,544],{"class":495},[35,42852,713],{"class":58},[35,42854,505],{"class":359},[35,42856,42857],{"class":37,"line":10204},[35,42858,38452],{"class":359},[35,42860,42861,42863,42866,42868],{"class":37,"line":10231},[35,42862,31171],{"class":58},[35,42864,42865],{"class":359},".b5",[35,42867,544],{"class":495},[35,42869,38335],{"class":359},[35,42871,42872,42874,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901],{"class":37,"line":10240},[35,42873,42555],{"class":359},[35,42875,42876],{"class":58},"832",[35,42878,872],{"class":359},[35,42880,35196],{"class":58},[35,42882,42564],{"class":359},[35,42884,21382],{"class":58},[35,42886,872],{"class":359},[35,42888,42812],{"class":58},[35,42890,42573],{"class":359},[35,42892,693],{"class":58},[35,42894,872],{"class":359},[35,42896,32396],{"class":58},[35,42898,42582],{"class":359},[35,42900,32396],{"class":58},[35,42902,38373],{"class":359},[35,42904,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931,42933],{"class":37,"line":10246},[35,42906,42555],{"class":359},[35,42908,42876],{"class":58},[35,42910,872],{"class":359},[35,42912,35266],{"class":58},[35,42914,42564],{"class":359},[35,42916,42485],{"class":58},[35,42918,872],{"class":359},[35,42920,35266],{"class":58},[35,42922,42573],{"class":359},[35,42924,1101],{"class":58},[35,42926,872],{"class":359},[35,42928,32396],{"class":58},[35,42930,42582],{"class":359},[35,42932,32396],{"class":58},[35,42934,38373],{"class":359},[35,42936,42937,42940,42942,42944,42946],{"class":37,"line":10254},[35,42938,42939],{"class":359},"            nn.AdaptiveAvgPool2d((",[35,42941,713],{"class":58},[35,42943,872],{"class":359},[35,42945,713],{"class":58},[35,42947,42948],{"class":359},")),\n",[35,42950,42951],{"class":37,"line":10259},[35,42952,39116],{"class":359},[35,42954,42955,42957,42960,42962,42964],{"class":37,"line":16938},[35,42956,39121],{"class":359},[35,42958,42959],{"class":58},"1024",[35,42961,872],{"class":359},[35,42963,940],{"class":58},[35,42965,505],{"class":359},[35,42967,42968],{"class":37,"line":16944},[35,42969,38452],{"class":359},[35,42971,42972],{"class":37,"line":16967},[35,42973,42974],{"class":41},"        # 对模型参数初始化\n",[35,42976,42977,42979,42981,42983,42985],{"class":37,"line":16973},[35,42978,3737],{"class":495},[35,42980,39194],{"class":359},[35,42982,26374],{"class":495},[35,42984,39199],{"class":58},[35,42986,39202],{"class":359},[35,42988,42989,42991,42993],{"class":37,"line":16996},[35,42990,4976],{"class":495},[35,42992,39214],{"class":58},[35,42994,39217],{"class":359},[35,42996,42997,42999,43002,43004,43007,43009,43011,43013,43015],{"class":37,"line":17010},[35,42998,39227],{"class":359},[35,43000,43001],{"class":5550},"mode",[35,43003,544],{"class":495},[35,43005,43006],{"class":306},"'fan_out'",[35,43008,872],{"class":359},[35,43010,39230],{"class":5550},[35,43012,544],{"class":495},[35,43014,39235],{"class":306},[35,43016,505],{"class":359},[35,43018,43019],{"class":37,"line":17030},[35,43020,43021],{"class":41},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[35,43023,43024],{"class":37,"line":17036},[35,43025,43026],{"class":41},"                # ② mode = 'fan_out'决定使用的fan值：\n",[35,43028,43029],{"class":37,"line":17047},[35,43030,43031],{"class":41},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[35,43033,43034],{"class":37,"line":17070},[35,43035,43036],{"class":41},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[35,43038,43039],{"class":37,"line":17092},[35,43040,43041],{"class":41},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[35,43043,43044],{"class":37,"line":17097},[35,43045,43046],{"class":41},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[35,43048,43049,43051,43053,43055,43057,43059],{"class":37,"line":17103},[35,43050,39247],{"class":495},[35,43052,39250],{"class":359},[35,43054,39253],{"class":495},[35,43056,39256],{"class":495},[35,43058,39259],{"class":58},[35,43060,4073],{"class":359},[35,43062,43063,43065,43067],{"class":37,"line":17117},[35,43064,39271],{"class":359},[35,43066,687],{"class":58},[35,43068,505],{"class":359},[35,43070,43071,43074,43076],{"class":37,"line":17130},[35,43072,43073],{"class":495},"                elif",[35,43075,39214],{"class":58},[35,43077,39290],{"class":359},[35,43079,43080,43083,43085,43087,43089],{"class":37,"line":17135},[35,43081,43082],{"class":359},"                    nn.init.normal_(m.weight,",[35,43084,687],{"class":58},[35,43086,872],{"class":359},[35,43088,39312],{"class":58},[35,43090,505],{"class":359},[35,43092,43093,43096,43098,43100,43102,43104],{"class":37,"line":17149},[35,43094,43095],{"class":495},"                    if",[35,43097,39250],{"class":359},[35,43099,39253],{"class":495},[35,43101,39256],{"class":495},[35,43103,39259],{"class":58},[35,43105,4073],{"class":359},[35,43107,43108,43111,43113],{"class":37,"line":17154},[35,43109,43110],{"class":359},"                        nn.init.constant_(m.bias,",[35,43112,687],{"class":58},[35,43114,505],{"class":359},[35,43116,43117],{"class":37,"line":17160},[35,43118,35491],{"class":41},[35,43120,43121,43123,43125],{"class":37,"line":17165},[35,43122,31127],{"class":495},[35,43124,31419],{"class":48},[35,43126,31422],{"class":359},[35,43128,43129,43131,43133,43135],{"class":37,"line":17179},[35,43130,31427],{"class":359},[35,43132,544],{"class":495},[35,43134,31149],{"class":58},[35,43136,43137],{"class":359},".b1(x)\n",[35,43139,43140,43142,43144,43146],{"class":37,"line":17184},[35,43141,31427],{"class":359},[35,43143,544],{"class":495},[35,43145,31149],{"class":58},[35,43147,43148],{"class":359},".b2(x)\n",[35,43150,43151,43153,43155,43157],{"class":37,"line":17189},[35,43152,31427],{"class":359},[35,43154,544],{"class":495},[35,43156,31149],{"class":58},[35,43158,43159],{"class":359},".b3(x)\n",[35,43161,43162,43164,43166,43168],{"class":37,"line":17203},[35,43163,31427],{"class":359},[35,43165,544],{"class":495},[35,43167,31149],{"class":58},[35,43169,43170],{"class":359},".b4(x)\n",[35,43172,43173,43175,43177,43179],{"class":37,"line":17215},[35,43174,31427],{"class":359},[35,43176,544],{"class":495},[35,43178,31149],{"class":58},[35,43180,43181],{"class":359},".b5(x)\n",[35,43183,43184,43186],{"class":37,"line":17220},[35,43185,15086],{"class":495},[35,43187,31535],{"class":359},[35,43189,43190],{"class":37,"line":17233},[35,43191,141],{"emptyLinePlaceholder":140},[35,43193,43194],{"class":37,"line":17238},[35,43195,43196],{"class":41},"# 模型展示\n",[35,43198,43199,43201,43203,43205,43207],{"class":37,"line":17243},[35,43200,1892],{"class":495},[35,43202,31546],{"class":58},[35,43204,3283],{"class":495},[35,43206,31551],{"class":306},[35,43208,4073],{"class":359},[35,43210,43211,43213,43215,43217,43219,43221,43223,43225,43227],{"class":37,"line":17248},[35,43212,31563],{"class":359},[35,43214,544],{"class":495},[35,43216,30777],{"class":359},[35,43218,31570],{"class":306},[35,43220,2054],{"class":495},[35,43222,31575],{"class":359},[35,43224,2051],{"class":495},[35,43226,30802],{"class":306},[35,43228,505],{"class":359},[35,43230,43231,43233,43235],{"class":37,"line":17261},[35,43232,31615],{"class":359},[35,43234,544],{"class":495},[35,43236,43237],{"class":359},"GoogLeNet(Inception).to(device)\n",[35,43239,43240,43242,43244,43246,43248,43250,43252,43254],{"class":37,"line":17266},[35,43241,31625],{"class":58},[35,43243,31628],{"class":359},[35,43245,713],{"class":58},[35,43247,872],{"class":359},[35,43249,31827],{"class":58},[35,43251,872],{"class":359},[35,43253,31827],{"class":58},[35,43255,31641],{"class":359},[14,43257,43258],{"start":45},[17,43259,39509],{},[25,43261,43263],{"className":30704,"code":43262,"language":30706,"meta":30,"style":30},"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",[32,43264,43265,43271,43277,43287,43293,43303,43313,43323,43333,43343,43347,43358,43368,43372,43376,43380,43388,43400,43410,43426,43436,43468,43482,43492,43502,43506,43516,43530,43540,43550,43560,43566,43570,43574,43578,43582,43586,43594,43614,43618,43622,43626,43630,43634,43650,43654,43658,43666,43670,43674,43682,43686,43690,43694,43702,43706,43710,43714,43718,43726,43730,43738,43742,43750,43754,43762,43766,43774,43778,43782,43790,43794,43798,43802,43814,43838,43852,43856,43860,43864,43872,43876,43884,43888,43896,43900,43908,43912,43920,43924,43932,43936,43948,43952,43960,43964,43972,43976,43980,43984,43988,43996,44000,44016,44020,44028,44032,44036,44040,44044,44048,44052,44056,44072,44076,44088,44092,44104,44108,44120,44124,44132,44136,44144,44148,44152,44156,44162,44166,44174,44178,44194,44198,44206,44210,44226,44238,44242,44254,44258,44262,44270,44274,44278,44286,44290,44298,44302,44310,44314,44318,44360,44402,44406,44410,44426,44430,44446,44450,44454,44462,44466,44470,44482,44520,44524,44528,44536,44540,44554,44564,44570,44576,44582,44588,44592,44596,44602,44606,44610,44618,44622,44640,44644,44648,44652,44668,44672,44676,44680,44684,44688,44708,44728,44732,44736,44740,44748,44756,44760,44776,44796,44816,44820,44824,44832,44840,44844,44848,44852,44864,44868,44878,44886,44903],{"__ignoreMap":30},[35,43266,43267,43269],{"class":37,"line":38},[35,43268,30718],{"class":495},[35,43270,32148],{"class":359},[35,43272,43273,43275],{"class":37,"line":45},[35,43274,30718],{"class":495},[35,43276,32155],{"class":359},[35,43278,43279,43281,43283,43285],{"class":37,"line":55},[35,43280,30718],{"class":495},[35,43282,32166],{"class":359},[35,43284,31709],{"class":495},[35,43286,32171],{"class":359},[35,43288,43289,43291],{"class":37,"line":65},[35,43290,30718],{"class":495},[35,43292,30721],{"class":359},[35,43294,43295,43297,43299,43301],{"class":37,"line":74},[35,43296,31063],{"class":495},[35,43298,31741],{"class":359},[35,43300,30718],{"class":495},[35,43302,32188],{"class":359},[35,43304,43305,43307,43309,43311],{"class":37,"line":83},[35,43306,31063],{"class":495},[35,43308,31694],{"class":359},[35,43310,30718],{"class":495},[35,43312,31699],{"class":359},[35,43314,43315,43317,43319,43321],{"class":37,"line":92},[35,43316,31063],{"class":495},[35,43318,31724],{"class":359},[35,43320,30718],{"class":495},[35,43322,31729],{"class":359},[35,43324,43325,43327,43329,43331],{"class":37,"line":101},[35,43326,30718],{"class":495},[35,43328,31741],{"class":359},[35,43330,31709],{"class":495},[35,43332,31746],{"class":359},[35,43334,43335,43337,43339,43341],{"class":37,"line":110},[35,43336,30718],{"class":495},[35,43338,31758],{"class":359},[35,43340,31709],{"class":495},[35,43342,31763],{"class":359},[35,43344,43345],{"class":37,"line":119},[35,43346,32233],{"class":41},[35,43348,43349,43351,43353,43355],{"class":37,"line":128},[35,43350,31063],{"class":495},[35,43352,32240],{"class":359},[35,43354,30718],{"class":495},[35,43356,43357],{"class":359}," GoogLeNet, Inception\n",[35,43359,43360,43362,43364,43366],{"class":37,"line":137},[35,43361,31063],{"class":495},[35,43363,31066],{"class":359},[35,43365,30718],{"class":495},[35,43367,31071],{"class":359},[35,43369,43370],{"class":37,"line":144},[35,43371,141],{"emptyLinePlaceholder":140},[35,43373,43374],{"class":37,"line":150},[35,43375,141],{"emptyLinePlaceholder":140},[35,43377,43378],{"class":37,"line":159},[35,43379,32268],{"class":41},[35,43381,43382,43384,43386],{"class":37,"line":168},[35,43383,32273],{"class":495},[35,43385,32276],{"class":48},[35,43387,32279],{"class":359},[35,43389,43390,43392,43394,43396,43398],{"class":37,"line":177},[35,43391,32284],{"class":359},[35,43393,544],{"class":495},[35,43395,31781],{"class":359},[35,43397,31789],{"class":306},[35,43399,31792],{"class":359},[35,43401,43402,43404,43406,43408],{"class":37,"line":182},[35,43403,32297],{"class":5550},[35,43405,544],{"class":495},[35,43407,31802],{"class":58},[35,43409,31792],{"class":359},[35,43411,43412,43414,43416,43418,43420,43422,43424],{"class":37,"line":188},[35,43413,32308],{"class":5550},[35,43415,544],{"class":495},[35,43417,31819],{"class":359},[35,43419,31822],{"class":5550},[35,43421,544],{"class":495},[35,43423,35775],{"class":58},[35,43425,31830],{"class":359},[35,43427,43428,43430,43432,43434],{"class":37,"line":197},[35,43429,32325],{"class":5550},[35,43431,544],{"class":495},[35,43433,31802],{"class":58},[35,43435,505],{"class":359},[35,43437,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456,43458,43460,43462,43464,43466],{"class":37,"line":206},[35,43439,32336],{"class":359},[35,43441,544],{"class":495},[35,43443,32341],{"class":359},[35,43445,32344],{"class":58},[35,43447,499],{"class":359},[35,43449,32349],{"class":58},[35,43451,949],{"class":495},[35,43453,7692],{"class":58},[35,43455,32356],{"class":359},[35,43457,32344],{"class":58},[35,43459,499],{"class":359},[35,43461,32363],{"class":58},[35,43463,949],{"class":495},[35,43465,7692],{"class":58},[35,43467,32370],{"class":359},[35,43469,43470,43472,43474,43476,43478,43480],{"class":37,"line":215},[35,43471,32375],{"class":359},[35,43473,544],{"class":495},[35,43475,32380],{"class":359},[35,43477,31863],{"class":5550},[35,43479,544],{"class":495},[35,43481,31868],{"class":359},[35,43483,43484,43486,43488,43490],{"class":37,"line":224},[35,43485,32391],{"class":5550},[35,43487,544],{"class":495},[35,43489,693],{"class":58},[35,43491,31792],{"class":359},[35,43493,43494,43496,43498,43500],{"class":37,"line":233},[35,43495,32403],{"class":5550},[35,43497,544],{"class":495},[35,43499,31802],{"class":58},[35,43501,31792],{"class":359},[35,43503,43504],{"class":37,"line":238},[35,43505,32414],{"class":41},[35,43507,43508,43510,43512,43514],{"class":37,"line":244},[35,43509,32419],{"class":5550},[35,43511,544],{"class":495},[35,43513,889],{"class":58},[35,43515,505],{"class":359},[35,43517,43518,43520,43522,43524,43526,43528],{"class":37,"line":253},[35,43519,32430],{"class":359},[35,43521,544],{"class":495},[35,43523,31860],{"class":359},[35,43525,31863],{"class":5550},[35,43527,544],{"class":495},[35,43529,32441],{"class":359},[35,43531,43532,43534,43536,43538],{"class":37,"line":262},[35,43533,32446],{"class":5550},[35,43535,544],{"class":495},[35,43537,693],{"class":58},[35,43539,31792],{"class":359},[35,43541,43542,43544,43546,43548],{"class":37,"line":271},[35,43543,32457],{"class":5550},[35,43545,544],{"class":495},[35,43547,31802],{"class":58},[35,43549,31792],{"class":359},[35,43551,43552,43554,43556,43558],{"class":37,"line":280},[35,43553,32468],{"class":5550},[35,43555,544],{"class":495},[35,43557,889],{"class":58},[35,43559,505],{"class":359},[35,43561,43562,43564],{"class":37,"line":289},[35,43563,4424],{"class":495},[35,43565,32481],{"class":359},[35,43567,43568],{"class":37,"line":294},[35,43569,141],{"emptyLinePlaceholder":140},[35,43571,43572],{"class":37,"line":300},[35,43573,32490],{"class":41},[35,43575,43576],{"class":37,"line":313},[35,43577,32495],{"class":41},[35,43579,43580],{"class":37,"line":324},[35,43581,141],{"emptyLinePlaceholder":140},[35,43583,43584],{"class":37,"line":2955},[35,43585,32504],{"class":41},[35,43587,43588,43590,43592],{"class":37,"line":8282},[35,43589,32273],{"class":495},[35,43591,32511],{"class":48},[35,43593,32514],{"class":359},[35,43595,43596,43598,43600,43602,43604,43606,43608,43610,43612],{"class":37,"line":8306},[35,43597,31563],{"class":359},[35,43599,544],{"class":495},[35,43601,30777],{"class":359},[35,43603,31570],{"class":306},[35,43605,2054],{"class":495},[35,43607,31575],{"class":359},[35,43609,2051],{"class":495},[35,43611,32533],{"class":306},[35,43613,505],{"class":359},[35,43615,43616],{"class":37,"line":8311},[35,43617,141],{"emptyLinePlaceholder":140},[35,43619,43620],{"class":37,"line":8317},[35,43621,141],{"emptyLinePlaceholder":140},[35,43623,43624],{"class":37,"line":8344},[35,43625,32548],{"class":41},[35,43627,43628],{"class":37,"line":8349},[35,43629,32553],{"class":41},[35,43631,43632],{"class":37,"line":8355},[35,43633,32558],{"class":41},[35,43635,43636,43638,43640,43642,43644,43646,43648],{"class":37,"line":8367},[35,43637,32563],{"class":359},[35,43639,544],{"class":495},[35,43641,32568],{"class":359},[35,43643,32571],{"class":5550},[35,43645,544],{"class":495},[35,43647,32576],{"class":58},[35,43649,505],{"class":359},[35,43651,43652],{"class":37,"line":8379},[35,43653,141],{"emptyLinePlaceholder":140},[35,43655,43656],{"class":37,"line":8391},[35,43657,32587],{"class":41},[35,43659,43660,43662,43664],{"class":37,"line":10050},[35,43661,32592],{"class":359},[35,43663,544],{"class":495},[35,43665,32597],{"class":359},[35,43667,43668],{"class":37,"line":10075},[35,43669,141],{"emptyLinePlaceholder":140},[35,43671,43672],{"class":37,"line":10098},[35,43673,32606],{"class":41},[35,43675,43676,43678,43680],{"class":37,"line":10122},[35,43677,31615],{"class":359},[35,43679,544],{"class":495},[35,43681,32615],{"class":359},[35,43683,43684],{"class":37,"line":10127},[35,43685,32620],{"class":41},[35,43687,43688],{"class":37,"line":10132},[35,43689,32625],{"class":41},[35,43691,43692],{"class":37,"line":10137},[35,43693,32630],{"class":41},[35,43695,43696,43698,43700],{"class":37,"line":10146},[35,43697,32635],{"class":359},[35,43699,544],{"class":495},[35,43701,32640],{"class":359},[35,43703,43704],{"class":37,"line":10151},[35,43705,141],{"emptyLinePlaceholder":140},[35,43707,43708],{"class":37,"line":10157},[35,43709,141],{"emptyLinePlaceholder":140},[35,43711,43712],{"class":37,"line":10178},[35,43713,32653],{"class":41},[35,43715,43716],{"class":37,"line":10184},[35,43717,32658],{"class":41},[35,43719,43720,43722,43724],{"class":37,"line":10198},[35,43721,32663],{"class":359},[35,43723,544],{"class":495},[35,43725,32668],{"class":58},[35,43727,43728],{"class":37,"line":10204},[35,43729,32673],{"class":41},[35,43731,43732,43734,43736],{"class":37,"line":10231},[35,43733,32678],{"class":359},[35,43735,544],{"class":495},[35,43737,32683],{"class":359},[35,43739,43740],{"class":37,"line":10240},[35,43741,32688],{"class":41},[35,43743,43744,43746,43748],{"class":37,"line":10246},[35,43745,32693],{"class":359},[35,43747,544],{"class":495},[35,43749,32683],{"class":359},[35,43751,43752],{"class":37,"line":10254},[35,43753,32702],{"class":41},[35,43755,43756,43758,43760],{"class":37,"line":10259},[35,43757,32707],{"class":359},[35,43759,544],{"class":495},[35,43761,32683],{"class":359},[35,43763,43764],{"class":37,"line":16938},[35,43765,32716],{"class":41},[35,43767,43768,43770,43772],{"class":37,"line":16944},[35,43769,32721],{"class":359},[35,43771,544],{"class":495},[35,43773,32683],{"class":359},[35,43775,43776],{"class":37,"line":16967},[35,43777,141],{"emptyLinePlaceholder":140},[35,43779,43780],{"class":37,"line":16973},[35,43781,32734],{"class":41},[35,43783,43784,43786,43788],{"class":37,"line":16996},[35,43785,32739],{"class":359},[35,43787,544],{"class":495},[35,43789,32744],{"class":359},[35,43791,43792],{"class":37,"line":17010},[35,43793,141],{"emptyLinePlaceholder":140},[35,43795,43796],{"class":37,"line":17030},[35,43797,141],{"emptyLinePlaceholder":140},[35,43799,43800],{"class":37,"line":17036},[35,43801,32757],{"class":41},[35,43803,43804,43806,43808,43810,43812],{"class":37,"line":17047},[35,43805,3535],{"class":495},[35,43807,32764],{"class":359},[35,43809,26374],{"class":495},[35,43811,32769],{"class":58},[35,43813,32772],{"class":359},[35,43815,43816,43818,43820,43822,43824,43826,43828,43830,43832,43834,43836],{"class":37,"line":17070},[35,43817,32777],{"class":58},[35,43819,499],{"class":359},[35,43821,32782],{"class":306},[35,43823,32785],{"class":58},[35,43825,1078],{"class":306},[35,43827,32785],{"class":58},[35,43829,747],{"class":306},[35,43831,32794],{"class":359},[35,43833,1026],{"class":495},[35,43835,713],{"class":58},[35,43837,30823],{"class":359},[35,43839,43840,43842,43844,43846,43848,43850],{"class":37,"line":17092},[35,43841,32777],{"class":58},[35,43843,499],{"class":359},[35,43845,32809],{"class":306},[35,43847,949],{"class":495},[35,43849,940],{"class":58},[35,43851,505],{"class":359},[35,43853,43854],{"class":37,"line":17097},[35,43855,141],{"emptyLinePlaceholder":140},[35,43857,43858],{"class":37,"line":17103},[35,43859,32824],{"class":41},[35,43861,43862],{"class":37,"line":17117},[35,43863,32829],{"class":41},[35,43865,43866,43868,43870],{"class":37,"line":17130},[35,43867,32834],{"class":359},[35,43869,544],{"class":495},[35,43871,32668],{"class":58},[35,43873,43874],{"class":37,"line":17135},[35,43875,32843],{"class":41},[35,43877,43878,43880,43882],{"class":37,"line":17149},[35,43879,32848],{"class":359},[35,43881,544],{"class":495},[35,43883,3419],{"class":58},[35,43885,43886],{"class":37,"line":17154},[35,43887,32857],{"class":41},[35,43889,43890,43892,43894],{"class":37,"line":17160},[35,43891,32862],{"class":359},[35,43893,544],{"class":495},[35,43895,32668],{"class":58},[35,43897,43898],{"class":37,"line":17165},[35,43899,32871],{"class":41},[35,43901,43902,43904,43906],{"class":37,"line":17179},[35,43903,32876],{"class":359},[35,43905,544],{"class":495},[35,43907,3419],{"class":58},[35,43909,43910],{"class":37,"line":17184},[35,43911,32885],{"class":41},[35,43913,43914,43916,43918],{"class":37,"line":17189},[35,43915,32890],{"class":359},[35,43917,544],{"class":495},[35,43919,3419],{"class":58},[35,43921,43922],{"class":37,"line":17203},[35,43923,32899],{"class":41},[35,43925,43926,43928,43930],{"class":37,"line":17215},[35,43927,32904],{"class":359},[35,43929,544],{"class":495},[35,43931,3419],{"class":58},[35,43933,43934],{"class":37,"line":17220},[35,43935,32913],{"class":41},[35,43937,43938,43940,43942,43944,43946],{"class":37,"line":17233},[35,43939,3737],{"class":495},[35,43941,31927],{"class":359},[35,43943,26374],{"class":495},[35,43945,31932],{"class":58},[35,43947,32926],{"class":359},[35,43949,43950],{"class":37,"line":17238},[35,43951,32931],{"class":41},[35,43953,43954,43956,43958],{"class":37,"line":17243},[35,43955,32936],{"class":359},[35,43957,544],{"class":495},[35,43959,32941],{"class":359},[35,43961,43962],{"class":37,"line":17248},[35,43963,32946],{"class":41},[35,43965,43966,43968,43970],{"class":37,"line":17261},[35,43967,32951],{"class":359},[35,43969,544],{"class":495},[35,43971,32956],{"class":359},[35,43973,43974],{"class":37,"line":17266},[35,43975,32962],{"class":41},[35,43977,43978],{"class":37,"line":32959},[35,43979,32968],{"class":359},[35,43981,43982],{"class":37,"line":32965},[35,43983,32974],{"class":41},[35,43985,43986],{"class":37,"line":32971},[35,43987,32980],{"class":41},[35,43989,43990,43992,43994],{"class":37,"line":32977},[35,43991,32986],{"class":359},[35,43993,544],{"class":495},[35,43995,32991],{"class":359},[35,43997,43998],{"class":37,"line":32983},[35,43999,32997],{"class":41},[35,44001,44002,44004,44006,44008,44010,44012,44014],{"class":37,"line":32994},[35,44003,33003],{"class":359},[35,44005,544],{"class":495},[35,44007,33008],{"class":359},[35,44009,33011],{"class":5550},[35,44011,544],{"class":495},[35,44013,713],{"class":58},[35,44015,505],{"class":359},[35,44017,44018],{"class":37,"line":33000},[35,44019,33023],{"class":41},[35,44021,44022,44024,44026],{"class":37,"line":33020},[35,44023,33029],{"class":359},[35,44025,544],{"class":495},[35,44027,33034],{"class":359},[35,44029,44030],{"class":37,"line":33026},[35,44031,33040],{"class":41},[35,44033,44034],{"class":37,"line":33037},[35,44035,33046],{"class":359},[35,44037,44038],{"class":37,"line":33043},[35,44039,33052],{"class":41},[35,44041,44042],{"class":37,"line":33049},[35,44043,33058],{"class":359},[35,44045,44046],{"class":37,"line":33055},[35,44047,33064],{"class":41},[35,44049,44050],{"class":37,"line":33061},[35,44051,33070],{"class":359},[35,44053,44054],{"class":37,"line":33067},[35,44055,33076],{"class":41},[35,44057,44058,44060,44062,44064,44066,44068,44070],{"class":37,"line":33073},[35,44059,33082],{"class":359},[35,44061,9811],{"class":495},[35,44063,33087],{"class":359},[35,44065,949],{"class":495},[35,44067,33092],{"class":359},[35,44069,687],{"class":58},[35,44071,505],{"class":359},[35,44073,44074],{"class":37,"line":33079},[35,44075,33102],{"class":41},[35,44077,44078,44080,44082,44084,44086],{"class":37,"line":33099},[35,44079,33108],{"class":359},[35,44081,9811],{"class":495},[35,44083,33113],{"class":359},[35,44085,3283],{"class":495},[35,44087,33118],{"class":359},[35,44089,44090],{"class":37,"line":33105},[35,44091,33124],{"class":41},[35,44093,44094,44096,44098,44100,44102],{"class":37,"line":33121},[35,44095,33130],{"class":359},[35,44097,9811],{"class":495},[35,44099,33092],{"class":359},[35,44101,687],{"class":58},[35,44103,505],{"class":359},[35,44105,44106],{"class":37,"line":33127},[35,44107,33144],{"class":41},[35,44109,44110,44112,44114,44116,44118],{"class":37,"line":33141},[35,44111,3737],{"class":495},[35,44113,33152],{"class":359},[35,44115,26374],{"class":495},[35,44117,31932],{"class":58},[35,44119,33159],{"class":359},[35,44121,44122],{"class":37,"line":33147},[35,44123,33165],{"class":41},[35,44125,44126,44128,44130],{"class":37,"line":33162},[35,44127,32936],{"class":359},[35,44129,544],{"class":495},[35,44131,32941],{"class":359},[35,44133,44134],{"class":37,"line":33168},[35,44135,33180],{"class":41},[35,44137,44138,44140,44142],{"class":37,"line":33177},[35,44139,32951],{"class":359},[35,44141,544],{"class":495},[35,44143,32956],{"class":359},[35,44145,44146],{"class":37,"line":33183},[35,44147,33195],{"class":41},[35,44149,44150],{"class":37,"line":33192},[35,44151,33201],{"class":359},[35,44153,44154],{"class":37,"line":33198},[35,44155,36682],{"class":41},[35,44157,44158,44160],{"class":37,"line":33204},[35,44159,33207],{"class":495},[35,44161,33210],{"class":359},[35,44163,44164],{"class":37,"line":33213},[35,44165,33216],{"class":41},[35,44167,44168,44170,44172],{"class":37,"line":33219},[35,44169,36697],{"class":359},[35,44171,544],{"class":495},[35,44173,32991],{"class":359},[35,44175,44176],{"class":37,"line":33230},[35,44177,33233],{"class":41},[35,44179,44180,44182,44184,44186,44188,44190,44192],{"class":37,"line":33236},[35,44181,36710],{"class":359},[35,44183,544],{"class":495},[35,44185,33008],{"class":359},[35,44187,33011],{"class":5550},[35,44189,544],{"class":495},[35,44191,713],{"class":58},[35,44193,505],{"class":359},[35,44195,44196],{"class":37,"line":33255},[35,44197,33258],{"class":41},[35,44199,44200,44202,44204],{"class":37,"line":33261},[35,44201,36731],{"class":359},[35,44203,544],{"class":495},[35,44205,33034],{"class":359},[35,44207,44208],{"class":37,"line":33272},[35,44209,33275],{"class":41},[35,44211,44212,44214,44216,44218,44220,44222,44224],{"class":37,"line":33278},[35,44213,36744],{"class":359},[35,44215,9811],{"class":495},[35,44217,36749],{"class":359},[35,44219,949],{"class":495},[35,44221,33092],{"class":359},[35,44223,687],{"class":58},[35,44225,505],{"class":359},[35,44227,44228,44230,44232,44234,44236],{"class":37,"line":33298},[35,44229,36762],{"class":359},[35,44231,9811],{"class":495},[35,44233,33113],{"class":359},[35,44235,3283],{"class":495},[35,44237,33118],{"class":359},[35,44239,44240],{"class":37,"line":33314},[35,44241,36775],{"class":41},[35,44243,44244,44246,44248,44250,44252],{"class":37,"line":33320},[35,44245,36780],{"class":359},[35,44247,9811],{"class":495},[35,44249,33092],{"class":359},[35,44251,687],{"class":58},[35,44253,505],{"class":359},[35,44255,44256],{"class":37,"line":33334},[35,44257,33337],{"class":41},[35,44259,44260],{"class":37,"line":33340},[35,44261,33343],{"class":41},[35,44263,44264,44266,44268],{"class":37,"line":33346},[35,44265,33349],{"class":359},[35,44267,1078],{"class":495},[35,44269,33354],{"class":359},[35,44271,44272],{"class":37,"line":33357},[35,44273,33360],{"class":41},[35,44275,44276],{"class":37,"line":33363},[35,44277,33366],{"class":41},[35,44279,44280,44282,44284],{"class":37,"line":33369},[35,44281,33372],{"class":359},[35,44283,1078],{"class":495},[35,44285,33354],{"class":359},[35,44287,44288],{"class":37,"line":33379},[35,44289,33382],{"class":41},[35,44291,44292,44294,44296],{"class":37,"line":33385},[35,44293,33388],{"class":359},[35,44295,1078],{"class":495},[35,44297,33393],{"class":359},[35,44299,44300],{"class":37,"line":33396},[35,44301,33399],{"class":41},[35,44303,44304,44306,44308],{"class":37,"line":33402},[35,44305,33405],{"class":359},[35,44307,1078],{"class":495},[35,44309,33393],{"class":359},[35,44311,44312],{"class":37,"line":33412},[35,44313,141],{"emptyLinePlaceholder":140},[35,44315,44316],{"class":37,"line":33417},[35,44317,33420],{"class":41},[35,44319,44320,44322,44324,44326,44328,44330,44332,44334,44336,44338,44340,44342,44344,44346,44348,44350,44352,44354,44356,44358],{"class":37,"line":33423},[35,44321,32777],{"class":58},[35,44323,499],{"class":359},[35,44325,3926],{"class":306},[35,44327,32785],{"class":58},[35,44329,33434],{"class":306},[35,44331,1390],{"class":58},[35,44333,33439],{"class":495},[35,44335,1440],{"class":58},[35,44337,33444],{"class":306},[35,44339,1390],{"class":58},[35,44341,33439],{"class":495},[35,44343,1440],{"class":58},[35,44345,3926],{"class":306},[35,44347,33455],{"class":359},[35,44349,1026],{"class":495},[35,44351,713],{"class":58},[35,44353,33462],{"class":359},[35,44355,1026],{"class":495},[35,44357,713],{"class":58},[35,44359,33469],{"class":359},[35,44361,44362,44364,44366,44368,44370,44372,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394,44396,44398,44400],{"class":37,"line":33472},[35,44363,32777],{"class":58},[35,44365,499],{"class":359},[35,44367,3926],{"class":306},[35,44369,32785],{"class":58},[35,44371,33483],{"class":306},[35,44373,1390],{"class":58},[35,44375,33439],{"class":495},[35,44377,1440],{"class":58},[35,44379,33492],{"class":306},[35,44381,1390],{"class":58},[35,44383,33439],{"class":495},[35,44385,1440],{"class":58},[35,44387,3926],{"class":306},[35,44389,33503],{"class":359},[35,44391,1026],{"class":495},[35,44393,713],{"class":58},[35,44395,33510],{"class":359},[35,44397,1026],{"class":495},[35,44399,713],{"class":58},[35,44401,33469],{"class":359},[35,44403,44404],{"class":37,"line":33519},[35,44405,141],{"emptyLinePlaceholder":140},[35,44407,44408],{"class":37,"line":33524},[35,44409,33527],{"class":41},[35,44411,44412,44414,44416,44418,44420,44422,44424],{"class":37,"line":33530},[35,44413,2837],{"class":495},[35,44415,33535],{"class":359},[35,44417,1026],{"class":495},[35,44419,713],{"class":58},[35,44421,1434],{"class":359},[35,44423,1454],{"class":495},[35,44425,33546],{"class":359},[35,44427,44428],{"class":37,"line":33549},[35,44429,33552],{"class":41},[35,44431,44432,44434,44436,44438,44440,44442,44444],{"class":37,"line":33555},[35,44433,33558],{"class":359},[35,44435,538],{"class":58},[35,44437,544],{"class":495},[35,44439,33565],{"class":359},[35,44441,1026],{"class":495},[35,44443,713],{"class":58},[35,44445,33572],{"class":359},[35,44447,44448],{"class":37,"line":33575},[35,44449,33578],{"class":41},[35,44451,44452],{"class":37,"line":33581},[35,44453,33584],{"class":41},[35,44455,44456,44458,44460],{"class":37,"line":33587},[35,44457,33590],{"class":359},[35,44459,544],{"class":495},[35,44461,32640],{"class":359},[35,44463,44464],{"class":37,"line":33597},[35,44465,141],{"emptyLinePlaceholder":140},[35,44467,44468],{"class":37,"line":33602},[35,44469,33605],{"class":41},[35,44471,44472,44474,44476,44478,44480],{"class":37,"line":33608},[35,44473,33611],{"class":359},[35,44475,544],{"class":495},[35,44477,33616],{"class":359},[35,44479,1026],{"class":495},[35,44481,33621],{"class":359},[35,44483,44484,44486,44488,44490,44492,44494,44496,44498,44500,44502,44504,44506,44508,44510,44512,44514,44516,44518],{"class":37,"line":33624},[35,44485,32777],{"class":58},[35,44487,499],{"class":359},[35,44489,33631],{"class":306},[35,44491,1390],{"class":58},[35,44493,33636],{"class":495},[35,44495,1440],{"class":58},[35,44497,1038],{"class":306},[35,44499,1390],{"class":58},[35,44501,33636],{"class":495},[35,44503,1440],{"class":58},[35,44505,33649],{"class":306},[35,44507,33652],{"class":359},[35,44509,33655],{"class":495},[35,44511,1401],{"class":58},[35,44513,33660],{"class":359},[35,44515,823],{"class":495},[35,44517,1401],{"class":58},[35,44519,30823],{"class":359},[35,44521,44522],{"class":37,"line":33669},[35,44523,37059],{"class":41},[35,44525,44526],{"class":37,"line":33675},[35,44527,37064],{"class":41},[35,44529,44530,44532,44534],{"class":37,"line":33681},[35,44531,37069],{"class":359},[35,44533,33693],{"class":306},[35,44535,505],{"class":359},[35,44537,44538],{"class":37,"line":33687},[35,44539,33713],{"class":41},[35,44541,44542,44544,44546,44548,44550,44552],{"class":37,"line":33698},[35,44543,33719],{"class":359},[35,44545,544],{"class":495},[35,44547,33724],{"class":359},[35,44549,33727],{"class":5550},[35,44551,544],{"class":495},[35,44553,1907],{"class":359},[35,44555,44556,44558,44560,44562],{"class":37,"line":33704},[35,44557,33737],{"class":306},[35,44559,1353],{"class":359},[35,44561,33742],{"class":58},[35,44563,33745],{"class":359},[35,44565,44566,44568],{"class":37,"line":33710},[35,44567,33751],{"class":306},[35,44569,33754],{"class":359},[35,44571,44572,44574],{"class":37,"line":33716},[35,44573,33760],{"class":306},[35,44575,33763],{"class":359},[35,44577,44578,44580],{"class":37,"line":33734},[35,44579,33769],{"class":306},[35,44581,33772],{"class":359},[35,44583,44584,44586],{"class":37,"line":33748},[35,44585,33778],{"class":306},[35,44587,33781],{"class":359},[35,44589,44590],{"class":37,"line":33757},[35,44591,33787],{"class":359},[35,44593,44594],{"class":37,"line":33766},[35,44595,33793],{"class":41},[35,44597,44598,44600],{"class":37,"line":33775},[35,44599,4424],{"class":495},[35,44601,33801],{"class":359},[35,44603,44604],{"class":37,"line":33784},[35,44605,141],{"emptyLinePlaceholder":140},[35,44607,44608],{"class":37,"line":33790},[35,44609,33812],{"class":41},[35,44611,44612,44614,44616],{"class":37,"line":33796},[35,44613,32273],{"class":495},[35,44615,33820],{"class":48},[35,44617,33823],{"class":359},[35,44619,44620],{"class":37,"line":33804},[35,44621,33829],{"class":41},[35,44623,44624,44626,44628,44630,44632,44634,44636,44638],{"class":37,"line":33809},[35,44625,33835],{"class":359},[35,44627,32019],{"class":5550},[35,44629,544],{"class":495},[35,44631,499],{"class":359},[35,44633,992],{"class":58},[35,44635,872],{"class":359},[35,44637,789],{"class":58},[35,44639,30823],{"class":359},[35,44641,44642],{"class":37,"line":33815},[35,44643,33855],{"class":41},[35,44645,44646],{"class":37,"line":33826},[35,44647,33861],{"class":41},[35,44649,44650],{"class":37,"line":33832},[35,44651,33867],{"class":41},[35,44653,44654,44656,44658,44660,44662,44664,44666],{"class":37,"line":33852},[35,44655,32053],{"class":359},[35,44657,713],{"class":58},[35,44659,872],{"class":359},[35,44661,574],{"class":58},[35,44663,872],{"class":359},[35,44665,713],{"class":58},[35,44667,505],{"class":359},[35,44669,44670],{"class":37,"line":33858},[35,44671,33890],{"class":41},[35,44673,44674],{"class":37,"line":33864},[35,44675,33896],{"class":41},[35,44677,44678],{"class":37,"line":33870},[35,44679,33902],{"class":41},[35,44681,44682],{"class":37,"line":33887},[35,44683,33908],{"class":41},[35,44685,44686],{"class":37,"line":33893},[35,44687,33914],{"class":41},[35,44689,44690,44692,44694,44696,44698,44700,44702,44704,44706],{"class":37,"line":33899},[35,44691,33920],{"class":359},[35,44693,33923],{"class":306},[35,44695,33926],{"class":359},[35,44697,33929],{"class":306},[35,44699,872],{"class":359},[35,44701,33934],{"class":5550},[35,44703,544],{"class":495},[35,44705,33939],{"class":306},[35,44707,505],{"class":359},[35,44709,44710,44712,44714,44716,44718,44720,44722,44724,44726],{"class":37,"line":33905},[35,44711,33920],{"class":359},[35,44713,33923],{"class":306},[35,44715,33951],{"class":359},[35,44717,33954],{"class":306},[35,44719,872],{"class":359},[35,44721,33934],{"class":5550},[35,44723,544],{"class":495},[35,44725,33963],{"class":306},[35,44727,505],{"class":359},[35,44729,44730],{"class":37,"line":33911},[35,44731,33971],{"class":41},[35,44733,44734],{"class":37,"line":33917},[35,44735,33977],{"class":359},[35,44737,44738],{"class":37,"line":33944},[35,44739,33983],{"class":41},[35,44741,44742,44744,44746],{"class":37,"line":33968},[35,44743,33989],{"class":359},[35,44745,33992],{"class":306},[35,44747,505],{"class":359},[35,44749,44750,44752,44754],{"class":37,"line":33974},[35,44751,34000],{"class":359},[35,44753,34003],{"class":306},[35,44755,505],{"class":359},[35,44757,44758],{"class":37,"line":33980},[35,44759,34011],{"class":41},[35,44761,44762,44764,44766,44768,44770,44772,44774],{"class":37,"line":33986},[35,44763,32053],{"class":359},[35,44765,713],{"class":58},[35,44767,872],{"class":359},[35,44769,574],{"class":58},[35,44771,872],{"class":359},[35,44773,574],{"class":58},[35,44775,505],{"class":359},[35,44777,44778,44780,44782,44784,44786,44788,44790,44792,44794],{"class":37,"line":33997},[35,44779,33920],{"class":359},[35,44781,33923],{"class":306},[35,44783,34038],{"class":359},[35,44785,33929],{"class":306},[35,44787,872],{"class":359},[35,44789,33934],{"class":5550},[35,44791,544],{"class":495},[35,44793,34049],{"class":306},[35,44795,505],{"class":359},[35,44797,44798,44800,44802,44804,44806,44808,44810,44812,44814],{"class":37,"line":34008},[35,44799,33920],{"class":359},[35,44801,33923],{"class":306},[35,44803,34061],{"class":359},[35,44805,33954],{"class":306},[35,44807,872],{"class":359},[35,44809,33934],{"class":5550},[35,44811,544],{"class":495},[35,44813,34072],{"class":306},[35,44815,505],{"class":359},[35,44817,44818],{"class":37,"line":34014},[35,44819,34080],{"class":41},[35,44821,44822],{"class":37,"line":34031},[35,44823,33977],{"class":359},[35,44825,44826,44828,44830],{"class":37,"line":34054},[35,44827,33989],{"class":359},[35,44829,33923],{"class":306},[35,44831,505],{"class":359},[35,44833,44834,44836,44838],{"class":37,"line":34077},[35,44835,34000],{"class":359},[35,44837,34102],{"class":306},[35,44839,505],{"class":359},[35,44841,44842],{"class":37,"line":34083},[35,44843,34110],{"class":359},[35,44845,44846],{"class":37,"line":34088},[35,44847,141],{"emptyLinePlaceholder":140},[35,44849,44850],{"class":37,"line":34097},[35,44851,34121],{"class":41},[35,44853,44854,44856,44858,44860,44862],{"class":37,"line":34107},[35,44855,1892],{"class":495},[35,44857,31546],{"class":58},[35,44859,3283],{"class":495},[35,44861,31551],{"class":306},[35,44863,4073],{"class":359},[35,44865,44866],{"class":37,"line":34113},[35,44867,34140],{"class":41},[35,44869,44870,44873,44875],{"class":37,"line":34118},[35,44871,44872],{"class":359},"    GoogLeNet",[35,44874,544],{"class":495},[35,44876,44877],{"class":359},"GoogLeNet(Inception)\n",[35,44879,44880,44882,44884],{"class":37,"line":34124},[35,44881,34157],{"class":359},[35,44883,544],{"class":495},[35,44885,34162],{"class":359},[35,44887,44888,44890,44892,44895,44897,44899,44901],{"class":37,"line":34137},[35,44889,33719],{"class":359},[35,44891,544],{"class":495},[35,44893,44894],{"class":359},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[35,44896,34175],{"class":5550},[35,44898,544],{"class":495},[35,44900,1445],{"class":58},[35,44902,505],{"class":359},[35,44904,44905],{"class":37,"line":34143},[35,44906,34187],{"class":359},[14,44908,44909],{"start":55},[17,44910,40900],{},[25,44912,44914],{"className":30704,"code":44913,"language":30706,"meta":30,"style":30},"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",[32,44915,44916,44922,44932,44942,44946,44956,44967,44971,44975,44979,44987,45003,45013,45029,45039,45053,45057,45067,45077,45087,45093,45097,45101,45109,45113,45129,45137,45141,45145,45153,45161,45165,45169,45173,45177,45183,45187,45197,45205,45213,45217,45221,45225,45233,45237,45253,45257,45261,45265,45277,45281,45293,45297,45301,45313,45317,45327,45331,45335,45347,45351,45359,45363,45367,45375,45379,45387,45391,45395,45399,45403,45407,45423,45431,45435,45439,45487,45493,45497,45507,45515,45523,45527,45531,45535,45539,45547,45551,45567,45571,45579,45587],{"__ignoreMap":30},[35,44917,44918,44920],{"class":37,"line":38},[35,44919,30718],{"class":495},[35,44921,30721],{"class":359},[35,44923,44924,44926,44928,44930],{"class":37,"line":45},[35,44925,30718],{"class":495},[35,44927,31741],{"class":359},[35,44929,31709],{"class":495},[35,44931,31746],{"class":359},[35,44933,44934,44936,44938,44940],{"class":37,"line":55},[35,44935,31063],{"class":495},[35,44937,31724],{"class":359},[35,44939,30718],{"class":495},[35,44941,31729],{"class":359},[35,44943,44944],{"class":37,"line":65},[35,44945,34248],{"class":41},[35,44947,44948,44950,44952,44954],{"class":37,"line":74},[35,44949,31063],{"class":495},[35,44951,31694],{"class":359},[35,44953,30718],{"class":495},[35,44955,31699],{"class":359},[35,44957,44958,44960,44962,44964],{"class":37,"line":83},[35,44959,31063],{"class":495},[35,44961,32240],{"class":359},[35,44963,30718],{"class":495},[35,44965,44966],{"class":359}," GoogLeNet,Inception\n",[35,44968,44969],{"class":37,"line":92},[35,44970,141],{"emptyLinePlaceholder":140},[35,44972,44973],{"class":37,"line":101},[35,44974,141],{"emptyLinePlaceholder":140},[35,44976,44977],{"class":37,"line":110},[35,44978,34277],{"class":41},[35,44980,44981,44983,44985],{"class":37,"line":119},[35,44982,32273],{"class":495},[35,44984,34284],{"class":48},[35,44986,32279],{"class":359},[35,44988,44989,44991,44993,44995,44997,44999,45001],{"class":37,"line":128},[35,44990,34291],{"class":359},[35,44992,544],{"class":495},[35,44994,31781],{"class":359},[35,44996,31784],{"class":5550},[35,44998,544],{"class":495},[35,45000,31789],{"class":306},[35,45002,31792],{"class":359},[35,45004,45005,45007,45009,45011],{"class":37,"line":137},[35,45006,34308],{"class":5550},[35,45008,544],{"class":495},[35,45010,34313],{"class":58},[35,45012,31792],{"class":359},[35,45014,45015,45017,45019,45021,45023,45025,45027],{"class":37,"line":144},[35,45016,34320],{"class":5550},[35,45018,544],{"class":495},[35,45020,31819],{"class":359},[35,45022,31822],{"class":5550},[35,45024,544],{"class":495},[35,45026,35775],{"class":58},[35,45028,31830],{"class":359},[35,45030,45031,45033,45035,45037],{"class":37,"line":150},[35,45032,34337],{"class":5550},[35,45034,544],{"class":495},[35,45036,31802],{"class":58},[35,45038,505],{"class":359},[35,45040,45041,45043,45045,45047,45049,45051],{"class":37,"line":159},[35,45042,34348],{"class":359},[35,45044,544],{"class":495},[35,45046,31860],{"class":359},[35,45048,31863],{"class":5550},[35,45050,544],{"class":495},[35,45052,34359],{"class":359},[35,45054,45055],{"class":37,"line":168},[35,45056,34364],{"class":41},[35,45058,45059,45061,45063,45065],{"class":37,"line":177},[35,45060,34369],{"class":5550},[35,45062,544],{"class":495},[35,45064,713],{"class":58},[35,45066,31792],{"class":359},[35,45068,45069,45071,45073,45075],{"class":37,"line":182},[35,45070,34380],{"class":5550},[35,45072,544],{"class":495},[35,45074,31802],{"class":58},[35,45076,31792],{"class":359},[35,45078,45079,45081,45083,45085],{"class":37,"line":188},[35,45080,34391],{"class":5550},[35,45082,544],{"class":495},[35,45084,687],{"class":58},[35,45086,505],{"class":359},[35,45088,45089,45091],{"class":37,"line":197},[35,45090,4424],{"class":495},[35,45092,34404],{"class":359},[35,45094,45095],{"class":37,"line":206},[35,45096,141],{"emptyLinePlaceholder":140},[35,45098,45099],{"class":37,"line":215},[35,45100,34413],{"class":41},[35,45102,45103,45105,45107],{"class":37,"line":224},[35,45104,32273],{"class":495},[35,45106,34420],{"class":48},[35,45108,34423],{"class":359},[35,45110,45111],{"class":37,"line":233},[35,45112,34428],{"class":41},[35,45114,45115,45117,45119,45121,45123,45125,45127],{"class":37,"line":238},[35,45116,31563],{"class":359},[35,45118,544],{"class":495},[35,45120,31570],{"class":306},[35,45122,2054],{"class":495},[35,45124,31575],{"class":359},[35,45126,2051],{"class":495},[35,45128,34445],{"class":306},[35,45130,45131,45133,45135],{"class":37,"line":244},[35,45132,31615],{"class":359},[35,45134,544],{"class":495},[35,45136,32615],{"class":359},[35,45138,45139],{"class":37,"line":253},[35,45140,141],{"emptyLinePlaceholder":140},[35,45142,45143],{"class":37,"line":262},[35,45144,34462],{"class":41},[35,45146,45147,45149,45151],{"class":37,"line":271},[35,45148,34467],{"class":359},[35,45150,544],{"class":495},[35,45152,32668],{"class":58},[35,45154,45155,45157,45159],{"class":37,"line":280},[35,45156,34476],{"class":359},[35,45158,544],{"class":495},[35,45160,3419],{"class":58},[35,45162,45163],{"class":37,"line":289},[35,45164,141],{"emptyLinePlaceholder":140},[35,45166,45167],{"class":37,"line":294},[35,45168,34489],{"class":41},[35,45170,45171],{"class":37,"line":300},[35,45172,34494],{"class":41},[35,45174,45175],{"class":37,"line":313},[35,45176,34499],{"class":41},[35,45178,45179,45181],{"class":37,"line":324},[35,45180,34504],{"class":495},[35,45182,33210],{"class":359},[35,45184,45185],{"class":37,"line":2955},[35,45186,34511],{"class":41},[35,45188,45189,45191,45193,45195],{"class":37,"line":8282},[35,45190,3737],{"class":495},[35,45192,34518],{"class":359},[35,45194,26374],{"class":495},[35,45196,34523],{"class":359},[35,45198,45199,45201,45203],{"class":37,"line":8306},[35,45200,34528],{"class":359},[35,45202,544],{"class":495},[35,45204,34533],{"class":359},[35,45206,45207,45209,45211],{"class":37,"line":8311},[35,45208,34538],{"class":359},[35,45210,544],{"class":495},[35,45212,34543],{"class":359},[35,45214,45215],{"class":37,"line":8317},[35,45216,34548],{"class":41},[35,45218,45219],{"class":37,"line":8344},[35,45220,33201],{"class":359},[35,45222,45223],{"class":37,"line":8349},[35,45224,34557],{"class":41},[35,45226,45227,45229,45231],{"class":37,"line":8355},[35,45228,32986],{"class":359},[35,45230,544],{"class":495},[35,45232,34566],{"class":359},[35,45234,45235],{"class":37,"line":8367},[35,45236,34571],{"class":41},[35,45238,45239,45241,45243,45245,45247,45249,45251],{"class":37,"line":8379},[35,45240,33003],{"class":359},[35,45242,544],{"class":495},[35,45244,33008],{"class":359},[35,45246,33011],{"class":5550},[35,45248,544],{"class":495},[35,45250,713],{"class":58},[35,45252,505],{"class":359},[35,45254,45255],{"class":37,"line":8391},[35,45256,34592],{"class":41},[35,45258,45259],{"class":37,"line":10050},[35,45260,34597],{"class":41},[35,45262,45263],{"class":37,"line":10075},[35,45264,34602],{"class":41},[35,45266,45267,45269,45271,45273,45275],{"class":37,"line":10098},[35,45268,34607],{"class":359},[35,45270,9811],{"class":495},[35,45272,33113],{"class":359},[35,45274,3283],{"class":495},[35,45276,34616],{"class":359},[35,45278,45279],{"class":37,"line":10122},[35,45280,34621],{"class":41},[35,45282,45283,45285,45287,45289,45291],{"class":37,"line":10127},[35,45284,34626],{"class":359},[35,45286,9811],{"class":495},[35,45288,34631],{"class":359},[35,45290,687],{"class":58},[35,45292,505],{"class":359},[35,45294,45295],{"class":37,"line":10132},[35,45296,141],{"emptyLinePlaceholder":140},[35,45298,45299],{"class":37,"line":10137},[35,45300,34644],{"class":41},[35,45302,45303,45305,45307,45309,45311],{"class":37,"line":10146},[35,45304,34649],{"class":359},[35,45306,544],{"class":495},[35,45308,34654],{"class":359},[35,45310,1078],{"class":495},[35,45312,34659],{"class":359},[35,45314,45315],{"class":37,"line":10151},[35,45316,34664],{"class":41},[35,45318,45319,45321,45323,45325],{"class":37,"line":10157},[35,45320,32777],{"class":58},[35,45322,499],{"class":359},[35,45324,34673],{"class":306},[35,45326,34676],{"class":359},[35,45328,45329],{"class":37,"line":10178},[35,45330,141],{"emptyLinePlaceholder":140},[35,45332,45333],{"class":37,"line":10184},[35,45334,34685],{"class":41},[35,45336,45337,45339,45341,45343,45345],{"class":37,"line":10198},[35,45338,1892],{"class":495},[35,45340,31546],{"class":58},[35,45342,3283],{"class":495},[35,45344,31551],{"class":306},[35,45346,4073],{"class":359},[35,45348,45349],{"class":37,"line":10204},[35,45350,34702],{"class":41},[35,45352,45353,45355,45357],{"class":37,"line":10231},[35,45354,31615],{"class":359},[35,45356,544],{"class":495},[35,45358,44877],{"class":359},[35,45360,45361],{"class":37,"line":10240},[35,45362,34715],{"class":41},[35,45364,45365],{"class":37,"line":10246},[35,45366,34720],{"class":41},[35,45368,45369,45371,45373],{"class":37,"line":10254},[35,45370,34725],{"class":359},[35,45372,34728],{"class":306},[35,45374,30823],{"class":359},[35,45376,45377],{"class":37,"line":10259},[35,45378,34735],{"class":41},[35,45380,45381,45383,45385],{"class":37,"line":16938},[35,45382,34348],{"class":359},[35,45384,544],{"class":495},[35,45386,34744],{"class":359},[35,45388,45389],{"class":37,"line":16944},[35,45390,34749],{"class":41},[35,45392,45393],{"class":37,"line":16967},[35,45394,34754],{"class":359},[35,45396,45397],{"class":37,"line":16973},[35,45398,141],{"emptyLinePlaceholder":140},[35,45400,45401],{"class":37,"line":16996},[35,45402,34763],{"class":41},[35,45404,45405],{"class":37,"line":17010},[35,45406,34768],{"class":41},[35,45408,45409,45411,45413,45415,45417,45419,45421],{"class":37,"line":17030},[35,45410,31563],{"class":359},[35,45412,544],{"class":495},[35,45414,31570],{"class":306},[35,45416,2054],{"class":495},[35,45418,31575],{"class":359},[35,45420,2051],{"class":495},[35,45422,34445],{"class":306},[35,45424,45425,45427,45429],{"class":37,"line":17036},[35,45426,31615],{"class":359},[35,45428,544],{"class":495},[35,45430,32615],{"class":359},[35,45432,45433],{"class":37,"line":17047},[35,45434,34797],{"class":41},[35,45436,45437],{"class":37,"line":17070},[35,45438,34802],{"class":41},[35,45440,45441,45443,45445,45447,45449,45451,45453,45455,45457,45459,45461,45463,45465,45467,45469,45471,45473,45475,45477,45479,45481,45483,45485],{"class":37,"line":17092},[35,45442,34807],{"class":359},[35,45444,544],{"class":495},[35,45446,1384],{"class":359},[35,45448,34814],{"class":306},[35,45450,872],{"class":359},[35,45452,34819],{"class":306},[35,45454,872],{"class":359},[35,45456,34824],{"class":306},[35,45458,872],{"class":359},[35,45460,34829],{"class":306},[35,45462,872],{"class":359},[35,45464,34834],{"class":306},[35,45466,872],{"class":359},[35,45468,34839],{"class":306},[35,45470,872],{"class":359},[35,45472,34844],{"class":306},[35,45474,872],{"class":359},[35,45476,34849],{"class":306},[35,45478,872],{"class":359},[35,45480,34854],{"class":306},[35,45482,872],{"class":359},[35,45484,34859],{"class":306},[35,45486,33572],{"class":359},[35,45488,45489,45491],{"class":37,"line":17097},[35,45490,34504],{"class":495},[35,45492,33210],{"class":359},[35,45494,45495],{"class":37,"line":17103},[35,45496,34872],{"class":41},[35,45498,45499,45501,45503,45505],{"class":37,"line":17117},[35,45500,3737],{"class":495},[35,45502,34879],{"class":359},[35,45504,26374],{"class":495},[35,45506,34523],{"class":359},[35,45508,45509,45511,45513],{"class":37,"line":17130},[35,45510,32936],{"class":359},[35,45512,544],{"class":495},[35,45514,32941],{"class":359},[35,45516,45517,45519,45521],{"class":37,"line":17135},[35,45518,32951],{"class":359},[35,45520,544],{"class":495},[35,45522,32956],{"class":359},[35,45524,45525],{"class":37,"line":17149},[35,45526,141],{"emptyLinePlaceholder":140},[35,45528,45529],{"class":37,"line":17154},[35,45530,34908],{"class":41},[35,45532,45533],{"class":37,"line":17160},[35,45534,33201],{"class":359},[35,45536,45537],{"class":37,"line":17165},[35,45538,34917],{"class":41},[35,45540,45541,45543,45545],{"class":37,"line":17179},[35,45542,32986],{"class":359},[35,45544,544],{"class":495},[35,45546,32991],{"class":359},[35,45548,45549],{"class":37,"line":17184},[35,45550,34930],{"class":41},[35,45552,45553,45555,45557,45559,45561,45563,45565],{"class":37,"line":17189},[35,45554,33003],{"class":359},[35,45556,544],{"class":495},[35,45558,33008],{"class":359},[35,45560,33011],{"class":5550},[35,45562,544],{"class":495},[35,45564,713],{"class":58},[35,45566,505],{"class":359},[35,45568,45569],{"class":37,"line":17203},[35,45570,34951],{"class":41},[35,45572,45573,45575,45577],{"class":37,"line":17215},[35,45574,34956],{"class":359},[35,45576,544],{"class":495},[35,45578,34961],{"class":359},[35,45580,45581,45583,45585],{"class":37,"line":17220},[35,45582,34966],{"class":359},[35,45584,544],{"class":495},[35,45586,34971],{"class":359},[35,45588,45589,45591,45593,45595,45597,45599,45601,45603],{"class":37,"line":17233},[35,45590,34976],{"class":58},[35,45592,499],{"class":359},[35,45594,34981],{"class":306},[35,45596,34984],{"class":359},[35,45598,34987],{"class":306},[35,45600,872],{"class":359},[35,45602,34992],{"class":306},[35,45604,34995],{"class":359},[465,45606,45608],{"id":45607},"_24训练自己的数据集","2.4.训练自己的数据集",[21,45610,45611],{},"猫狗分类任务",[21,45613,45614],{},"划分数据集和验证集",[25,45616,45618],{"className":30704,"code":45617,"language":30706,"meta":30,"style":30},"# 创建脚本，用于划分数据集和验证集\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",[32,45619,45620,45625,45632,45637,45648,45655,45659,45669,45683,45692,45696,45701,45711,45731,45735,45740,45750,45761,45774,45778,45783,45792,45802,45813,45817,45822,45832,45836,45841,45846,45851,45856,45861,45865,45875,45902,45915,45927,45954,45959,45964,45978,45983,45995,46010,46025,46033,46037,46042,46048,46060,46073,46078,46083,46088,46138,46144,46148],{"__ignoreMap":30},[35,45621,45622],{"class":37,"line":38},[35,45623,45624],{"class":41},"# 创建脚本，用于划分数据集和验证集\n",[35,45626,45627,45629],{"class":37,"line":45},[35,45628,30718],{"class":495},[35,45630,45631],{"class":359}," os\n",[35,45633,45634],{"class":37,"line":55},[35,45635,45636],{"class":41},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[35,45638,45639,45641,45644,45646],{"class":37,"line":65},[35,45640,31063],{"class":495},[35,45642,45643],{"class":359}," shutil ",[35,45645,30718],{"class":495},[35,45647,32148],{"class":359},[35,45649,45650,45652],{"class":37,"line":74},[35,45651,30718],{"class":495},[35,45653,45654],{"class":359}," random\n",[35,45656,45657],{"class":37,"line":83},[35,45658,141],{"emptyLinePlaceholder":140},[35,45660,45661,45663,45666],{"class":37,"line":92},[35,45662,32273],{"class":495},[35,45664,45665],{"class":48}," mkfile",[35,45667,45668],{"class":359},"(file):\n",[35,45670,45671,45673,45675,45678,45681],{"class":37,"line":101},[35,45672,3435],{"class":495},[35,45674,39256],{"class":495},[35,45676,45677],{"class":359}," os.path.exists(",[35,45679,45680],{"class":5550},"file",[35,45682,31112],{"class":359},[35,45684,45685,45688,45690],{"class":37,"line":110},[35,45686,45687],{"class":359},"        os.makedirs(",[35,45689,45680],{"class":5550},[35,45691,505],{"class":359},[35,45693,45694],{"class":37,"line":119},[35,45695,141],{"emptyLinePlaceholder":140},[35,45697,45698],{"class":37,"line":128},[35,45699,45700],{"class":41},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[35,45702,45703,45706,45708],{"class":37,"line":137},[35,45704,45705],{"class":359},"file_path",[35,45707,544],{"class":495},[35,45709,45710],{"class":306},"'data_cat_dog'\n",[35,45712,45713,45716,45718,45721,45723,45726,45728],{"class":37,"line":144},[35,45714,45715],{"class":359},"flower_class",[35,45717,544],{"class":495},[35,45719,45720],{"class":359},"[cla ",[35,45722,3359],{"class":495},[35,45724,45725],{"class":359}," cla ",[35,45727,26374],{"class":495},[35,45729,45730],{"class":359}," os.listdir(file_path)]\n",[35,45732,45733],{"class":37,"line":150},[35,45734,141],{"emptyLinePlaceholder":140},[35,45736,45737],{"class":37,"line":159},[35,45738,45739],{"class":41},"# 创建训练集train文件夹\n",[35,45741,45742,45745,45748],{"class":37,"line":168},[35,45743,45744],{"class":359},"mkfile(",[35,45746,45747],{"class":306},"'data\u002Ftrain'",[35,45749,505],{"class":359},[35,45751,45752,45754,45756,45758],{"class":37,"line":177},[35,45753,3359],{"class":495},[35,45755,45725],{"class":359},[35,45757,26374],{"class":495},[35,45759,45760],{"class":359}," flower_class:\n",[35,45762,45763,45766,45769,45771],{"class":37,"line":182},[35,45764,45765],{"class":359},"    mkfile(",[35,45767,45768],{"class":306},"'data\u002Ftrain\u002F'",[35,45770,975],{"class":495},[35,45772,45773],{"class":359},"cla)\n",[35,45775,45776],{"class":37,"line":188},[35,45777,141],{"emptyLinePlaceholder":140},[35,45779,45780],{"class":37,"line":197},[35,45781,45782],{"class":41},"# 创建验证集val文件夹\n",[35,45784,45785,45787,45790],{"class":37,"line":206},[35,45786,45744],{"class":359},[35,45788,45789],{"class":306},"'data\u002Ftest'",[35,45791,505],{"class":359},[35,45793,45794,45796,45798,45800],{"class":37,"line":215},[35,45795,3359],{"class":495},[35,45797,45725],{"class":359},[35,45799,26374],{"class":495},[35,45801,45760],{"class":359},[35,45803,45804,45806,45809,45811],{"class":37,"line":224},[35,45805,45765],{"class":359},[35,45807,45808],{"class":306},"'data\u002Ftest\u002F'",[35,45810,975],{"class":495},[35,45812,45773],{"class":359},[35,45814,45815],{"class":37,"line":233},[35,45816,141],{"emptyLinePlaceholder":140},[35,45818,45819],{"class":37,"line":238},[35,45820,45821],{"class":41},"# 划分比例，训练集：测试集=9：1\n",[35,45823,45824,45827,45829],{"class":37,"line":244},[35,45825,45826],{"class":359},"split_rate",[35,45828,544],{"class":495},[35,45830,45831],{"class":58},"0.1\n",[35,45833,45834],{"class":37,"line":253},[35,45835,141],{"emptyLinePlaceholder":140},[35,45837,45838],{"class":37,"line":262},[35,45839,45840],{"class":41},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[35,45842,45843],{"class":37,"line":271},[35,45844,45845],{"class":41},"# cla_path：当前类别的原始图片路径\n",[35,45847,45848],{"class":37,"line":280},[35,45849,45850],{"class":41},"# images：当前类别下所有图片的文件名列表\n",[35,45852,45853],{"class":37,"line":289},[35,45854,45855],{"class":41},"# num：该类别图片总数\n",[35,45857,45858],{"class":37,"line":294},[35,45859,45860],{"class":41},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[35,45862,45863],{"class":37,"line":300},[35,45864,141],{"emptyLinePlaceholder":140},[35,45866,45867,45869,45871,45873],{"class":37,"line":313},[35,45868,3359],{"class":495},[35,45870,45725],{"class":359},[35,45872,26374],{"class":495},[35,45874,45760],{"class":359},[35,45876,45877,45880,45882,45885,45887,45890,45893,45895,45897,45899],{"class":37,"line":324},[35,45878,45879],{"class":359},"    cla_path ",[35,45881,544],{"class":495},[35,45883,45884],{"class":359}," file_path ",[35,45886,975],{"class":495},[35,45888,45889],{"class":306}," '\u002F'",[35,45891,45892],{"class":495}," +",[35,45894,45725],{"class":359},[35,45896,975],{"class":495},[35,45898,45889],{"class":306},[35,45900,45901],{"class":41},"  # 某一类别的子目录\n",[35,45903,45904,45907,45909,45912],{"class":37,"line":2955},[35,45905,45906],{"class":359},"    images ",[35,45908,544],{"class":495},[35,45910,45911],{"class":359}," os.listdir(cla_path)  ",[35,45913,45914],{"class":41},"# iamges 列表存储了该目录下所有图像的名称\n",[35,45916,45917,45920,45922,45924],{"class":37,"line":8282},[35,45918,45919],{"class":359},"    num ",[35,45921,544],{"class":495},[35,45923,7665],{"class":58},[35,45925,45926],{"class":359},"(images)\n",[35,45928,45929,45932,45934,45937,45939,45941,45943,45946,45948,45951],{"class":37,"line":8306},[35,45930,45931],{"class":359},"    eval_index ",[35,45933,544],{"class":495},[35,45935,45936],{"class":359}," random.sample(images, ",[35,45938,987],{"class":5550},[35,45940,544],{"class":495},[35,45942,502],{"class":58},[35,45944,45945],{"class":359},"(num ",[35,45947,949],{"class":495},[35,45949,45950],{"class":359}," split_rate))  ",[35,45952,45953],{"class":41},"# 从images列表中随机抽取 k 个图像名称\n",[35,45955,45956],{"class":37,"line":8311},[35,45957,45958],{"class":41},"    # 遍历该类别下的所有图片\n",[35,45960,45961],{"class":37,"line":8317},[35,45962,45963],{"class":41},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[35,45965,45966,45968,45971,45973,45975],{"class":37,"line":8344},[35,45967,3535],{"class":495},[35,45969,45970],{"class":359}," index, image ",[35,45972,26374],{"class":495},[35,45974,31932],{"class":58},[35,45976,45977],{"class":359},"(images):\n",[35,45979,45980],{"class":37,"line":8349},[35,45981,45982],{"class":41},"        # eval_index 中保存验证集val的图像名称\n",[35,45984,45985,45987,45990,45992],{"class":37,"line":8355},[35,45986,2837],{"class":495},[35,45988,45989],{"class":359}," image ",[35,45991,26374],{"class":495},[35,45993,45994],{"class":359}," eval_index:\n",[35,45996,45997,46000,46002,46005,46007],{"class":37,"line":8367},[35,45998,45999],{"class":359},"            image_path ",[35,46001,544],{"class":495},[35,46003,46004],{"class":359}," cla_path ",[35,46006,975],{"class":495},[35,46008,46009],{"class":359}," image\n",[35,46011,46012,46015,46017,46020,46022],{"class":37,"line":8379},[35,46013,46014],{"class":359},"            new_path ",[35,46016,544],{"class":495},[35,46018,46019],{"class":306}," 'data\u002Ftest\u002F'",[35,46021,45892],{"class":495},[35,46023,46024],{"class":359}," cla\n",[35,46026,46027,46030],{"class":37,"line":8391},[35,46028,46029],{"class":359},"            copy(image_path, new_path)  ",[35,46031,46032],{"class":41},"# 将选中的图像复制到新路径\n",[35,46034,46035],{"class":37,"line":10050},[35,46036,141],{"emptyLinePlaceholder":140},[35,46038,46039],{"class":37,"line":10075},[35,46040,46041],{"class":41},"        # 其余的图像保存在训练集train中\n",[35,46043,46044,46046],{"class":37,"line":10098},[35,46045,2874],{"class":495},[35,46047,4073],{"class":359},[35,46049,46050,46052,46054,46056,46058],{"class":37,"line":10122},[35,46051,45999],{"class":359},[35,46053,544],{"class":495},[35,46055,46004],{"class":359},[35,46057,975],{"class":495},[35,46059,46009],{"class":359},[35,46061,46062,46064,46066,46069,46071],{"class":37,"line":10127},[35,46063,46014],{"class":359},[35,46065,544],{"class":495},[35,46067,46068],{"class":306}," 'data\u002Ftrain\u002F'",[35,46070,45892],{"class":495},[35,46072,46024],{"class":359},[35,46074,46075],{"class":37,"line":10132},[35,46076,46077],{"class":359},"            copy(image_path, new_path)\n",[35,46079,46080],{"class":37,"line":10137},[35,46081,46082],{"class":41},"            # 打印进度条信息\n",[35,46084,46085],{"class":37,"line":10146},[35,46086,46087],{"class":41},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[35,46089,46090,46092,46094,46096,46099,46101,46103,46106,46108,46110,46112,46115,46118,46120,46122,46125,46128,46130,46132,46135],{"class":37,"line":10151},[35,46091,32777],{"class":58},[35,46093,499],{"class":359},[35,46095,747],{"class":306},[35,46097,46098],{"class":58},"\\r",[35,46100,1384],{"class":306},[35,46102,32785],{"class":58},[35,46104,46105],{"class":306},"] processing [",[35,46107,32785],{"class":58},[35,46109,1078],{"class":306},[35,46111,32785],{"class":58},[35,46113,46114],{"class":306},"]\"",[35,46116,46117],{"class":359},".format(cla, index ",[35,46119,975],{"class":495},[35,46121,25450],{"class":58},[35,46123,46124],{"class":359},", num), ",[35,46126,46127],{"class":5550},"end",[35,46129,544],{"class":495},[35,46131,7986],{"class":306},[35,46133,46134],{"class":359},")  ",[35,46136,46137],{"class":41},"# processing bar\n",[35,46139,46140,46142],{"class":37,"line":10157},[35,46141,31625],{"class":58},[35,46143,2317],{"class":359},[35,46145,46146],{"class":37,"line":10178},[35,46147,141],{"emptyLinePlaceholder":140},[35,46149,46150,46152,46154,46157],{"class":37,"line":10184},[35,46151,30741],{"class":58},[35,46153,499],{"class":359},[35,46155,46156],{"class":306},"\"processing done!\"",[35,46158,505],{"class":359},[21,46160,46161],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22332,46163,46165],{"id":46164},"_242模型代码","2.4.2.模型代码",[21,46167,46168],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[25,46170,46172],{"className":30704,"code":46171,"language":30706,"meta":30,"style":30},"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",[32,46173,46174,46180,46190,46200,46204,46220,46228,46242,46252,46256,46286,46290,46324,46370,46374,46408,46454,46458,46462,46496,46526,46530,46538,46552,46574,46596,46614,46618,46632,46636,46640,46656,46660,46668,46682,46692,46736,46740,46768,46772,46782,46810,46814,46850,46854,46882,46886,46896,46928,46960,46988,46992,47002,47034,47066,47098,47130,47162,47190,47194,47204,47236,47268,47280,47284,47296,47300,47304,47316,47324,47344,47348,47352,47356,47360,47364,47368,47382,47390,47398,47410,47424,47432,47436,47444,47454,47464,47474,47484,47494,47500,47504,47508,47520,47540,47548],{"__ignoreMap":30},[35,46175,46176,46178],{"class":37,"line":38},[35,46177,30718],{"class":495},[35,46179,30721],{"class":359},[35,46181,46182,46184,46186,46188],{"class":37,"line":45},[35,46183,31063],{"class":495},[35,46185,31066],{"class":359},[35,46187,30718],{"class":495},[35,46189,31071],{"class":359},[35,46191,46192,46194,46196,46198],{"class":37,"line":55},[35,46193,31063],{"class":495},[35,46195,31083],{"class":359},[35,46197,30718],{"class":495},[35,46199,31088],{"class":359},[35,46201,46202],{"class":37,"line":65},[35,46203,141],{"emptyLinePlaceholder":140},[35,46205,46206,46208,46210,46212,46214,46216,46218],{"class":37,"line":74},[35,46207,15028],{"class":495},[35,46209,41819],{"class":48},[35,46211,499],{"class":359},[35,46213,31104],{"class":48},[35,46215,1052],{"class":359},[35,46217,31109],{"class":48},[35,46219,31112],{"class":359},[35,46221,46222,46224,46226],{"class":37,"line":83},[35,46223,31127],{"class":495},[35,46225,31130],{"class":58},[35,46227,41838],{"class":359},[35,46229,46230,46232,46234,46236,46238,46240],{"class":37,"line":92},[35,46231,31143],{"class":58},[35,46233,41845],{"class":359},[35,46235,31149],{"class":58},[35,46237,31152],{"class":359},[35,46239,31155],{"class":58},[35,46241,2317],{"class":359},[35,46243,46244,46246,46248,46250],{"class":37,"line":101},[35,46245,31171],{"class":58},[35,46247,35097],{"class":359},[35,46249,544],{"class":495},[35,46251,35102],{"class":359},[35,46253,46254],{"class":37,"line":110},[35,46255,41868],{"class":41},[35,46257,46258,46260,46262,46264,46266,46268,46270,46272,46274,46276,46278,46280,46282,46284],{"class":37,"line":119},[35,46259,31171],{"class":58},[35,46261,41875],{"class":359},[35,46263,544],{"class":495},[35,46265,31179],{"class":359},[35,46267,31182],{"class":5550},[35,46269,544],{"class":495},[35,46271,41886],{"class":359},[35,46273,31191],{"class":5550},[35,46275,544],{"class":495},[35,46277,41893],{"class":359},[35,46279,31200],{"class":5550},[35,46281,544],{"class":495},[35,46283,713],{"class":58},[35,46285,505],{"class":359},[35,46287,46288],{"class":37,"line":128},[35,46289,41906],{"class":41},[35,46291,46292,46294,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316,46318,46320,46322],{"class":37,"line":137},[35,46293,31171],{"class":58},[35,46295,41913],{"class":359},[35,46297,544],{"class":495},[35,46299,31179],{"class":359},[35,46301,31182],{"class":5550},[35,46303,544],{"class":495},[35,46305,41886],{"class":359},[35,46307,31191],{"class":5550},[35,46309,544],{"class":495},[35,46311,41930],{"class":359},[35,46313,687],{"class":58},[35,46315,41935],{"class":359},[35,46317,31200],{"class":5550},[35,46319,544],{"class":495},[35,46321,713],{"class":58},[35,46323,505],{"class":359},[35,46325,46326,46328,46330,46332,46334,46336,46338,46340,46342,46344,46346,46348,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368],{"class":37,"line":144},[35,46327,31171],{"class":58},[35,46329,41950],{"class":359},[35,46331,544],{"class":495},[35,46333,31179],{"class":359},[35,46335,31182],{"class":5550},[35,46337,544],{"class":495},[35,46339,41930],{"class":359},[35,46341,687],{"class":58},[35,46343,41935],{"class":359},[35,46345,31191],{"class":5550},[35,46347,544],{"class":495},[35,46349,41930],{"class":359},[35,46351,713],{"class":58},[35,46353,41935],{"class":359},[35,46355,31200],{"class":5550},[35,46357,544],{"class":495},[35,46359,568],{"class":58},[35,46361,872],{"class":359},[35,46363,31209],{"class":5550},[35,46365,544],{"class":495},[35,46367,713],{"class":58},[35,46369,505],{"class":359},[35,46371,46372],{"class":37,"line":150},[35,46373,41995],{"class":41},[35,46375,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406],{"class":37,"line":159},[35,46377,31171],{"class":58},[35,46379,42002],{"class":359},[35,46381,544],{"class":495},[35,46383,31179],{"class":359},[35,46385,31182],{"class":5550},[35,46387,544],{"class":495},[35,46389,41886],{"class":359},[35,46391,31191],{"class":5550},[35,46393,544],{"class":495},[35,46395,42019],{"class":359},[35,46397,687],{"class":58},[35,46399,41935],{"class":359},[35,46401,31200],{"class":5550},[35,46403,544],{"class":495},[35,46405,713],{"class":58},[35,46407,505],{"class":359},[35,46409,46410,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452],{"class":37,"line":168},[35,46411,31171],{"class":58},[35,46413,42038],{"class":359},[35,46415,544],{"class":495},[35,46417,31179],{"class":359},[35,46419,31182],{"class":5550},[35,46421,544],{"class":495},[35,46423,42019],{"class":359},[35,46425,687],{"class":58},[35,46427,41935],{"class":359},[35,46429,31191],{"class":5550},[35,46431,544],{"class":495},[35,46433,42019],{"class":359},[35,46435,713],{"class":58},[35,46437,41935],{"class":359},[35,46439,31200],{"class":5550},[35,46441,544],{"class":495},[35,46443,372],{"class":58},[35,46445,872],{"class":359},[35,46447,31209],{"class":5550},[35,46449,544],{"class":495},[35,46451,574],{"class":58},[35,46453,505],{"class":359},[35,46455,46456],{"class":37,"line":177},[35,46457,42083],{"class":41},[35,46459,46460],{"class":37,"line":182},[35,46461,42088],{"class":41},[35,46463,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494],{"class":37,"line":188},[35,46465,31171],{"class":58},[35,46467,42095],{"class":359},[35,46469,544],{"class":495},[35,46471,35155],{"class":359},[35,46473,31200],{"class":5550},[35,46475,544],{"class":495},[35,46477,568],{"class":58},[35,46479,872],{"class":359},[35,46481,31255],{"class":5550},[35,46483,544],{"class":495},[35,46485,713],{"class":58},[35,46487,872],{"class":359},[35,46489,31209],{"class":5550},[35,46491,544],{"class":495},[35,46493,713],{"class":58},[35,46495,505],{"class":359},[35,46497,46498,46500,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524],{"class":37,"line":197},[35,46499,31171],{"class":58},[35,46501,42130],{"class":359},[35,46503,544],{"class":495},[35,46505,31179],{"class":359},[35,46507,31182],{"class":5550},[35,46509,544],{"class":495},[35,46511,41886],{"class":359},[35,46513,31191],{"class":5550},[35,46515,544],{"class":495},[35,46517,42147],{"class":359},[35,46519,31200],{"class":5550},[35,46521,544],{"class":495},[35,46523,713],{"class":58},[35,46525,505],{"class":359},[35,46527,46528],{"class":37,"line":206},[35,46529,141],{"emptyLinePlaceholder":140},[35,46531,46532,46534,46536],{"class":37,"line":215},[35,46533,31127],{"class":495},[35,46535,31419],{"class":48},[35,46537,31422],{"class":359},[35,46539,46540,46542,46544,46546,46548,46550],{"class":37,"line":224},[35,46541,42172],{"class":359},[35,46543,544],{"class":495},[35,46545,31149],{"class":58},[35,46547,35510],{"class":359},[35,46549,31149],{"class":58},[35,46551,42183],{"class":359},[35,46553,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572],{"class":37,"line":233},[35,46555,7419],{"class":359},[35,46557,544],{"class":495},[35,46559,31149],{"class":58},[35,46561,35510],{"class":359},[35,46563,31149],{"class":58},[35,46565,42198],{"class":359},[35,46567,31149],{"class":58},[35,46569,35510],{"class":359},[35,46571,31149],{"class":58},[35,46573,42207],{"class":359},[35,46575,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594],{"class":37,"line":238},[35,46577,42212],{"class":359},[35,46579,544],{"class":495},[35,46581,31149],{"class":58},[35,46583,35510],{"class":359},[35,46585,31149],{"class":58},[35,46587,42223],{"class":359},[35,46589,31149],{"class":58},[35,46591,35510],{"class":359},[35,46593,31149],{"class":58},[35,46595,42232],{"class":359},[35,46597,46598,46600,46602,46604,46606,46608,46610,46612],{"class":37,"line":244},[35,46599,42237],{"class":359},[35,46601,544],{"class":495},[35,46603,31149],{"class":58},[35,46605,35510],{"class":359},[35,46607,31149],{"class":58},[35,46609,42248],{"class":359},[35,46611,31149],{"class":58},[35,46613,42253],{"class":359},[35,46615,46616],{"class":37,"line":253},[35,46617,42258],{"class":41},[35,46619,46620,46622,46624,46626,46628,46630],{"class":37,"line":262},[35,46621,15086],{"class":495},[35,46623,42265],{"class":359},[35,46625,33011],{"class":5550},[35,46627,544],{"class":495},[35,46629,713],{"class":58},[35,46631,505],{"class":359},[35,46633,46634],{"class":37,"line":271},[35,46635,141],{"emptyLinePlaceholder":140},[35,46637,46638],{"class":37,"line":280},[35,46639,42286],{"class":41},[35,46641,46642,46644,46646,46648,46650,46652,46654],{"class":37,"line":289},[35,46643,15028],{"class":495},[35,46645,42293],{"class":48},[35,46647,499],{"class":359},[35,46649,31104],{"class":48},[35,46651,1052],{"class":359},[35,46653,31109],{"class":48},[35,46655,31112],{"class":359},[35,46657,46658],{"class":37,"line":294},[35,46659,42308],{"class":41},[35,46661,46662,46664,46666],{"class":37,"line":300},[35,46663,31127],{"class":495},[35,46665,31130],{"class":58},[35,46667,42317],{"class":359},[35,46669,46670,46672,46674,46676,46678,46680],{"class":37,"line":313},[35,46671,31143],{"class":58},[35,46673,42324],{"class":359},[35,46675,31149],{"class":58},[35,46677,31152],{"class":359},[35,46679,31155],{"class":58},[35,46681,2317],{"class":359},[35,46683,46684,46686,46688,46690],{"class":37,"line":324},[35,46685,31171],{"class":58},[35,46687,42339],{"class":359},[35,46689,544],{"class":495},[35,46691,38335],{"class":359},[35,46693,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734],{"class":37,"line":2955},[35,46695,38340],{"class":359},[35,46697,31182],{"class":5550},[35,46699,544],{"class":495},[35,46701,568],{"class":58},[35,46703,872],{"class":359},[35,46705,31191],{"class":5550},[35,46707,544],{"class":495},[35,46709,699],{"class":58},[35,46711,872],{"class":359},[35,46713,31200],{"class":5550},[35,46715,544],{"class":495},[35,46717,863],{"class":58},[35,46719,872],{"class":359},[35,46721,31255],{"class":5550},[35,46723,544],{"class":495},[35,46725,574],{"class":58},[35,46727,872],{"class":359},[35,46729,31209],{"class":5550},[35,46731,544],{"class":495},[35,46733,568],{"class":58},[35,46735,38373],{"class":359},[35,46737,46738],{"class":37,"line":8282},[35,46739,38378],{"class":359},[35,46741,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766],{"class":37,"line":8306},[35,46743,38423],{"class":359},[35,46745,31200],{"class":5550},[35,46747,544],{"class":495},[35,46749,568],{"class":58},[35,46751,872],{"class":359},[35,46753,31255],{"class":5550},[35,46755,544],{"class":495},[35,46757,574],{"class":58},[35,46759,872],{"class":359},[35,46761,31209],{"class":5550},[35,46763,544],{"class":495},[35,46765,713],{"class":58},[35,46767,505],{"class":359},[35,46769,46770],{"class":37,"line":8311},[35,46771,38452],{"class":359},[35,46773,46774,46776,46778,46780],{"class":37,"line":8317},[35,46775,31171],{"class":58},[35,46777,42430],{"class":359},[35,46779,544],{"class":495},[35,46781,38335],{"class":359},[35,46783,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808],{"class":37,"line":8344},[35,46785,38340],{"class":359},[35,46787,31182],{"class":5550},[35,46789,544],{"class":495},[35,46791,699],{"class":58},[35,46793,872],{"class":359},[35,46795,31191],{"class":5550},[35,46797,544],{"class":495},[35,46799,699],{"class":58},[35,46801,872],{"class":359},[35,46803,31200],{"class":5550},[35,46805,544],{"class":495},[35,46807,713],{"class":58},[35,46809,38373],{"class":359},[35,46811,46812],{"class":37,"line":8349},[35,46813,38378],{"class":359},[35,46815,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848],{"class":37,"line":8355},[35,46817,38340],{"class":359},[35,46819,31182],{"class":5550},[35,46821,544],{"class":495},[35,46823,699],{"class":58},[35,46825,872],{"class":359},[35,46827,31191],{"class":5550},[35,46829,544],{"class":495},[35,46831,42485],{"class":58},[35,46833,872],{"class":359},[35,46835,31200],{"class":5550},[35,46837,544],{"class":495},[35,46839,568],{"class":58},[35,46841,872],{"class":359},[35,46843,31209],{"class":5550},[35,46845,544],{"class":495},[35,46847,713],{"class":58},[35,46849,38373],{"class":359},[35,46851,46852],{"class":37,"line":8367},[35,46853,38378],{"class":359},[35,46855,46856,46858,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880],{"class":37,"line":8379},[35,46857,38423],{"class":359},[35,46859,31200],{"class":5550},[35,46861,544],{"class":495},[35,46863,568],{"class":58},[35,46865,872],{"class":359},[35,46867,31255],{"class":5550},[35,46869,544],{"class":495},[35,46871,574],{"class":58},[35,46873,872],{"class":359},[35,46875,31209],{"class":5550},[35,46877,544],{"class":495},[35,46879,713],{"class":58},[35,46881,505],{"class":359},[35,46883,46884],{"class":37,"line":8391},[35,46885,38452],{"class":359},[35,46887,46888,46890,46892,46894],{"class":37,"line":10050},[35,46889,31171],{"class":58},[35,46891,42546],{"class":359},[35,46893,544],{"class":495},[35,46895,38335],{"class":359},[35,46897,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926],{"class":37,"line":10075},[35,46899,42555],{"class":359},[35,46901,42485],{"class":58},[35,46903,872],{"class":359},[35,46905,699],{"class":58},[35,46907,42564],{"class":359},[35,46909,705],{"class":58},[35,46911,872],{"class":359},[35,46913,32396],{"class":58},[35,46915,42573],{"class":359},[35,46917,1095],{"class":58},[35,46919,872],{"class":359},[35,46921,693],{"class":58},[35,46923,42582],{"class":359},[35,46925,693],{"class":58},[35,46927,38373],{"class":359},[35,46929,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958],{"class":37,"line":10098},[35,46931,42555],{"class":359},[35,46933,35196],{"class":58},[35,46935,872],{"class":359},[35,46937,32396],{"class":58},[35,46939,42564],{"class":359},[35,46941,32396],{"class":58},[35,46943,872],{"class":359},[35,46945,42485],{"class":58},[35,46947,42573],{"class":359},[35,46949,693],{"class":58},[35,46951,872],{"class":359},[35,46953,705],{"class":58},[35,46955,42582],{"class":359},[35,46957,699],{"class":58},[35,46959,38373],{"class":359},[35,46961,46962,46964,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986],{"class":37,"line":10122},[35,46963,38423],{"class":359},[35,46965,31200],{"class":5550},[35,46967,544],{"class":495},[35,46969,568],{"class":58},[35,46971,872],{"class":359},[35,46973,31255],{"class":5550},[35,46975,544],{"class":495},[35,46977,574],{"class":58},[35,46979,872],{"class":359},[35,46981,31209],{"class":5550},[35,46983,544],{"class":495},[35,46985,713],{"class":58},[35,46987,505],{"class":359},[35,46989,46990],{"class":37,"line":10127},[35,46991,38452],{"class":359},[35,46993,46994,46996,46998,47000],{"class":37,"line":10132},[35,46995,31171],{"class":58},[35,46997,42657],{"class":359},[35,46999,544],{"class":495},[35,47001,38335],{"class":359},[35,47003,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022,47024,47026,47028,47030,47032],{"class":37,"line":10137},[35,47005,42555],{"class":359},[35,47007,42668],{"class":58},[35,47009,872],{"class":359},[35,47011,42485],{"class":58},[35,47013,42564],{"class":359},[35,47015,705],{"class":58},[35,47017,872],{"class":359},[35,47019,42681],{"class":58},[35,47021,42573],{"class":359},[35,47023,1095],{"class":58},[35,47025,872],{"class":359},[35,47027,1101],{"class":58},[35,47029,42582],{"class":359},[35,47031,699],{"class":58},[35,47033,38373],{"class":359},[35,47035,47036,47038,47040,47042,47044,47046,47048,47050,47052,47054,47056,47058,47060,47062,47064],{"class":37,"line":10146},[35,47037,42555],{"class":359},[35,47039,38783],{"class":58},[35,47041,872],{"class":359},[35,47043,21382],{"class":58},[35,47045,42564],{"class":359},[35,47047,1112],{"class":58},[35,47049,872],{"class":359},[35,47051,31827],{"class":58},[35,47053,42573],{"class":359},[35,47055,1294],{"class":58},[35,47057,872],{"class":359},[35,47059,699],{"class":58},[35,47061,42582],{"class":359},[35,47063,699],{"class":58},[35,47065,38373],{"class":359},[35,47067,47068,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090,47092,47094,47096],{"class":37,"line":10151},[35,47069,42555],{"class":359},[35,47071,38783],{"class":58},[35,47073,872],{"class":359},[35,47075,32396],{"class":58},[35,47077,42564],{"class":359},[35,47079,32396],{"class":58},[35,47081,872],{"class":359},[35,47083,35196],{"class":58},[35,47085,42573],{"class":359},[35,47087,1294],{"class":58},[35,47089,872],{"class":359},[35,47091,699],{"class":58},[35,47093,42582],{"class":359},[35,47095,699],{"class":58},[35,47097,38373],{"class":359},[35,47099,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128],{"class":37,"line":10157},[35,47101,42555],{"class":359},[35,47103,38783],{"class":58},[35,47105,872],{"class":359},[35,47107,1112],{"class":58},[35,47109,42564],{"class":359},[35,47111,32396],{"class":58},[35,47113,872],{"class":359},[35,47115,42778],{"class":58},[35,47117,42573],{"class":359},[35,47119,693],{"class":58},[35,47121,872],{"class":359},[35,47123,699],{"class":58},[35,47125,42582],{"class":359},[35,47127,699],{"class":58},[35,47129,38373],{"class":359},[35,47131,47132,47134,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156,47158,47160],{"class":37,"line":10178},[35,47133,42555],{"class":359},[35,47135,42799],{"class":58},[35,47137,872],{"class":359},[35,47139,35196],{"class":58},[35,47141,42564],{"class":359},[35,47143,21382],{"class":58},[35,47145,872],{"class":359},[35,47147,42812],{"class":58},[35,47149,42573],{"class":359},[35,47151,693],{"class":58},[35,47153,872],{"class":359},[35,47155,32396],{"class":58},[35,47157,42582],{"class":359},[35,47159,32396],{"class":58},[35,47161,38373],{"class":359},[35,47163,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188],{"class":37,"line":10184},[35,47165,38423],{"class":359},[35,47167,31200],{"class":5550},[35,47169,544],{"class":495},[35,47171,568],{"class":58},[35,47173,872],{"class":359},[35,47175,31255],{"class":5550},[35,47177,544],{"class":495},[35,47179,574],{"class":58},[35,47181,872],{"class":359},[35,47183,31209],{"class":5550},[35,47185,544],{"class":495},[35,47187,713],{"class":58},[35,47189,505],{"class":359},[35,47191,47192],{"class":37,"line":10198},[35,47193,38452],{"class":359},[35,47195,47196,47198,47200,47202],{"class":37,"line":10204},[35,47197,31171],{"class":58},[35,47199,42865],{"class":359},[35,47201,544],{"class":495},[35,47203,38335],{"class":359},[35,47205,47206,47208,47210,47212,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232,47234],{"class":37,"line":10231},[35,47207,42555],{"class":359},[35,47209,42876],{"class":58},[35,47211,872],{"class":359},[35,47213,35196],{"class":58},[35,47215,42564],{"class":359},[35,47217,21382],{"class":58},[35,47219,872],{"class":359},[35,47221,42812],{"class":58},[35,47223,42573],{"class":359},[35,47225,693],{"class":58},[35,47227,872],{"class":359},[35,47229,32396],{"class":58},[35,47231,42582],{"class":359},[35,47233,32396],{"class":58},[35,47235,38373],{"class":359},[35,47237,47238,47240,47242,47244,47246,47248,47250,47252,47254,47256,47258,47260,47262,47264,47266],{"class":37,"line":10240},[35,47239,42555],{"class":359},[35,47241,42876],{"class":58},[35,47243,872],{"class":359},[35,47245,35266],{"class":58},[35,47247,42564],{"class":359},[35,47249,42485],{"class":58},[35,47251,872],{"class":359},[35,47253,35266],{"class":58},[35,47255,42573],{"class":359},[35,47257,1101],{"class":58},[35,47259,872],{"class":359},[35,47261,32396],{"class":58},[35,47263,42582],{"class":359},[35,47265,32396],{"class":58},[35,47267,38373],{"class":359},[35,47269,47270,47272,47274,47276,47278],{"class":37,"line":10246},[35,47271,42939],{"class":359},[35,47273,713],{"class":58},[35,47275,872],{"class":359},[35,47277,713],{"class":58},[35,47279,42948],{"class":359},[35,47281,47282],{"class":37,"line":10254},[35,47283,39116],{"class":359},[35,47285,47286,47288,47290,47292,47294],{"class":37,"line":10259},[35,47287,39121],{"class":359},[35,47289,42959],{"class":58},[35,47291,872],{"class":359},[35,47293,574],{"class":58},[35,47295,505],{"class":359},[35,47297,47298],{"class":37,"line":16938},[35,47299,38452],{"class":359},[35,47301,47302],{"class":37,"line":16944},[35,47303,42974],{"class":41},[35,47305,47306,47308,47310,47312,47314],{"class":37,"line":16967},[35,47307,3737],{"class":495},[35,47309,39194],{"class":359},[35,47311,26374],{"class":495},[35,47313,39199],{"class":58},[35,47315,39202],{"class":359},[35,47317,47318,47320,47322],{"class":37,"line":16973},[35,47319,4976],{"class":495},[35,47321,39214],{"class":58},[35,47323,39217],{"class":359},[35,47325,47326,47328,47330,47332,47334,47336,47338,47340,47342],{"class":37,"line":16996},[35,47327,39227],{"class":359},[35,47329,43001],{"class":5550},[35,47331,544],{"class":495},[35,47333,43006],{"class":306},[35,47335,872],{"class":359},[35,47337,39230],{"class":5550},[35,47339,544],{"class":495},[35,47341,39235],{"class":306},[35,47343,505],{"class":359},[35,47345,47346],{"class":37,"line":17010},[35,47347,43021],{"class":41},[35,47349,47350],{"class":37,"line":17030},[35,47351,43026],{"class":41},[35,47353,47354],{"class":37,"line":17036},[35,47355,43031],{"class":41},[35,47357,47358],{"class":37,"line":17047},[35,47359,43036],{"class":41},[35,47361,47362],{"class":37,"line":17070},[35,47363,43041],{"class":41},[35,47365,47366],{"class":37,"line":17092},[35,47367,43046],{"class":41},[35,47369,47370,47372,47374,47376,47378,47380],{"class":37,"line":17097},[35,47371,39247],{"class":495},[35,47373,39250],{"class":359},[35,47375,39253],{"class":495},[35,47377,39256],{"class":495},[35,47379,39259],{"class":58},[35,47381,4073],{"class":359},[35,47383,47384,47386,47388],{"class":37,"line":17103},[35,47385,39271],{"class":359},[35,47387,687],{"class":58},[35,47389,505],{"class":359},[35,47391,47392,47394,47396],{"class":37,"line":17117},[35,47393,43073],{"class":495},[35,47395,39214],{"class":58},[35,47397,39290],{"class":359},[35,47399,47400,47402,47404,47406,47408],{"class":37,"line":17130},[35,47401,43082],{"class":359},[35,47403,687],{"class":58},[35,47405,872],{"class":359},[35,47407,39312],{"class":58},[35,47409,505],{"class":359},[35,47411,47412,47414,47416,47418,47420,47422],{"class":37,"line":17135},[35,47413,43095],{"class":495},[35,47415,39250],{"class":359},[35,47417,39253],{"class":495},[35,47419,39256],{"class":495},[35,47421,39259],{"class":58},[35,47423,4073],{"class":359},[35,47425,47426,47428,47430],{"class":37,"line":17149},[35,47427,43110],{"class":359},[35,47429,687],{"class":58},[35,47431,505],{"class":359},[35,47433,47434],{"class":37,"line":17154},[35,47435,35491],{"class":41},[35,47437,47438,47440,47442],{"class":37,"line":17160},[35,47439,31127],{"class":495},[35,47441,31419],{"class":48},[35,47443,31422],{"class":359},[35,47445,47446,47448,47450,47452],{"class":37,"line":17165},[35,47447,31427],{"class":359},[35,47449,544],{"class":495},[35,47451,31149],{"class":58},[35,47453,43137],{"class":359},[35,47455,47456,47458,47460,47462],{"class":37,"line":17179},[35,47457,31427],{"class":359},[35,47459,544],{"class":495},[35,47461,31149],{"class":58},[35,47463,43148],{"class":359},[35,47465,47466,47468,47470,47472],{"class":37,"line":17184},[35,47467,31427],{"class":359},[35,47469,544],{"class":495},[35,47471,31149],{"class":58},[35,47473,43159],{"class":359},[35,47475,47476,47478,47480,47482],{"class":37,"line":17189},[35,47477,31427],{"class":359},[35,47479,544],{"class":495},[35,47481,31149],{"class":58},[35,47483,43170],{"class":359},[35,47485,47486,47488,47490,47492],{"class":37,"line":17203},[35,47487,31427],{"class":359},[35,47489,544],{"class":495},[35,47491,31149],{"class":58},[35,47493,43181],{"class":359},[35,47495,47496,47498],{"class":37,"line":17215},[35,47497,15086],{"class":495},[35,47499,31535],{"class":359},[35,47501,47502],{"class":37,"line":17220},[35,47503,141],{"emptyLinePlaceholder":140},[35,47505,47506],{"class":37,"line":17233},[35,47507,43196],{"class":41},[35,47509,47510,47512,47514,47516,47518],{"class":37,"line":17238},[35,47511,1892],{"class":495},[35,47513,31546],{"class":58},[35,47515,3283],{"class":495},[35,47517,31551],{"class":306},[35,47519,4073],{"class":359},[35,47521,47522,47524,47526,47528,47530,47532,47534,47536,47538],{"class":37,"line":17243},[35,47523,31563],{"class":359},[35,47525,544],{"class":495},[35,47527,30777],{"class":359},[35,47529,31570],{"class":306},[35,47531,2054],{"class":495},[35,47533,31575],{"class":359},[35,47535,2051],{"class":495},[35,47537,30802],{"class":306},[35,47539,505],{"class":359},[35,47541,47542,47544,47546],{"class":37,"line":17248},[35,47543,31615],{"class":359},[35,47545,544],{"class":495},[35,47547,43237],{"class":359},[35,47549,47550,47552,47554,47556,47558,47560,47562,47564],{"class":37,"line":17261},[35,47551,31625],{"class":58},[35,47553,31628],{"class":359},[35,47555,713],{"class":58},[35,47557,872],{"class":359},[35,47559,31827],{"class":58},[35,47561,872],{"class":359},[35,47563,31827],{"class":58},[35,47565,31641],{"class":359},[22332,47567,47569],{"id":47568},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[21,47571,47572],{},"计算图片的均值与方差，用于训练中归一化处理操作",[25,47574,47576],{"className":30704,"code":47575,"language":30706,"meta":30,"style":30},"# 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",[32,47577,47578,47583,47596,47601,47607,47612,47622,47626,47631,47641,47645,47650,47660,47677,47681,47686,47698,47710,47741,47750,47760,47770,47774,47779,47794,47798,47803,47808,47813,47823,47828,47853,47857,47862,47877,47881,47894,47898,47903,47908,47913,47918,47923,47933,47943,47966,47974,47982,47990,47994,48006,48010,48015,48019,48023,48030,48050,48074,48081,48095,48100,48105,48109,48123,48127,48139],{"__ignoreMap":30},[35,47579,47580],{"class":37,"line":38},[35,47581,47582],{"class":41},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[35,47584,47585,47587,47590,47593],{"class":37,"line":45},[35,47586,31063],{"class":495},[35,47588,47589],{"class":58}," PIL",[35,47591,47592],{"class":495}," import",[35,47594,47595],{"class":359}," Image\n",[35,47597,47598],{"class":37,"line":55},[35,47599,47600],{"class":41},"# os 用来处理文件夹和文件路径\n",[35,47602,47603,47605],{"class":37,"line":65},[35,47604,30718],{"class":495},[35,47606,45631],{"class":359},[35,47608,47609],{"class":37,"line":74},[35,47610,47611],{"class":41},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[35,47613,47614,47616,47618,47620],{"class":37,"line":83},[35,47615,30718],{"class":495},[35,47617,31706],{"class":359},[35,47619,31709],{"class":495},[35,47621,31712],{"class":359},[35,47623,47624],{"class":37,"line":92},[35,47625,141],{"emptyLinePlaceholder":140},[35,47627,47628],{"class":37,"line":101},[35,47629,47630],{"class":41},"# 文件夹路径，包含所有图片文件\n",[35,47632,47633,47636,47638],{"class":37,"line":110},[35,47634,47635],{"class":359},"folder_path ",[35,47637,544],{"class":495},[35,47639,47640],{"class":306}," 'data_cat_dog'\n",[35,47642,47643],{"class":37,"line":119},[35,47644,141],{"emptyLinePlaceholder":140},[35,47646,47647],{"class":37,"line":128},[35,47648,47649],{"class":41},"# 初始化累积变量\n",[35,47651,47652,47655,47657],{"class":37,"line":137},[35,47653,47654],{"class":359},"total_pixels ",[35,47656,544],{"class":495},[35,47658,47659],{"class":58}," 0\n",[35,47661,47662,47665,47667,47670,47672,47674],{"class":37,"line":144},[35,47663,47664],{"class":359},"sum_normalized_pixel_values ",[35,47666,544],{"class":495},[35,47668,47669],{"class":359}," np.zeros(",[35,47671,568],{"class":58},[35,47673,46134],{"class":359},[35,47675,47676],{"class":41},"# 如果是RGB图像，需要三个通道的均值和方差\n",[35,47678,47679],{"class":37,"line":150},[35,47680,141],{"emptyLinePlaceholder":140},[35,47682,47683],{"class":37,"line":159},[35,47684,47685],{"class":41},"# 遍历文件夹中的图片文件\n",[35,47687,47688,47690,47693,47695],{"class":37,"line":168},[35,47689,3359],{"class":495},[35,47691,47692],{"class":359}," root, dirs, files ",[35,47694,26374],{"class":495},[35,47696,47697],{"class":359}," os.walk(folder_path):\n",[35,47699,47700,47702,47705,47707],{"class":37,"line":177},[35,47701,3535],{"class":495},[35,47703,47704],{"class":359}," filename ",[35,47706,26374],{"class":495},[35,47708,47709],{"class":359}," files:\n",[35,47711,47712,47714,47717,47720,47722,47725,47727,47730,47732,47735,47738],{"class":37,"line":182},[35,47713,2837],{"class":495},[35,47715,47716],{"class":359}," filename.endswith((",[35,47718,47719],{"class":306},"'.jpg'",[35,47721,12769],{"class":359},[35,47723,47724],{"class":306},"'.jpeg'",[35,47726,12769],{"class":359},[35,47728,47729],{"class":306},"'.png'",[35,47731,12769],{"class":359},[35,47733,47734],{"class":306},"'.bmp'",[35,47736,47737],{"class":359},")):  ",[35,47739,47740],{"class":41},"# 可根据实际情况添加其他格式\n",[35,47742,47743,47745,47747],{"class":37,"line":188},[35,47744,45999],{"class":359},[35,47746,544],{"class":495},[35,47748,47749],{"class":359}," os.path.join(root, filename)\n",[35,47751,47752,47755,47757],{"class":37,"line":197},[35,47753,47754],{"class":359},"            image ",[35,47756,544],{"class":495},[35,47758,47759],{"class":359}," Image.open(image_path)\n",[35,47761,47762,47765,47767],{"class":37,"line":206},[35,47763,47764],{"class":359},"            image_array ",[35,47766,544],{"class":495},[35,47768,47769],{"class":359}," np.array(image)\n",[35,47771,47772],{"class":37,"line":215},[35,47773,141],{"emptyLinePlaceholder":140},[35,47775,47776],{"class":37,"line":224},[35,47777,47778],{"class":41},"            # 归一化像素值到0-1之间\n",[35,47780,47781,47784,47786,47789,47791],{"class":37,"line":233},[35,47782,47783],{"class":359},"            normalized_image_array ",[35,47785,544],{"class":495},[35,47787,47788],{"class":359}," image_array ",[35,47790,1078],{"class":495},[35,47792,47793],{"class":58}," 255.0\n",[35,47795,47796],{"class":37,"line":238},[35,47797,141],{"emptyLinePlaceholder":140},[35,47799,47800],{"class":37,"line":244},[35,47801,47802],{"class":41},"            # print(image_path)\n",[35,47804,47805],{"class":37,"line":253},[35,47806,47807],{"class":41},"            # print(normalized_image_array.shape)\n",[35,47809,47810],{"class":37,"line":262},[35,47811,47812],{"class":41},"            # 累积归一化后的像素值和像素数量\n",[35,47814,47815,47818,47820],{"class":37,"line":271},[35,47816,47817],{"class":359},"            total_pixels ",[35,47819,9811],{"class":495},[35,47821,47822],{"class":359}," normalized_image_array.size\n",[35,47824,47825],{"class":37,"line":280},[35,47826,47827],{"class":41},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[35,47829,47830,47833,47835,47838,47841,47843,47845,47847,47849,47851],{"class":37,"line":289},[35,47831,47832],{"class":359},"            sum_normalized_pixel_values ",[35,47834,9811],{"class":495},[35,47836,47837],{"class":359}," np.sum(normalized_image_array, ",[35,47839,47840],{"class":5550},"axis",[35,47842,544],{"class":495},[35,47844,499],{"class":359},[35,47846,687],{"class":58},[35,47848,12769],{"class":359},[35,47850,713],{"class":58},[35,47852,30823],{"class":359},[35,47854,47855],{"class":37,"line":294},[35,47856,141],{"emptyLinePlaceholder":140},[35,47858,47859],{"class":37,"line":300},[35,47860,47861],{"class":41},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[35,47863,47864,47867,47869,47872,47874],{"class":37,"line":313},[35,47865,47866],{"class":359},"mean ",[35,47868,544],{"class":495},[35,47870,47871],{"class":359}," sum_normalized_pixel_values ",[35,47873,1078],{"class":495},[35,47875,47876],{"class":359}," total_pixels\n",[35,47878,47879],{"class":37,"line":324},[35,47880,141],{"emptyLinePlaceholder":140},[35,47882,47883,47886,47888,47890,47892],{"class":37,"line":2955},[35,47884,47885],{"class":359},"sum_squared_diff ",[35,47887,544],{"class":495},[35,47889,47669],{"class":359},[35,47891,568],{"class":58},[35,47893,505],{"class":359},[35,47895,47896],{"class":37,"line":8282},[35,47897,141],{"emptyLinePlaceholder":140},[35,47899,47900],{"class":37,"line":8306},[35,47901,47902],{"class":41},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[35,47904,47905],{"class":37,"line":8311},[35,47906,47907],{"class":41},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[35,47909,47910],{"class":37,"line":8317},[35,47911,47912],{"class":41},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[35,47914,47915],{"class":37,"line":8344},[35,47916,47917],{"class":41},"# Image.open(image_path)：打开图片\n",[35,47919,47920],{"class":37,"line":8349},[35,47921,47922],{"class":41},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[35,47924,47925,47927,47929,47931],{"class":37,"line":8355},[35,47926,3359],{"class":495},[35,47928,47692],{"class":359},[35,47930,26374],{"class":495},[35,47932,47697],{"class":359},[35,47934,47935,47937,47939,47941],{"class":37,"line":8367},[35,47936,3535],{"class":495},[35,47938,47704],{"class":359},[35,47940,26374],{"class":495},[35,47942,47709],{"class":359},[35,47944,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963],{"class":37,"line":8379},[35,47946,2837],{"class":495},[35,47948,47716],{"class":359},[35,47950,47719],{"class":306},[35,47952,12769],{"class":359},[35,47954,47724],{"class":306},[35,47956,12769],{"class":359},[35,47958,47729],{"class":306},[35,47960,12769],{"class":359},[35,47962,47734],{"class":306},[35,47964,47965],{"class":359},")):\n",[35,47967,47968,47970,47972],{"class":37,"line":8391},[35,47969,45999],{"class":359},[35,47971,544],{"class":495},[35,47973,47749],{"class":359},[35,47975,47976,47978,47980],{"class":37,"line":10050},[35,47977,47754],{"class":359},[35,47979,544],{"class":495},[35,47981,47759],{"class":359},[35,47983,47984,47986,47988],{"class":37,"line":10075},[35,47985,47764],{"class":359},[35,47987,544],{"class":495},[35,47989,47769],{"class":359},[35,47991,47992],{"class":37,"line":10098},[35,47993,47778],{"class":41},[35,47995,47996,47998,48000,48002,48004],{"class":37,"line":10122},[35,47997,47783],{"class":359},[35,47999,544],{"class":495},[35,48001,47788],{"class":359},[35,48003,1078],{"class":495},[35,48005,47793],{"class":58},[35,48007,48008],{"class":37,"line":10127},[35,48009,47807],{"class":41},[35,48011,48012],{"class":37,"line":10132},[35,48013,48014],{"class":41},"            # print(mean.shape)\n",[35,48016,48017],{"class":37,"line":10137},[35,48018,47802],{"class":41},[35,48020,48021],{"class":37,"line":10146},[35,48022,141],{"emptyLinePlaceholder":140},[35,48024,48025,48028],{"class":37,"line":10151},[35,48026,48027],{"class":495},"            try",[35,48029,4073],{"class":359},[35,48031,48032,48035,48037,48040,48042,48045,48047],{"class":37,"line":10157},[35,48033,48034],{"class":359},"                diff ",[35,48036,544],{"class":495},[35,48038,48039],{"class":359}," (normalized_image_array ",[35,48041,1026],{"class":495},[35,48043,48044],{"class":359}," mean) ",[35,48046,10995],{"class":495},[35,48048,48049],{"class":58}," 2\n",[35,48051,48052,48055,48057,48060,48062,48064,48066,48068,48070,48072],{"class":37,"line":10178},[35,48053,48054],{"class":359},"                sum_squared_diff ",[35,48056,9811],{"class":495},[35,48058,48059],{"class":359}," np.sum(diff, ",[35,48061,47840],{"class":5550},[35,48063,544],{"class":495},[35,48065,499],{"class":359},[35,48067,687],{"class":58},[35,48069,12769],{"class":359},[35,48071,713],{"class":58},[35,48073,30823],{"class":359},[35,48075,48076,48079],{"class":37,"line":10184},[35,48077,48078],{"class":495},"            except",[35,48080,4073],{"class":359},[35,48082,48083,48086,48088,48090,48093],{"class":37,"line":10198},[35,48084,48085],{"class":58},"                print",[35,48087,499],{"class":359},[35,48089,550],{"class":495},[35,48091,48092],{"class":306},"\"捕获到自定义异常\"",[35,48094,505],{"class":359},[35,48096,48097],{"class":37,"line":10204},[35,48098,48099],{"class":41},"            # diff = (normalized_image_array - mean) ** 2\n",[35,48101,48102],{"class":37,"line":10231},[35,48103,48104],{"class":41},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[35,48106,48107],{"class":37,"line":10240},[35,48108,141],{"emptyLinePlaceholder":140},[35,48110,48111,48114,48116,48119,48121],{"class":37,"line":10246},[35,48112,48113],{"class":359},"variance ",[35,48115,544],{"class":495},[35,48117,48118],{"class":359}," sum_squared_diff ",[35,48120,1078],{"class":495},[35,48122,47876],{"class":359},[35,48124,48125],{"class":37,"line":10254},[35,48126,141],{"emptyLinePlaceholder":140},[35,48128,48129,48131,48133,48136],{"class":37,"line":10259},[35,48130,30741],{"class":58},[35,48132,499],{"class":359},[35,48134,48135],{"class":306},"\"Mean:\"",[35,48137,48138],{"class":359},", mean)\n",[35,48140,48141,48143,48145,48148],{"class":37,"line":16938},[35,48142,30741],{"class":58},[35,48144,499],{"class":359},[35,48146,48147],{"class":306},"\"Variance:\"",[35,48149,48150],{"class":359},", variance)\n",[25,48152,48154],{"className":30704,"code":48153,"language":30706,"meta":30,"style":30},"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",[32,48155,48156,48162,48168,48178,48184,48194,48208,48218,48228,48238,48242,48252,48262,48266,48270,48278,48283,48288,48307,48311,48316,48321,48326,48331,48372,48377,48387,48392,48405,48410,48415,48420,48425,48430,48434,48439,48444,48466,48470,48502,48516,48526,48536,48540,48550,48564,48574,48584,48594,48600,48604,48608,48612,48616,48620,48628,48648,48652,48656,48660,48664,48680,48684,48688,48696,48700,48704,48712,48716,48720,48724,48732,48736,48740,48744,48752,48756,48764,48768,48776,48780,48788,48792,48800,48804,48808,48816,48820,48824,48836,48860,48874,48878,48882,48886,48894,48898,48906,48910,48918,48922,48930,48934,48942,48946,48954,48958,48970,48974,48982,48986,48994,48998,49002,49006,49010,49018,49022,49038,49042,49050,49054,49058,49062,49066,49070,49074,49078,49094,49098,49110,49114,49126,49130,49142,49146,49154,49158,49166,49170,49174,49178,49184,49188,49196,49200,49216,49220,49228,49232,49248,49260,49264,49276,49280,49284,49292,49296,49300,49308,49312,49320,49324,49332,49336,49340,49382,49424,49428,49432,49448,49452,49468,49472,49476,49484,49488,49492,49504,49542,49546,49550,49558,49562,49576,49586,49592,49598,49604,49610,49614,49618,49624,49628,49632,49640,49644,49662,49666,49670,49674,49690,49694,49698,49702,49706,49710,49730,49750,49754,49758,49762,49770,49778,49782,49798,49818,49838,49842,49847,49856,49865,49870,49875,49880,49893,49898,49907,49916,49933],{"__ignoreMap":30},[35,48157,48158,48160],{"class":37,"line":38},[35,48159,30718],{"class":495},[35,48161,32148],{"class":359},[35,48163,48164,48166],{"class":37,"line":45},[35,48165,30718],{"class":495},[35,48167,32155],{"class":359},[35,48169,48170,48172,48174,48176],{"class":37,"line":55},[35,48171,30718],{"class":495},[35,48173,32166],{"class":359},[35,48175,31709],{"class":495},[35,48177,32171],{"class":359},[35,48179,48180,48182],{"class":37,"line":65},[35,48181,30718],{"class":495},[35,48183,30721],{"class":359},[35,48185,48186,48188,48190,48192],{"class":37,"line":74},[35,48187,31063],{"class":495},[35,48189,31741],{"class":359},[35,48191,30718],{"class":495},[35,48193,32188],{"class":359},[35,48195,48196,48198,48200,48202,48205],{"class":37,"line":83},[35,48197,31063],{"class":495},[35,48199,31694],{"class":359},[35,48201,30718],{"class":495},[35,48203,48204],{"class":359}," ImageFolder ",[35,48206,48207],{"class":41},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[35,48209,48210,48212,48214,48216],{"class":37,"line":92},[35,48211,31063],{"class":495},[35,48213,31724],{"class":359},[35,48215,30718],{"class":495},[35,48217,31729],{"class":359},[35,48219,48220,48222,48224,48226],{"class":37,"line":101},[35,48221,30718],{"class":495},[35,48223,31741],{"class":359},[35,48225,31709],{"class":495},[35,48227,31746],{"class":359},[35,48229,48230,48232,48234,48236],{"class":37,"line":110},[35,48231,30718],{"class":495},[35,48233,31758],{"class":359},[35,48235,31709],{"class":495},[35,48237,31763],{"class":359},[35,48239,48240],{"class":37,"line":119},[35,48241,32233],{"class":41},[35,48243,48244,48246,48248,48250],{"class":37,"line":128},[35,48245,31063],{"class":495},[35,48247,32240],{"class":359},[35,48249,30718],{"class":495},[35,48251,43357],{"class":359},[35,48253,48254,48256,48258,48260],{"class":37,"line":137},[35,48255,31063],{"class":495},[35,48257,31066],{"class":359},[35,48259,30718],{"class":495},[35,48261,31071],{"class":359},[35,48263,48264],{"class":37,"line":144},[35,48265,141],{"emptyLinePlaceholder":140},[35,48267,48268],{"class":37,"line":150},[35,48269,32268],{"class":41},[35,48271,48272,48274,48276],{"class":37,"line":159},[35,48273,32273],{"class":495},[35,48275,32276],{"class":48},[35,48277,32279],{"class":359},[35,48279,48280],{"class":37,"line":168},[35,48281,48282],{"class":41},"    # 导入自己的数据集，并进行数据处理\n",[35,48284,48285],{"class":37,"line":177},[35,48286,48287],{"class":41},"    # 定义数据集的路径\n",[35,48289,48290,48293,48295,48297,48299,48301,48305],{"class":37,"line":182},[35,48291,48292],{"class":58},"    ROOT_PATH",[35,48294,544],{"class":495},[35,48296,1164],{"class":495},[35,48298,747],{"class":306},[35,48300,1052],{"class":58},[35,48302,48304],{"class":48303},"sA_wV","\u002Fdata\u002Ftrain",[35,48306,25465],{"class":306},[35,48308,48309],{"class":37,"line":188},[35,48310,141],{"emptyLinePlaceholder":140},[35,48312,48313],{"class":37,"line":197},[35,48314,48315],{"class":41},"    # 定义归一化方法\n",[35,48317,48318],{"class":37,"line":206},[35,48319,48320],{"class":41},"    # 这里需要先计算一下数据集的均值和方差\n",[35,48322,48323],{"class":37,"line":215},[35,48324,48325],{"class":41},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[35,48327,48328],{"class":37,"line":224},[35,48329,48330],{"class":41},"    # 第一个参数是均值，第二个参数是方差\n",[35,48332,48333,48336,48338,48341,48344,48346,48349,48351,48354,48357,48360,48362,48365,48367,48370],{"class":37,"line":233},[35,48334,48335],{"class":359},"    normalize",[35,48337,544],{"class":495},[35,48339,48340],{"class":359},"transforms.Normalize([",[35,48342,48343],{"class":58},"0.162",[35,48345,872],{"class":359},[35,48347,48348],{"class":58},"0.151",[35,48350,872],{"class":359},[35,48352,48353],{"class":58},"0.138",[35,48355,48356],{"class":359},"],[",[35,48358,48359],{"class":58},"0.058",[35,48361,872],{"class":359},[35,48363,48364],{"class":58},"0.052",[35,48366,872],{"class":359},[35,48368,48369],{"class":58},"0.048",[35,48371,4991],{"class":359},[35,48373,48374],{"class":37,"line":238},[35,48375,48376],{"class":41},"    # 定义数据集处理方法变量\n",[35,48378,48379,48382,48384],{"class":37,"line":244},[35,48380,48381],{"class":359},"    train_transform",[35,48383,544],{"class":495},[35,48385,48386],{"class":359},"transforms.Compose([\n",[35,48388,48389],{"class":37,"line":253},[35,48390,48391],{"class":41},"        # 调整图像大小为224*224\n",[35,48393,48394,48397,48399,48401,48403],{"class":37,"line":262},[35,48395,48396],{"class":359},"        transforms.Resize((",[35,48398,31827],{"class":58},[35,48400,872],{"class":359},[35,48402,31827],{"class":58},[35,48404,42948],{"class":359},[35,48406,48407],{"class":37,"line":271},[35,48408,48409],{"class":41},"        # 将图像转换为张量\n",[35,48411,48412],{"class":37,"line":280},[35,48413,48414],{"class":359},"        transforms.ToTensor(),\n",[35,48416,48417],{"class":37,"line":289},[35,48418,48419],{"class":359},"        normalize])\n",[35,48421,48422],{"class":37,"line":294},[35,48423,48424],{"class":41},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[35,48426,48427],{"class":37,"line":300},[35,48428,48429],{"class":41},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[35,48431,48432],{"class":37,"line":313},[35,48433,141],{"emptyLinePlaceholder":140},[35,48435,48436],{"class":37,"line":324},[35,48437,48438],{"class":41},"    # 加载数据集\n",[35,48440,48441],{"class":37,"line":2955},[35,48442,48443],{"class":41},"    # 传入数据集路径与处理方法\n",[35,48445,48446,48448,48450,48453,48456,48458,48461,48463],{"class":37,"line":8282},[35,48447,32284],{"class":359},[35,48449,544],{"class":495},[35,48451,48452],{"class":359},"ImageFolder(",[35,48454,48455],{"class":58},"ROOT_PATH",[35,48457,872],{"class":359},[35,48459,48460],{"class":5550},"transform",[35,48462,544],{"class":495},[35,48464,48465],{"class":359},"train_transform)\n",[35,48467,48468],{"class":37,"line":8306},[35,48469,141],{"emptyLinePlaceholder":140},[35,48471,48472,48474,48476,48478,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500],{"class":37,"line":8311},[35,48473,32336],{"class":359},[35,48475,544],{"class":495},[35,48477,32341],{"class":359},[35,48479,32344],{"class":58},[35,48481,499],{"class":359},[35,48483,32349],{"class":58},[35,48485,949],{"class":495},[35,48487,7692],{"class":58},[35,48489,32356],{"class":359},[35,48491,32344],{"class":58},[35,48493,499],{"class":359},[35,48495,32363],{"class":58},[35,48497,949],{"class":495},[35,48499,7692],{"class":58},[35,48501,32370],{"class":359},[35,48503,48504,48506,48508,48510,48512,48514],{"class":37,"line":8317},[35,48505,32375],{"class":359},[35,48507,544],{"class":495},[35,48509,32380],{"class":359},[35,48511,31863],{"class":5550},[35,48513,544],{"class":495},[35,48515,31868],{"class":359},[35,48517,48518,48520,48522,48524],{"class":37,"line":8344},[35,48519,32391],{"class":5550},[35,48521,544],{"class":495},[35,48523,693],{"class":58},[35,48525,31792],{"class":359},[35,48527,48528,48530,48532,48534],{"class":37,"line":8349},[35,48529,32403],{"class":5550},[35,48531,544],{"class":495},[35,48533,31802],{"class":58},[35,48535,31792],{"class":359},[35,48537,48538],{"class":37,"line":8355},[35,48539,32414],{"class":41},[35,48541,48542,48544,48546,48548],{"class":37,"line":8367},[35,48543,32419],{"class":5550},[35,48545,544],{"class":495},[35,48547,889],{"class":58},[35,48549,505],{"class":359},[35,48551,48552,48554,48556,48558,48560,48562],{"class":37,"line":8379},[35,48553,32430],{"class":359},[35,48555,544],{"class":495},[35,48557,31860],{"class":359},[35,48559,31863],{"class":5550},[35,48561,544],{"class":495},[35,48563,32441],{"class":359},[35,48565,48566,48568,48570,48572],{"class":37,"line":8391},[35,48567,32446],{"class":5550},[35,48569,544],{"class":495},[35,48571,693],{"class":58},[35,48573,31792],{"class":359},[35,48575,48576,48578,48580,48582],{"class":37,"line":10050},[35,48577,32457],{"class":5550},[35,48579,544],{"class":495},[35,48581,31802],{"class":58},[35,48583,31792],{"class":359},[35,48585,48586,48588,48590,48592],{"class":37,"line":10075},[35,48587,32468],{"class":5550},[35,48589,544],{"class":495},[35,48591,889],{"class":58},[35,48593,505],{"class":359},[35,48595,48596,48598],{"class":37,"line":10098},[35,48597,4424],{"class":495},[35,48599,32481],{"class":359},[35,48601,48602],{"class":37,"line":10122},[35,48603,141],{"emptyLinePlaceholder":140},[35,48605,48606],{"class":37,"line":10127},[35,48607,32490],{"class":41},[35,48609,48610],{"class":37,"line":10132},[35,48611,32495],{"class":41},[35,48613,48614],{"class":37,"line":10137},[35,48615,141],{"emptyLinePlaceholder":140},[35,48617,48618],{"class":37,"line":10146},[35,48619,32504],{"class":41},[35,48621,48622,48624,48626],{"class":37,"line":10151},[35,48623,32273],{"class":495},[35,48625,32511],{"class":48},[35,48627,32514],{"class":359},[35,48629,48630,48632,48634,48636,48638,48640,48642,48644,48646],{"class":37,"line":10157},[35,48631,31563],{"class":359},[35,48633,544],{"class":495},[35,48635,30777],{"class":359},[35,48637,31570],{"class":306},[35,48639,2054],{"class":495},[35,48641,31575],{"class":359},[35,48643,2051],{"class":495},[35,48645,32533],{"class":306},[35,48647,505],{"class":359},[35,48649,48650],{"class":37,"line":10178},[35,48651,141],{"emptyLinePlaceholder":140},[35,48653,48654],{"class":37,"line":10184},[35,48655,32548],{"class":41},[35,48657,48658],{"class":37,"line":10198},[35,48659,32553],{"class":41},[35,48661,48662],{"class":37,"line":10204},[35,48663,32558],{"class":41},[35,48665,48666,48668,48670,48672,48674,48676,48678],{"class":37,"line":10231},[35,48667,32563],{"class":359},[35,48669,544],{"class":495},[35,48671,32568],{"class":359},[35,48673,32571],{"class":5550},[35,48675,544],{"class":495},[35,48677,32576],{"class":58},[35,48679,505],{"class":359},[35,48681,48682],{"class":37,"line":10240},[35,48683,141],{"emptyLinePlaceholder":140},[35,48685,48686],{"class":37,"line":10246},[35,48687,32587],{"class":41},[35,48689,48690,48692,48694],{"class":37,"line":10254},[35,48691,32592],{"class":359},[35,48693,544],{"class":495},[35,48695,32597],{"class":359},[35,48697,48698],{"class":37,"line":10259},[35,48699,141],{"emptyLinePlaceholder":140},[35,48701,48702],{"class":37,"line":16938},[35,48703,32606],{"class":41},[35,48705,48706,48708,48710],{"class":37,"line":16944},[35,48707,31615],{"class":359},[35,48709,544],{"class":495},[35,48711,32615],{"class":359},[35,48713,48714],{"class":37,"line":16967},[35,48715,32620],{"class":41},[35,48717,48718],{"class":37,"line":16973},[35,48719,32625],{"class":41},[35,48721,48722],{"class":37,"line":16996},[35,48723,32630],{"class":41},[35,48725,48726,48728,48730],{"class":37,"line":17010},[35,48727,32635],{"class":359},[35,48729,544],{"class":495},[35,48731,32640],{"class":359},[35,48733,48734],{"class":37,"line":17030},[35,48735,141],{"emptyLinePlaceholder":140},[35,48737,48738],{"class":37,"line":17036},[35,48739,32653],{"class":41},[35,48741,48742],{"class":37,"line":17047},[35,48743,32658],{"class":41},[35,48745,48746,48748,48750],{"class":37,"line":17070},[35,48747,32663],{"class":359},[35,48749,544],{"class":495},[35,48751,32668],{"class":58},[35,48753,48754],{"class":37,"line":17092},[35,48755,32673],{"class":41},[35,48757,48758,48760,48762],{"class":37,"line":17097},[35,48759,32678],{"class":359},[35,48761,544],{"class":495},[35,48763,32683],{"class":359},[35,48765,48766],{"class":37,"line":17103},[35,48767,32688],{"class":41},[35,48769,48770,48772,48774],{"class":37,"line":17117},[35,48771,32693],{"class":359},[35,48773,544],{"class":495},[35,48775,32683],{"class":359},[35,48777,48778],{"class":37,"line":17130},[35,48779,32702],{"class":41},[35,48781,48782,48784,48786],{"class":37,"line":17135},[35,48783,32707],{"class":359},[35,48785,544],{"class":495},[35,48787,32683],{"class":359},[35,48789,48790],{"class":37,"line":17149},[35,48791,32716],{"class":41},[35,48793,48794,48796,48798],{"class":37,"line":17154},[35,48795,32721],{"class":359},[35,48797,544],{"class":495},[35,48799,32683],{"class":359},[35,48801,48802],{"class":37,"line":17160},[35,48803,141],{"emptyLinePlaceholder":140},[35,48805,48806],{"class":37,"line":17165},[35,48807,32734],{"class":41},[35,48809,48810,48812,48814],{"class":37,"line":17179},[35,48811,32739],{"class":359},[35,48813,544],{"class":495},[35,48815,32744],{"class":359},[35,48817,48818],{"class":37,"line":17184},[35,48819,141],{"emptyLinePlaceholder":140},[35,48821,48822],{"class":37,"line":17189},[35,48823,32757],{"class":41},[35,48825,48826,48828,48830,48832,48834],{"class":37,"line":17203},[35,48827,3535],{"class":495},[35,48829,32764],{"class":359},[35,48831,26374],{"class":495},[35,48833,32769],{"class":58},[35,48835,32772],{"class":359},[35,48837,48838,48840,48842,48844,48846,48848,48850,48852,48854,48856,48858],{"class":37,"line":17215},[35,48839,32777],{"class":58},[35,48841,499],{"class":359},[35,48843,32782],{"class":306},[35,48845,32785],{"class":58},[35,48847,1078],{"class":306},[35,48849,32785],{"class":58},[35,48851,747],{"class":306},[35,48853,32794],{"class":359},[35,48855,1026],{"class":495},[35,48857,713],{"class":58},[35,48859,30823],{"class":359},[35,48861,48862,48864,48866,48868,48870,48872],{"class":37,"line":17220},[35,48863,32777],{"class":58},[35,48865,499],{"class":359},[35,48867,32809],{"class":306},[35,48869,949],{"class":495},[35,48871,940],{"class":58},[35,48873,505],{"class":359},[35,48875,48876],{"class":37,"line":17233},[35,48877,141],{"emptyLinePlaceholder":140},[35,48879,48880],{"class":37,"line":17238},[35,48881,32824],{"class":41},[35,48883,48884],{"class":37,"line":17243},[35,48885,32829],{"class":41},[35,48887,48888,48890,48892],{"class":37,"line":17248},[35,48889,32834],{"class":359},[35,48891,544],{"class":495},[35,48893,32668],{"class":58},[35,48895,48896],{"class":37,"line":17261},[35,48897,32843],{"class":41},[35,48899,48900,48902,48904],{"class":37,"line":17266},[35,48901,32848],{"class":359},[35,48903,544],{"class":495},[35,48905,3419],{"class":58},[35,48907,48908],{"class":37,"line":32959},[35,48909,32857],{"class":41},[35,48911,48912,48914,48916],{"class":37,"line":32965},[35,48913,32862],{"class":359},[35,48915,544],{"class":495},[35,48917,32668],{"class":58},[35,48919,48920],{"class":37,"line":32971},[35,48921,32871],{"class":41},[35,48923,48924,48926,48928],{"class":37,"line":32977},[35,48925,32876],{"class":359},[35,48927,544],{"class":495},[35,48929,3419],{"class":58},[35,48931,48932],{"class":37,"line":32983},[35,48933,32885],{"class":41},[35,48935,48936,48938,48940],{"class":37,"line":32994},[35,48937,32890],{"class":359},[35,48939,544],{"class":495},[35,48941,3419],{"class":58},[35,48943,48944],{"class":37,"line":33000},[35,48945,32899],{"class":41},[35,48947,48948,48950,48952],{"class":37,"line":33020},[35,48949,32904],{"class":359},[35,48951,544],{"class":495},[35,48953,3419],{"class":58},[35,48955,48956],{"class":37,"line":33026},[35,48957,32913],{"class":41},[35,48959,48960,48962,48964,48966,48968],{"class":37,"line":33037},[35,48961,3737],{"class":495},[35,48963,31927],{"class":359},[35,48965,26374],{"class":495},[35,48967,31932],{"class":58},[35,48969,32926],{"class":359},[35,48971,48972],{"class":37,"line":33043},[35,48973,32931],{"class":41},[35,48975,48976,48978,48980],{"class":37,"line":33049},[35,48977,32936],{"class":359},[35,48979,544],{"class":495},[35,48981,32941],{"class":359},[35,48983,48984],{"class":37,"line":33055},[35,48985,32946],{"class":41},[35,48987,48988,48990,48992],{"class":37,"line":33061},[35,48989,32951],{"class":359},[35,48991,544],{"class":495},[35,48993,32956],{"class":359},[35,48995,48996],{"class":37,"line":33067},[35,48997,32962],{"class":41},[35,48999,49000],{"class":37,"line":33073},[35,49001,32968],{"class":359},[35,49003,49004],{"class":37,"line":33079},[35,49005,32974],{"class":41},[35,49007,49008],{"class":37,"line":33099},[35,49009,32980],{"class":41},[35,49011,49012,49014,49016],{"class":37,"line":33105},[35,49013,32986],{"class":359},[35,49015,544],{"class":495},[35,49017,32991],{"class":359},[35,49019,49020],{"class":37,"line":33121},[35,49021,32997],{"class":41},[35,49023,49024,49026,49028,49030,49032,49034,49036],{"class":37,"line":33127},[35,49025,33003],{"class":359},[35,49027,544],{"class":495},[35,49029,33008],{"class":359},[35,49031,33011],{"class":5550},[35,49033,544],{"class":495},[35,49035,713],{"class":58},[35,49037,505],{"class":359},[35,49039,49040],{"class":37,"line":33141},[35,49041,33023],{"class":41},[35,49043,49044,49046,49048],{"class":37,"line":33147},[35,49045,33029],{"class":359},[35,49047,544],{"class":495},[35,49049,33034],{"class":359},[35,49051,49052],{"class":37,"line":33162},[35,49053,33040],{"class":41},[35,49055,49056],{"class":37,"line":33168},[35,49057,33046],{"class":359},[35,49059,49060],{"class":37,"line":33177},[35,49061,33052],{"class":41},[35,49063,49064],{"class":37,"line":33183},[35,49065,33058],{"class":359},[35,49067,49068],{"class":37,"line":33192},[35,49069,33064],{"class":41},[35,49071,49072],{"class":37,"line":33198},[35,49073,33070],{"class":359},[35,49075,49076],{"class":37,"line":33204},[35,49077,33076],{"class":41},[35,49079,49080,49082,49084,49086,49088,49090,49092],{"class":37,"line":33213},[35,49081,33082],{"class":359},[35,49083,9811],{"class":495},[35,49085,33087],{"class":359},[35,49087,949],{"class":495},[35,49089,33092],{"class":359},[35,49091,687],{"class":58},[35,49093,505],{"class":359},[35,49095,49096],{"class":37,"line":33219},[35,49097,33102],{"class":41},[35,49099,49100,49102,49104,49106,49108],{"class":37,"line":33230},[35,49101,33108],{"class":359},[35,49103,9811],{"class":495},[35,49105,33113],{"class":359},[35,49107,3283],{"class":495},[35,49109,33118],{"class":359},[35,49111,49112],{"class":37,"line":33236},[35,49113,33124],{"class":41},[35,49115,49116,49118,49120,49122,49124],{"class":37,"line":33255},[35,49117,33130],{"class":359},[35,49119,9811],{"class":495},[35,49121,33092],{"class":359},[35,49123,687],{"class":58},[35,49125,505],{"class":359},[35,49127,49128],{"class":37,"line":33261},[35,49129,33144],{"class":41},[35,49131,49132,49134,49136,49138,49140],{"class":37,"line":33272},[35,49133,3737],{"class":495},[35,49135,33152],{"class":359},[35,49137,26374],{"class":495},[35,49139,31932],{"class":58},[35,49141,33159],{"class":359},[35,49143,49144],{"class":37,"line":33278},[35,49145,33165],{"class":41},[35,49147,49148,49150,49152],{"class":37,"line":33298},[35,49149,32936],{"class":359},[35,49151,544],{"class":495},[35,49153,32941],{"class":359},[35,49155,49156],{"class":37,"line":33314},[35,49157,33180],{"class":41},[35,49159,49160,49162,49164],{"class":37,"line":33320},[35,49161,32951],{"class":359},[35,49163,544],{"class":495},[35,49165,32956],{"class":359},[35,49167,49168],{"class":37,"line":33334},[35,49169,33195],{"class":41},[35,49171,49172],{"class":37,"line":33340},[35,49173,33201],{"class":359},[35,49175,49176],{"class":37,"line":33346},[35,49177,36682],{"class":41},[35,49179,49180,49182],{"class":37,"line":33357},[35,49181,33207],{"class":495},[35,49183,33210],{"class":359},[35,49185,49186],{"class":37,"line":33363},[35,49187,33216],{"class":41},[35,49189,49190,49192,49194],{"class":37,"line":33369},[35,49191,36697],{"class":359},[35,49193,544],{"class":495},[35,49195,32991],{"class":359},[35,49197,49198],{"class":37,"line":33379},[35,49199,33233],{"class":41},[35,49201,49202,49204,49206,49208,49210,49212,49214],{"class":37,"line":33385},[35,49203,36710],{"class":359},[35,49205,544],{"class":495},[35,49207,33008],{"class":359},[35,49209,33011],{"class":5550},[35,49211,544],{"class":495},[35,49213,713],{"class":58},[35,49215,505],{"class":359},[35,49217,49218],{"class":37,"line":33396},[35,49219,33258],{"class":41},[35,49221,49222,49224,49226],{"class":37,"line":33402},[35,49223,36731],{"class":359},[35,49225,544],{"class":495},[35,49227,33034],{"class":359},[35,49229,49230],{"class":37,"line":33412},[35,49231,33275],{"class":41},[35,49233,49234,49236,49238,49240,49242,49244,49246],{"class":37,"line":33417},[35,49235,36744],{"class":359},[35,49237,9811],{"class":495},[35,49239,36749],{"class":359},[35,49241,949],{"class":495},[35,49243,33092],{"class":359},[35,49245,687],{"class":58},[35,49247,505],{"class":359},[35,49249,49250,49252,49254,49256,49258],{"class":37,"line":33423},[35,49251,36762],{"class":359},[35,49253,9811],{"class":495},[35,49255,33113],{"class":359},[35,49257,3283],{"class":495},[35,49259,33118],{"class":359},[35,49261,49262],{"class":37,"line":33472},[35,49263,36775],{"class":41},[35,49265,49266,49268,49270,49272,49274],{"class":37,"line":33519},[35,49267,36780],{"class":359},[35,49269,9811],{"class":495},[35,49271,33092],{"class":359},[35,49273,687],{"class":58},[35,49275,505],{"class":359},[35,49277,49278],{"class":37,"line":33524},[35,49279,33337],{"class":41},[35,49281,49282],{"class":37,"line":33530},[35,49283,33343],{"class":41},[35,49285,49286,49288,49290],{"class":37,"line":33549},[35,49287,33349],{"class":359},[35,49289,1078],{"class":495},[35,49291,33354],{"class":359},[35,49293,49294],{"class":37,"line":33555},[35,49295,33360],{"class":41},[35,49297,49298],{"class":37,"line":33575},[35,49299,33366],{"class":41},[35,49301,49302,49304,49306],{"class":37,"line":33581},[35,49303,33372],{"class":359},[35,49305,1078],{"class":495},[35,49307,33354],{"class":359},[35,49309,49310],{"class":37,"line":33587},[35,49311,33382],{"class":41},[35,49313,49314,49316,49318],{"class":37,"line":33597},[35,49315,33388],{"class":359},[35,49317,1078],{"class":495},[35,49319,33393],{"class":359},[35,49321,49322],{"class":37,"line":33602},[35,49323,33399],{"class":41},[35,49325,49326,49328,49330],{"class":37,"line":33608},[35,49327,33405],{"class":359},[35,49329,1078],{"class":495},[35,49331,33393],{"class":359},[35,49333,49334],{"class":37,"line":33624},[35,49335,141],{"emptyLinePlaceholder":140},[35,49337,49338],{"class":37,"line":33669},[35,49339,33420],{"class":41},[35,49341,49342,49344,49346,49348,49350,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370,49372,49374,49376,49378,49380],{"class":37,"line":33675},[35,49343,32777],{"class":58},[35,49345,499],{"class":359},[35,49347,3926],{"class":306},[35,49349,32785],{"class":58},[35,49351,33434],{"class":306},[35,49353,1390],{"class":58},[35,49355,33439],{"class":495},[35,49357,1440],{"class":58},[35,49359,33444],{"class":306},[35,49361,1390],{"class":58},[35,49363,33439],{"class":495},[35,49365,1440],{"class":58},[35,49367,3926],{"class":306},[35,49369,33455],{"class":359},[35,49371,1026],{"class":495},[35,49373,713],{"class":58},[35,49375,33462],{"class":359},[35,49377,1026],{"class":495},[35,49379,713],{"class":58},[35,49381,33469],{"class":359},[35,49383,49384,49386,49388,49390,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422],{"class":37,"line":33681},[35,49385,32777],{"class":58},[35,49387,499],{"class":359},[35,49389,3926],{"class":306},[35,49391,32785],{"class":58},[35,49393,33483],{"class":306},[35,49395,1390],{"class":58},[35,49397,33439],{"class":495},[35,49399,1440],{"class":58},[35,49401,33492],{"class":306},[35,49403,1390],{"class":58},[35,49405,33439],{"class":495},[35,49407,1440],{"class":58},[35,49409,3926],{"class":306},[35,49411,33503],{"class":359},[35,49413,1026],{"class":495},[35,49415,713],{"class":58},[35,49417,33510],{"class":359},[35,49419,1026],{"class":495},[35,49421,713],{"class":58},[35,49423,33469],{"class":359},[35,49425,49426],{"class":37,"line":33687},[35,49427,141],{"emptyLinePlaceholder":140},[35,49429,49430],{"class":37,"line":33698},[35,49431,33527],{"class":41},[35,49433,49434,49436,49438,49440,49442,49444,49446],{"class":37,"line":33704},[35,49435,2837],{"class":495},[35,49437,33535],{"class":359},[35,49439,1026],{"class":495},[35,49441,713],{"class":58},[35,49443,1434],{"class":359},[35,49445,1454],{"class":495},[35,49447,33546],{"class":359},[35,49449,49450],{"class":37,"line":33710},[35,49451,33552],{"class":41},[35,49453,49454,49456,49458,49460,49462,49464,49466],{"class":37,"line":33716},[35,49455,33558],{"class":359},[35,49457,538],{"class":58},[35,49459,544],{"class":495},[35,49461,33565],{"class":359},[35,49463,1026],{"class":495},[35,49465,713],{"class":58},[35,49467,33572],{"class":359},[35,49469,49470],{"class":37,"line":33734},[35,49471,33578],{"class":41},[35,49473,49474],{"class":37,"line":33748},[35,49475,33584],{"class":41},[35,49477,49478,49480,49482],{"class":37,"line":33757},[35,49479,33590],{"class":359},[35,49481,544],{"class":495},[35,49483,32640],{"class":359},[35,49485,49486],{"class":37,"line":33766},[35,49487,141],{"emptyLinePlaceholder":140},[35,49489,49490],{"class":37,"line":33775},[35,49491,33605],{"class":41},[35,49493,49494,49496,49498,49500,49502],{"class":37,"line":33784},[35,49495,33611],{"class":359},[35,49497,544],{"class":495},[35,49499,33616],{"class":359},[35,49501,1026],{"class":495},[35,49503,33621],{"class":359},[35,49505,49506,49508,49510,49512,49514,49516,49518,49520,49522,49524,49526,49528,49530,49532,49534,49536,49538,49540],{"class":37,"line":33790},[35,49507,32777],{"class":58},[35,49509,499],{"class":359},[35,49511,33631],{"class":306},[35,49513,1390],{"class":58},[35,49515,33636],{"class":495},[35,49517,1440],{"class":58},[35,49519,1038],{"class":306},[35,49521,1390],{"class":58},[35,49523,33636],{"class":495},[35,49525,1440],{"class":58},[35,49527,33649],{"class":306},[35,49529,33652],{"class":359},[35,49531,33655],{"class":495},[35,49533,1401],{"class":58},[35,49535,33660],{"class":359},[35,49537,823],{"class":495},[35,49539,1401],{"class":58},[35,49541,30823],{"class":359},[35,49543,49544],{"class":37,"line":33796},[35,49545,37059],{"class":41},[35,49547,49548],{"class":37,"line":33804},[35,49549,37064],{"class":41},[35,49551,49552,49554,49556],{"class":37,"line":33809},[35,49553,37069],{"class":359},[35,49555,33693],{"class":306},[35,49557,505],{"class":359},[35,49559,49560],{"class":37,"line":33815},[35,49561,33713],{"class":41},[35,49563,49564,49566,49568,49570,49572,49574],{"class":37,"line":33826},[35,49565,33719],{"class":359},[35,49567,544],{"class":495},[35,49569,33724],{"class":359},[35,49571,33727],{"class":5550},[35,49573,544],{"class":495},[35,49575,1907],{"class":359},[35,49577,49578,49580,49582,49584],{"class":37,"line":33832},[35,49579,33737],{"class":306},[35,49581,1353],{"class":359},[35,49583,33742],{"class":58},[35,49585,33745],{"class":359},[35,49587,49588,49590],{"class":37,"line":33852},[35,49589,33751],{"class":306},[35,49591,33754],{"class":359},[35,49593,49594,49596],{"class":37,"line":33858},[35,49595,33760],{"class":306},[35,49597,33763],{"class":359},[35,49599,49600,49602],{"class":37,"line":33864},[35,49601,33769],{"class":306},[35,49603,33772],{"class":359},[35,49605,49606,49608],{"class":37,"line":33870},[35,49607,33778],{"class":306},[35,49609,33781],{"class":359},[35,49611,49612],{"class":37,"line":33887},[35,49613,33787],{"class":359},[35,49615,49616],{"class":37,"line":33893},[35,49617,33793],{"class":41},[35,49619,49620,49622],{"class":37,"line":33899},[35,49621,4424],{"class":495},[35,49623,33801],{"class":359},[35,49625,49626],{"class":37,"line":33905},[35,49627,141],{"emptyLinePlaceholder":140},[35,49629,49630],{"class":37,"line":33911},[35,49631,33812],{"class":41},[35,49633,49634,49636,49638],{"class":37,"line":33917},[35,49635,32273],{"class":495},[35,49637,33820],{"class":48},[35,49639,33823],{"class":359},[35,49641,49642],{"class":37,"line":33944},[35,49643,33829],{"class":41},[35,49645,49646,49648,49650,49652,49654,49656,49658,49660],{"class":37,"line":33968},[35,49647,33835],{"class":359},[35,49649,32019],{"class":5550},[35,49651,544],{"class":495},[35,49653,499],{"class":359},[35,49655,992],{"class":58},[35,49657,872],{"class":359},[35,49659,789],{"class":58},[35,49661,30823],{"class":359},[35,49663,49664],{"class":37,"line":33974},[35,49665,33855],{"class":41},[35,49667,49668],{"class":37,"line":33980},[35,49669,33861],{"class":41},[35,49671,49672],{"class":37,"line":33986},[35,49673,33867],{"class":41},[35,49675,49676,49678,49680,49682,49684,49686,49688],{"class":37,"line":33997},[35,49677,32053],{"class":359},[35,49679,713],{"class":58},[35,49681,872],{"class":359},[35,49683,574],{"class":58},[35,49685,872],{"class":359},[35,49687,713],{"class":58},[35,49689,505],{"class":359},[35,49691,49692],{"class":37,"line":34008},[35,49693,33890],{"class":41},[35,49695,49696],{"class":37,"line":34014},[35,49697,33896],{"class":41},[35,49699,49700],{"class":37,"line":34031},[35,49701,33902],{"class":41},[35,49703,49704],{"class":37,"line":34054},[35,49705,33908],{"class":41},[35,49707,49708],{"class":37,"line":34077},[35,49709,33914],{"class":41},[35,49711,49712,49714,49716,49718,49720,49722,49724,49726,49728],{"class":37,"line":34083},[35,49713,33920],{"class":359},[35,49715,33923],{"class":306},[35,49717,33926],{"class":359},[35,49719,33929],{"class":306},[35,49721,872],{"class":359},[35,49723,33934],{"class":5550},[35,49725,544],{"class":495},[35,49727,33939],{"class":306},[35,49729,505],{"class":359},[35,49731,49732,49734,49736,49738,49740,49742,49744,49746,49748],{"class":37,"line":34088},[35,49733,33920],{"class":359},[35,49735,33923],{"class":306},[35,49737,33951],{"class":359},[35,49739,33954],{"class":306},[35,49741,872],{"class":359},[35,49743,33934],{"class":5550},[35,49745,544],{"class":495},[35,49747,33963],{"class":306},[35,49749,505],{"class":359},[35,49751,49752],{"class":37,"line":34097},[35,49753,33971],{"class":41},[35,49755,49756],{"class":37,"line":34107},[35,49757,33977],{"class":359},[35,49759,49760],{"class":37,"line":34113},[35,49761,33983],{"class":41},[35,49763,49764,49766,49768],{"class":37,"line":34118},[35,49765,33989],{"class":359},[35,49767,33992],{"class":306},[35,49769,505],{"class":359},[35,49771,49772,49774,49776],{"class":37,"line":34124},[35,49773,34000],{"class":359},[35,49775,34003],{"class":306},[35,49777,505],{"class":359},[35,49779,49780],{"class":37,"line":34137},[35,49781,34011],{"class":41},[35,49783,49784,49786,49788,49790,49792,49794,49796],{"class":37,"line":34143},[35,49785,32053],{"class":359},[35,49787,713],{"class":58},[35,49789,872],{"class":359},[35,49791,574],{"class":58},[35,49793,872],{"class":359},[35,49795,574],{"class":58},[35,49797,505],{"class":359},[35,49799,49800,49802,49804,49806,49808,49810,49812,49814,49816],{"class":37,"line":34154},[35,49801,33920],{"class":359},[35,49803,33923],{"class":306},[35,49805,34038],{"class":359},[35,49807,33929],{"class":306},[35,49809,872],{"class":359},[35,49811,33934],{"class":5550},[35,49813,544],{"class":495},[35,49815,34049],{"class":306},[35,49817,505],{"class":359},[35,49819,49820,49822,49824,49826,49828,49830,49832,49834,49836],{"class":37,"line":34165},[35,49821,33920],{"class":359},[35,49823,33923],{"class":306},[35,49825,34061],{"class":359},[35,49827,33954],{"class":306},[35,49829,872],{"class":359},[35,49831,33934],{"class":5550},[35,49833,544],{"class":495},[35,49835,34072],{"class":306},[35,49837,505],{"class":359},[35,49839,49840],{"class":37,"line":34184},[35,49841,34080],{"class":41},[35,49843,49845],{"class":37,"line":49844},219,[35,49846,33977],{"class":359},[35,49848,49850,49852,49854],{"class":37,"line":49849},220,[35,49851,33989],{"class":359},[35,49853,33923],{"class":306},[35,49855,505],{"class":359},[35,49857,49859,49861,49863],{"class":37,"line":49858},221,[35,49860,34000],{"class":359},[35,49862,34102],{"class":306},[35,49864,505],{"class":359},[35,49866,49868],{"class":37,"line":49867},222,[35,49869,34110],{"class":359},[35,49871,49873],{"class":37,"line":49872},223,[35,49874,141],{"emptyLinePlaceholder":140},[35,49876,49878],{"class":37,"line":49877},224,[35,49879,34121],{"class":41},[35,49881,49883,49885,49887,49889,49891],{"class":37,"line":49882},225,[35,49884,1892],{"class":495},[35,49886,31546],{"class":58},[35,49888,3283],{"class":495},[35,49890,31551],{"class":306},[35,49892,4073],{"class":359},[35,49894,49896],{"class":37,"line":49895},226,[35,49897,34140],{"class":41},[35,49899,49901,49903,49905],{"class":37,"line":49900},227,[35,49902,44872],{"class":359},[35,49904,544],{"class":495},[35,49906,44877],{"class":359},[35,49908,49910,49912,49914],{"class":37,"line":49909},228,[35,49911,34157],{"class":359},[35,49913,544],{"class":495},[35,49915,34162],{"class":359},[35,49917,49919,49921,49923,49925,49927,49929,49931],{"class":37,"line":49918},229,[35,49920,33719],{"class":359},[35,49922,544],{"class":495},[35,49924,44894],{"class":359},[35,49926,34175],{"class":5550},[35,49928,544],{"class":495},[35,49930,1401],{"class":58},[35,49932,505],{"class":359},[35,49934,49936],{"class":37,"line":49935},230,[35,49937,34187],{"class":359},[22332,49939,49941],{"id":49940},"_242测试代码","2.4.2.测试代码",[21,49943,49944],{},"使用测试集进行测试与推理",[25,49946,49948],{"className":30704,"code":49947,"language":30706,"meta":30,"style":30},"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",[32,49949,49950,49956,49966,49976,49987,49997,50001,50005,50013,50018,50022,50039,50043,50047,50051,50055,50059,50091,50095,50103,50107,50119,50123,50127,50131,50135,50139,50143,50147,50151,50169,50183,50187,50197,50207,50217,50223,50227,50231,50239,50243,50259,50267,50271,50275,50283,50291,50295,50299,50303,50307,50313,50317,50327,50335,50343,50347,50351,50355,50363,50367,50383,50387,50391,50395,50407,50411,50423,50427,50431,50443,50447,50457,50461,50465,50477,50481,50489,50493,50497,50505,50509,50517,50521,50525,50529,50533,50537,50553,50561,50565,50569,50587,50593,50597,50607,50615,50623,50627,50631,50635,50639,50647,50651,50667,50671,50679,50687],{"__ignoreMap":30},[35,49951,49952,49954],{"class":37,"line":38},[35,49953,30718],{"class":495},[35,49955,30721],{"class":359},[35,49957,49958,49960,49962,49964],{"class":37,"line":45},[35,49959,30718],{"class":495},[35,49961,31741],{"class":359},[35,49963,31709],{"class":495},[35,49965,31746],{"class":359},[35,49967,49968,49970,49972,49974],{"class":37,"line":55},[35,49969,31063],{"class":495},[35,49971,31724],{"class":359},[35,49973,30718],{"class":495},[35,49975,31729],{"class":359},[35,49977,49978,49980,49982,49984],{"class":37,"line":65},[35,49979,31063],{"class":495},[35,49981,31694],{"class":359},[35,49983,30718],{"class":495},[35,49985,49986],{"class":359}," ImageFolder\n",[35,49988,49989,49991,49993,49995],{"class":37,"line":74},[35,49990,31063],{"class":495},[35,49992,32240],{"class":359},[35,49994,30718],{"class":495},[35,49996,44966],{"class":359},[35,49998,49999],{"class":37,"line":83},[35,50000,141],{"emptyLinePlaceholder":140},[35,50002,50003],{"class":37,"line":92},[35,50004,34277],{"class":41},[35,50006,50007,50009,50011],{"class":37,"line":101},[35,50008,32273],{"class":495},[35,50010,34284],{"class":48},[35,50012,32279],{"class":359},[35,50014,50015],{"class":37,"line":110},[35,50016,50017],{"class":41},"   # 导入自己的数据集，并进行数据处理\n",[35,50019,50020],{"class":37,"line":119},[35,50021,48287],{"class":41},[35,50023,50024,50026,50028,50030,50032,50034,50037],{"class":37,"line":128},[35,50025,48292],{"class":58},[35,50027,544],{"class":495},[35,50029,1164],{"class":495},[35,50031,747],{"class":306},[35,50033,1052],{"class":58},[35,50035,50036],{"class":48303},"\u002Fdata\u002Ftest",[35,50038,25465],{"class":306},[35,50040,50041],{"class":37,"line":137},[35,50042,141],{"emptyLinePlaceholder":140},[35,50044,50045],{"class":37,"line":144},[35,50046,48315],{"class":41},[35,50048,50049],{"class":37,"line":150},[35,50050,48320],{"class":41},[35,50052,50053],{"class":37,"line":159},[35,50054,48325],{"class":41},[35,50056,50057],{"class":37,"line":168},[35,50058,48330],{"class":41},[35,50060,50061,50063,50065,50067,50069,50071,50073,50075,50077,50079,50081,50083,50085,50087,50089],{"class":37,"line":177},[35,50062,48335],{"class":359},[35,50064,544],{"class":495},[35,50066,48340],{"class":359},[35,50068,48343],{"class":58},[35,50070,872],{"class":359},[35,50072,48348],{"class":58},[35,50074,872],{"class":359},[35,50076,48353],{"class":58},[35,50078,48356],{"class":359},[35,50080,48359],{"class":58},[35,50082,872],{"class":359},[35,50084,48364],{"class":58},[35,50086,872],{"class":359},[35,50088,48369],{"class":58},[35,50090,4991],{"class":359},[35,50092,50093],{"class":37,"line":182},[35,50094,48376],{"class":41},[35,50096,50097,50099,50101],{"class":37,"line":188},[35,50098,48381],{"class":359},[35,50100,544],{"class":495},[35,50102,48386],{"class":359},[35,50104,50105],{"class":37,"line":197},[35,50106,48391],{"class":41},[35,50108,50109,50111,50113,50115,50117],{"class":37,"line":206},[35,50110,48396],{"class":359},[35,50112,31827],{"class":58},[35,50114,872],{"class":359},[35,50116,31827],{"class":58},[35,50118,42948],{"class":359},[35,50120,50121],{"class":37,"line":215},[35,50122,48409],{"class":41},[35,50124,50125],{"class":37,"line":224},[35,50126,48414],{"class":359},[35,50128,50129],{"class":37,"line":233},[35,50130,48419],{"class":359},[35,50132,50133],{"class":37,"line":238},[35,50134,48424],{"class":41},[35,50136,50137],{"class":37,"line":244},[35,50138,48429],{"class":41},[35,50140,50141],{"class":37,"line":253},[35,50142,141],{"emptyLinePlaceholder":140},[35,50144,50145],{"class":37,"line":262},[35,50146,48438],{"class":41},[35,50148,50149],{"class":37,"line":271},[35,50150,48443],{"class":41},[35,50152,50153,50155,50157,50159,50161,50163,50165,50167],{"class":37,"line":280},[35,50154,34291],{"class":359},[35,50156,544],{"class":495},[35,50158,48452],{"class":359},[35,50160,48455],{"class":58},[35,50162,872],{"class":359},[35,50164,48460],{"class":5550},[35,50166,544],{"class":495},[35,50168,48465],{"class":359},[35,50170,50171,50173,50175,50177,50179,50181],{"class":37,"line":289},[35,50172,34348],{"class":359},[35,50174,544],{"class":495},[35,50176,31860],{"class":359},[35,50178,31863],{"class":5550},[35,50180,544],{"class":495},[35,50182,34359],{"class":359},[35,50184,50185],{"class":37,"line":294},[35,50186,34364],{"class":41},[35,50188,50189,50191,50193,50195],{"class":37,"line":300},[35,50190,34369],{"class":5550},[35,50192,544],{"class":495},[35,50194,713],{"class":58},[35,50196,31792],{"class":359},[35,50198,50199,50201,50203,50205],{"class":37,"line":313},[35,50200,34380],{"class":5550},[35,50202,544],{"class":495},[35,50204,31802],{"class":58},[35,50206,31792],{"class":359},[35,50208,50209,50211,50213,50215],{"class":37,"line":324},[35,50210,34391],{"class":5550},[35,50212,544],{"class":495},[35,50214,687],{"class":58},[35,50216,505],{"class":359},[35,50218,50219,50221],{"class":37,"line":2955},[35,50220,4424],{"class":495},[35,50222,34404],{"class":359},[35,50224,50225],{"class":37,"line":8282},[35,50226,141],{"emptyLinePlaceholder":140},[35,50228,50229],{"class":37,"line":8306},[35,50230,34413],{"class":41},[35,50232,50233,50235,50237],{"class":37,"line":8311},[35,50234,32273],{"class":495},[35,50236,34420],{"class":48},[35,50238,34423],{"class":359},[35,50240,50241],{"class":37,"line":8317},[35,50242,34428],{"class":41},[35,50244,50245,50247,50249,50251,50253,50255,50257],{"class":37,"line":8344},[35,50246,31563],{"class":359},[35,50248,544],{"class":495},[35,50250,31570],{"class":306},[35,50252,2054],{"class":495},[35,50254,31575],{"class":359},[35,50256,2051],{"class":495},[35,50258,34445],{"class":306},[35,50260,50261,50263,50265],{"class":37,"line":8349},[35,50262,31615],{"class":359},[35,50264,544],{"class":495},[35,50266,32615],{"class":359},[35,50268,50269],{"class":37,"line":8355},[35,50270,141],{"emptyLinePlaceholder":140},[35,50272,50273],{"class":37,"line":8367},[35,50274,34462],{"class":41},[35,50276,50277,50279,50281],{"class":37,"line":8379},[35,50278,34467],{"class":359},[35,50280,544],{"class":495},[35,50282,32668],{"class":58},[35,50284,50285,50287,50289],{"class":37,"line":8391},[35,50286,34476],{"class":359},[35,50288,544],{"class":495},[35,50290,3419],{"class":58},[35,50292,50293],{"class":37,"line":10050},[35,50294,141],{"emptyLinePlaceholder":140},[35,50296,50297],{"class":37,"line":10075},[35,50298,34489],{"class":41},[35,50300,50301],{"class":37,"line":10098},[35,50302,34494],{"class":41},[35,50304,50305],{"class":37,"line":10122},[35,50306,34499],{"class":41},[35,50308,50309,50311],{"class":37,"line":10127},[35,50310,34504],{"class":495},[35,50312,33210],{"class":359},[35,50314,50315],{"class":37,"line":10132},[35,50316,34511],{"class":41},[35,50318,50319,50321,50323,50325],{"class":37,"line":10137},[35,50320,3737],{"class":495},[35,50322,34518],{"class":359},[35,50324,26374],{"class":495},[35,50326,34523],{"class":359},[35,50328,50329,50331,50333],{"class":37,"line":10146},[35,50330,34528],{"class":359},[35,50332,544],{"class":495},[35,50334,34533],{"class":359},[35,50336,50337,50339,50341],{"class":37,"line":10151},[35,50338,34538],{"class":359},[35,50340,544],{"class":495},[35,50342,34543],{"class":359},[35,50344,50345],{"class":37,"line":10157},[35,50346,34548],{"class":41},[35,50348,50349],{"class":37,"line":10178},[35,50350,33201],{"class":359},[35,50352,50353],{"class":37,"line":10184},[35,50354,34557],{"class":41},[35,50356,50357,50359,50361],{"class":37,"line":10198},[35,50358,32986],{"class":359},[35,50360,544],{"class":495},[35,50362,34566],{"class":359},[35,50364,50365],{"class":37,"line":10204},[35,50366,34571],{"class":41},[35,50368,50369,50371,50373,50375,50377,50379,50381],{"class":37,"line":10231},[35,50370,33003],{"class":359},[35,50372,544],{"class":495},[35,50374,33008],{"class":359},[35,50376,33011],{"class":5550},[35,50378,544],{"class":495},[35,50380,713],{"class":58},[35,50382,505],{"class":359},[35,50384,50385],{"class":37,"line":10240},[35,50386,34592],{"class":41},[35,50388,50389],{"class":37,"line":10246},[35,50390,34597],{"class":41},[35,50392,50393],{"class":37,"line":10254},[35,50394,34602],{"class":41},[35,50396,50397,50399,50401,50403,50405],{"class":37,"line":10259},[35,50398,34607],{"class":359},[35,50400,9811],{"class":495},[35,50402,33113],{"class":359},[35,50404,3283],{"class":495},[35,50406,34616],{"class":359},[35,50408,50409],{"class":37,"line":16938},[35,50410,34621],{"class":41},[35,50412,50413,50415,50417,50419,50421],{"class":37,"line":16944},[35,50414,34626],{"class":359},[35,50416,9811],{"class":495},[35,50418,34631],{"class":359},[35,50420,687],{"class":58},[35,50422,505],{"class":359},[35,50424,50425],{"class":37,"line":16967},[35,50426,141],{"emptyLinePlaceholder":140},[35,50428,50429],{"class":37,"line":16973},[35,50430,34644],{"class":41},[35,50432,50433,50435,50437,50439,50441],{"class":37,"line":16996},[35,50434,34649],{"class":359},[35,50436,544],{"class":495},[35,50438,34654],{"class":359},[35,50440,1078],{"class":495},[35,50442,34659],{"class":359},[35,50444,50445],{"class":37,"line":17010},[35,50446,34664],{"class":41},[35,50448,50449,50451,50453,50455],{"class":37,"line":17030},[35,50450,32777],{"class":58},[35,50452,499],{"class":359},[35,50454,34673],{"class":306},[35,50456,34676],{"class":359},[35,50458,50459],{"class":37,"line":17036},[35,50460,141],{"emptyLinePlaceholder":140},[35,50462,50463],{"class":37,"line":17047},[35,50464,34685],{"class":41},[35,50466,50467,50469,50471,50473,50475],{"class":37,"line":17070},[35,50468,1892],{"class":495},[35,50470,31546],{"class":58},[35,50472,3283],{"class":495},[35,50474,31551],{"class":306},[35,50476,4073],{"class":359},[35,50478,50479],{"class":37,"line":17092},[35,50480,34702],{"class":41},[35,50482,50483,50485,50487],{"class":37,"line":17097},[35,50484,31615],{"class":359},[35,50486,544],{"class":495},[35,50488,44877],{"class":359},[35,50490,50491],{"class":37,"line":17103},[35,50492,34715],{"class":41},[35,50494,50495],{"class":37,"line":17117},[35,50496,34720],{"class":41},[35,50498,50499,50501,50503],{"class":37,"line":17130},[35,50500,34725],{"class":359},[35,50502,34728],{"class":306},[35,50504,30823],{"class":359},[35,50506,50507],{"class":37,"line":17135},[35,50508,34735],{"class":41},[35,50510,50511,50513,50515],{"class":37,"line":17149},[35,50512,34348],{"class":359},[35,50514,544],{"class":495},[35,50516,34744],{"class":359},[35,50518,50519],{"class":37,"line":17154},[35,50520,34749],{"class":41},[35,50522,50523],{"class":37,"line":17160},[35,50524,34754],{"class":359},[35,50526,50527],{"class":37,"line":17165},[35,50528,141],{"emptyLinePlaceholder":140},[35,50530,50531],{"class":37,"line":17179},[35,50532,34763],{"class":41},[35,50534,50535],{"class":37,"line":17184},[35,50536,34768],{"class":41},[35,50538,50539,50541,50543,50545,50547,50549,50551],{"class":37,"line":17189},[35,50540,31563],{"class":359},[35,50542,544],{"class":495},[35,50544,31570],{"class":306},[35,50546,2054],{"class":495},[35,50548,31575],{"class":359},[35,50550,2051],{"class":495},[35,50552,34445],{"class":306},[35,50554,50555,50557,50559],{"class":37,"line":17203},[35,50556,31615],{"class":359},[35,50558,544],{"class":495},[35,50560,32615],{"class":359},[35,50562,50563],{"class":37,"line":17215},[35,50564,34797],{"class":41},[35,50566,50567],{"class":37,"line":17220},[35,50568,34802],{"class":41},[35,50570,50571,50573,50575,50577,50580,50582,50585],{"class":37,"line":17233},[35,50572,34807],{"class":359},[35,50574,544],{"class":495},[35,50576,1384],{"class":359},[35,50578,50579],{"class":306},"'猫'",[35,50581,872],{"class":359},[35,50583,50584],{"class":306},"'狗'",[35,50586,33572],{"class":359},[35,50588,50589,50591],{"class":37,"line":17238},[35,50590,34504],{"class":495},[35,50592,33210],{"class":359},[35,50594,50595],{"class":37,"line":17243},[35,50596,34872],{"class":41},[35,50598,50599,50601,50603,50605],{"class":37,"line":17248},[35,50600,3737],{"class":495},[35,50602,34879],{"class":359},[35,50604,26374],{"class":495},[35,50606,34523],{"class":359},[35,50608,50609,50611,50613],{"class":37,"line":17261},[35,50610,32936],{"class":359},[35,50612,544],{"class":495},[35,50614,32941],{"class":359},[35,50616,50617,50619,50621],{"class":37,"line":17266},[35,50618,32951],{"class":359},[35,50620,544],{"class":495},[35,50622,32956],{"class":359},[35,50624,50625],{"class":37,"line":32959},[35,50626,141],{"emptyLinePlaceholder":140},[35,50628,50629],{"class":37,"line":32965},[35,50630,34908],{"class":41},[35,50632,50633],{"class":37,"line":32971},[35,50634,33201],{"class":359},[35,50636,50637],{"class":37,"line":32977},[35,50638,34917],{"class":41},[35,50640,50641,50643,50645],{"class":37,"line":32983},[35,50642,32986],{"class":359},[35,50644,544],{"class":495},[35,50646,32991],{"class":359},[35,50648,50649],{"class":37,"line":32994},[35,50650,34930],{"class":41},[35,50652,50653,50655,50657,50659,50661,50663,50665],{"class":37,"line":33000},[35,50654,33003],{"class":359},[35,50656,544],{"class":495},[35,50658,33008],{"class":359},[35,50660,33011],{"class":5550},[35,50662,544],{"class":495},[35,50664,713],{"class":58},[35,50666,505],{"class":359},[35,50668,50669],{"class":37,"line":33020},[35,50670,34951],{"class":41},[35,50672,50673,50675,50677],{"class":37,"line":33026},[35,50674,34956],{"class":359},[35,50676,544],{"class":495},[35,50678,34961],{"class":359},[35,50680,50681,50683,50685],{"class":37,"line":33037},[35,50682,34966],{"class":359},[35,50684,544],{"class":495},[35,50686,34971],{"class":359},[35,50688,50689,50691,50693,50695,50697,50699,50701,50703],{"class":37,"line":33043},[35,50690,34976],{"class":58},[35,50692,499],{"class":359},[35,50694,34981],{"class":306},[35,50696,34984],{"class":359},[35,50698,34987],{"class":306},[35,50700,872],{"class":359},[35,50702,34992],{"class":306},[35,50704,34995],{"class":359},[416,50706,50707],{},"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":30,"searchDepth":45,"depth":45,"links":50709},[50710,50711,50712,50713],{"id":30917,"depth":55,"text":30918},{"id":38165,"depth":55,"text":38166},{"id":41598,"depth":55,"text":41599},{"id":45607,"depth":55,"text":45608},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30909,"description":421},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50720,"title":50721,"body":50722,"description":421,"extension":422,"meta":50729,"navigation":140,"path":50730,"seo":50731,"stem":50732,"__hash__":50733},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50723,"toc":50727},[50724],[10,50725,50721],{"id":50726},"_3yolo模型学习",{"title":30,"searchDepth":45,"depth":45,"links":50728},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50721,"description":421},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50735,"title":50736,"body":50737,"description":50744,"extension":422,"meta":50745,"navigation":140,"path":50747,"seo":50748,"stem":50749,"__hash__":50750},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50738,"toc":50742},[50739],[21,50740,50741],{},"yolo模型还未补充",{"title":30,"searchDepth":45,"depth":45,"links":50743},[],"深度学习学习",{"category":50746},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50736,"description":50744},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50752,"title":50753,"body":50754,"description":421,"extension":422,"meta":50779,"navigation":140,"path":50780,"seo":50781,"stem":50782,"__hash__":50783},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50755,"toc":50777},[50756,50759,50762,50767,50774],[10,50757,50753],{"id":50758},"_1工具",[21,50760,50761],{},"提示错误插件：有问题会提前报错",[21,50763,50764],{},[1823,50765],{"alt":30,"src":50766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[21,50768,50769],{},[734,50770,50773],{"href":50771,"rel":50772},"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",[24198],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[21,50775,50776],{},"alt键加上下箭头可以实现语句的移动",{"title":30,"searchDepth":45,"depth":45,"links":50778},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50753,"description":421},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50785,"title":50786,"body":50787,"description":421,"extension":422,"meta":53651,"navigation":140,"path":53652,"seo":53653,"stem":53654,"__hash__":53655},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50788,"toc":53602},[50789,50792,50796,50800,50805,50808,50813,50817,50824,50829,50836,50841,50848,50853,50857,50862,50865,50869,50874,50878,50883,50886,50889,50892,50895,50898,50901,50904,50907,50912,50917,50922,50926,50929,50932,50936,50941,50944,50952,50957,50974,50982,50987,50992,50997,51002,51007,51010,51015,51020,51024,51033,51038,51043,51047,51052,51055,51059,51064,51072,51077,51082,51085,51090,51095,51100,51103,51106,51109,51114,51119,51122,51127,51130,51135,51138,51141,51144,51149,51152,51155,51170,51175,51180,51185,51188,51191,51194,51208,51211,51216,51221,51224,51227,51230,51233,51236,51239,51242,51246,51250,51255,51259,51262,51267,51272,51275,51280,51283,51287,51292,51295,51298,51301,51304,51307,51310,51313,51316,51319,51323,51328,51333,51338,51341,51344,51348,51353,51356,51360,51363,51366,51371,51374,51377,51381,51385,51388,51393,51398,51401,51430,51435,51440,51445,51450,51454,51459,51463,51468,51471,51475,51479,51484,51488,51493,51498,51502,51507,51510,51512,51515,51520,51524,51529,51533,51537,51542,51547,51552,51557,51561,51566,51571,51576,51579,51582,51587,51590,51595,51600,51605,51610,51614,52421,52425,52768,52773,52776,52779,52782,52785,52788,52791,52794,52797,52799,52802,52804,52807,52811,52816,52819,52822,52825,52829,52834,52839,52859,52862,52866,52871,52876,52893,52897,52926,52930,52952,52954,52993,53001,53007,53011,53014,53017,53022,53027,53030,53033,53036,53041,53046,53049,53052,53055,53058,53061,53064,53067,53070,53073,53076,53079,53081,53084,53087,53090,53093,53096,53099,53102,53105,53109,53114,53117,53122,53125,53128,53131,53134,53137,53140,53143,53145,53148,53151,53154,53157,53160,53163,53167,53170,53179,53182,53187,53190,53195,53198,53201,53204,53207,53210,53213,53216,53220,53224,53227,53230,53235,53240,53245,53249,53254,53259,53262,53265,53268,53271,53274,53279,53282,53287,53289,53294,53297,53301,53306,53309,53312,53317,53321,53324,53329,53332,53335,53364,53369,53372,53375,53378,53381,53384,53388,53391,53477,53481,53484,53489,53494,53501,53504,53507,53510,53513,53516,53521,53526,53529,53532,53535,53538,53541,53544,53547,53550,53553,53555,53558,53562,53567,53572,53577,53580,53585,53590,53593,53596,53599],[10,50790,50786],{"id":50791},"_2基础语法",[438,50793,50795],{"id":50794},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[465,50797,50799],{"id":50798},"_211-js组成","2.1.1 js组成",[14,50801,50802],{},[17,50803,50804],{},"js是编程语言，html和css不是编程语言，是标记语言",[21,50806,50807],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[14,50809,50810],{"start":45},[17,50811,50812],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[465,50814,50816],{"id":50815},"_212-js书写位置","2.1.2 js书写位置",[14,50818,50819],{},[17,50820,50821],{},[645,50822,50823],{},"内部 JavaScript",[21,50825,50826],{},[1823,50827],{"alt":30,"src":50828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[14,50830,50831],{"start":45},[17,50832,50833],{},[645,50834,50835],{},"外部 JavaScript",[21,50837,50838],{},[1823,50839],{"alt":30,"src":50840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[14,50842,50843],{"start":55},[17,50844,50845],{},[645,50846,50847],{},"内联 JavaScript",[21,50849,50850],{},[1823,50851],{"alt":30,"src":50852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[465,50854,50856],{"id":50855},"_213-javascript注释","2.1.3 JavaScript注释",[21,50858,50859],{},[1823,50860],{"alt":30,"src":50861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[21,50863,50864],{},"alt+shift+a一定要记住！",[465,50866,50868],{"id":50867},"_214-javascript结束符","2.1.4 JavaScript结束符",[21,50870,50871],{},[1823,50872],{"alt":30,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[465,50875,50877],{"id":50876},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[14,50879,50880],{},[17,50881,50882],{},"输出语法：",[21,50884,50885],{},"①document.write('要出的内容')",[21,50887,50888],{},"向body内输出内容；",[21,50890,50891],{},"如果输出的内容写的是标签，也会被解析cheng",[21,50893,50894],{},"②alert('要出的内容')",[21,50896,50897],{},"页面弹出警告对话框",[21,50899,50900],{},"③console.log('控制台打印')",[21,50902,50903],{},"控制台输出语法，程序员调试使用",[21,50905,50906],{},"输入log就行，自动生成：",[21,50908,50909],{},[1823,50910],{"alt":30,"src":50911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[14,50913,50914],{"start":45},[17,50915,50916],{},"输入语法：",[21,50918,50919],{},[1823,50920],{"alt":30,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[465,50923,50925],{"id":50924},"_2116-字面量","21.1.6 字面量",[21,50927,50928],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[21,50930,50931],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[438,50933,50935],{"id":50934},"_22-变量","2.2 变量",[14,50937,50938],{},[17,50939,50940],{},"变量声明",[21,50942,50943],{},"let 变量名",[1501,50945,50946,50949],{},[17,50947,50948],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[17,50950,50951],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[14,50953,50954],{"start":45},[17,50955,50956],{},"变量赋值",[25,50958,50962],{"className":50959,"code":50960,"language":50961,"meta":30,"style":30},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[32,50963,50964,50969],{"__ignoreMap":30},[35,50965,50966],{"class":37,"line":38},[35,50967,50968],{"class":359},"let age\n",[35,50970,50971],{"class":37,"line":45},[35,50972,50973],{"class":359},"age=18\n",[14,50975,50976,50979],{"start":55},[17,50977,50978],{},"连这些（变量的初始化）：let age=18",[17,50980,50981],{},"更新变量",[21,50983,50984],{},[1823,50985],{"alt":30,"src":50986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[14,50988,50989],{"start":74},[17,50990,50991],{},"声明多个变量",[21,50993,50994],{},[1823,50995],{"alt":30,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[14,50998,50999],{"start":83},[17,51000,51001],{},"变量命名规则与规范",[21,51003,51004],{},[1823,51005],{"alt":30,"src":51006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[21,51008,51009],{},"遵守小驼峰！",[14,51011,51012],{"start":92},[17,51013,51014],{},"变量拓展-let和var的区别",[21,51016,51017],{},[1823,51018],{"alt":30,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[438,51021,51023],{"id":51022},"_23-数组","2.3 数组",[25,51025,51027],{"className":50959,"code":51026,"language":50961,"meta":30,"style":30},"let arr = []\n",[32,51028,51029],{"__ignoreMap":30},[35,51030,51031],{"class":37,"line":38},[35,51032,51026],{"class":359},[21,51034,51035],{},[1823,51036],{"alt":30,"src":51037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[21,51039,51040],{},[1823,51041],{"alt":30,"src":51042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[438,51044,51046],{"id":51045},"_24-常量","2.4 常量",[21,51048,51049],{},[1823,51050],{"alt":30,"src":51051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[21,51053,51054],{},"const — 类似于 let ，但是变量的值无法被修改",[438,51056,51058],{"id":51057},"_25-数据类型","2.5 数据类型",[21,51060,51061],{},[1823,51062],{"alt":30,"src":51063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[14,51065,51066,51069],{},[17,51067,51068],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[17,51070,51071],{},"算数运算符：",[21,51073,51074],{},[1823,51075],{"alt":30,"src":51076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[14,51078,51079],{"start":55},[17,51080,51081],{},"数字类型（Number）",[21,51083,51084],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[21,51086,51087],{},[1823,51088],{"alt":30,"src":51089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[14,51091,51092],{"start":65},[17,51093,51094],{},"字符串类型（string）",[21,51096,51097],{},[1823,51098],{"alt":30,"src":51099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[21,51101,51102],{},"反引号也是可以使用的",[21,51104,51105],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[21,51107,51108],{},"例如：document.write(\"我今年\"+age+\"岁\")",[14,51110,51111],{"start":74},[17,51112,51113],{},"模板字符串",[21,51115,51116],{},[1823,51117],{"alt":30,"src":51118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[21,51120,51121],{},"类似于python的字符串格式化",[14,51123,51124],{"start":83},[17,51125,51126],{},"布尔类型",[21,51128,51129],{},"true 和 false",[14,51131,51132],{"start":92},[17,51133,51134],{},"未定义类型（underfined）",[21,51136,51137],{},"表示没有赋值",[21,51139,51140],{},"未定义类型是比较特殊的类型，只有一个值undefined",[21,51142,51143],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[14,51145,51146],{"start":101},[17,51147,51148],{},"null（空类型）",[21,51150,51151],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[21,51153,51154],{},"赋值了，但是内容为空",[25,51156,51158],{"className":50959,"code":51157,"language":50961,"meta":30,"style":30},"typeof null\n输出的是'object'，是一个对象数据类型\n",[32,51159,51160,51165],{"__ignoreMap":30},[35,51161,51162],{"class":37,"line":38},[35,51163,51164],{"class":359},"typeof null\n",[35,51166,51167],{"class":37,"line":45},[35,51168,51169],{"class":359},"输出的是'object'，是一个对象数据类型\n",[14,51171,51172],{"start":110},[17,51173,51174],{},"控制台检测数据类型",[21,51176,51177],{},[1823,51178],{"alt":30,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[14,51181,51182],{"start":119},[17,51183,51184],{},"类型转换",[21,51186,51187],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[21,51189,51190],{},"转换方式：隐式转换和显示转换",[21,51192,51193],{},"①隐式转换",[1501,51195,51196,51199,51202,51205],{},[17,51197,51198],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[17,51200,51201],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[17,51203,51204],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[17,51206,51207],{},"任何数据和字符串相加结果都是字符串",[21,51209,51210],{},"②显示转换",[21,51212,51213],{},[1823,51214],{"alt":30,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[21,51217,51218],{},[1823,51219],{"alt":30,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[21,51222,51223],{},"在输入的时候要用好隐式转换，简单写起来",[21,51225,51226],{},"let num = +prompt(’请输入数字：‘)",[21,51228,51229],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[21,51231,51232],{},"console.log(parseInt('12.333px'))",[21,51234,51235],{},"输出为：12",[21,51237,51238],{},"console.log(parseInt('a'a'a12.333px'))",[21,51240,51241],{},"输出：NaN",[438,51243,51245],{"id":51244},"_26-运算符","2.6 运算符",[465,51247,51249],{"id":51248},"_261-赋值运算符","2.6.1 赋值运算符",[21,51251,51252],{},[1823,51253],{"alt":30,"src":51254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[465,51256,51258],{"id":51257},"_262-一元运算符","2.6.2 一元运算符",[21,51260,51261],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[21,51263,51264],{},[1823,51265],{"alt":30,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[21,51268,51269],{},[1823,51270],{"alt":30,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[21,51273,51274],{},"两者的区别：",[21,51276,51277],{},[1823,51278],{"alt":30,"src":51279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[21,51281,51282],{},"前置先自加；后置后加，代码执行完之后再加",[465,51284,51286],{"id":51285},"_263-比较运算符","2.6.3 比较运算符",[21,51288,51289],{},[1823,51290],{"alt":30,"src":51291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[21,51293,51294],{},"比较运算符也有隐式转换",[21,51296,51297],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[21,51299,51300],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[21,51302,51303],{},"要使用三等，开发的时候",[21,51305,51306],{},"NaN不等于任何人，包括它自己",[21,51308,51309],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[21,51311,51312],{},"7\u002F10=0.7",[21,51314,51315],{},"最后：0.5+0.2=0.7",[21,51317,51318],{},"字符串比较，比较的是字符对应的ASCII码",[465,51320,51322],{"id":51321},"_264-逻辑运算符","2.6.4 逻辑运算符",[21,51324,51325],{},[1823,51326],{"alt":30,"src":51327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[21,51329,51330],{},[1823,51331],{"alt":30,"src":51332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[21,51334,51335],{},[1823,51336],{"alt":30,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[21,51339,51340],{},"上述题目选D",[21,51342,51343],{},"与真2假1；或真1假2",[465,51345,51347],{"id":51346},"_265-运算符优先级","2.6.5 运算符优先级",[21,51349,51350],{},[1823,51351],{"alt":30,"src":51352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[21,51354,51355],{},"先算逻辑与，后算逻辑或",[438,51357,51359],{"id":51358},"_27-语句","2.7 语句",[21,51361,51362],{},"表达式：是可以被求值的代码，会有结果给我们",[21,51364,51365],{},"语句：语句是可以被执行的代码，例如prompt()",[21,51367,51368],{},[1823,51369],{"alt":30,"src":51370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[21,51372,51373],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[21,51375,51376],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[465,51378,51380],{"id":51379},"_271-分支语句","2.7.1 分支语句",[22332,51382,51384],{"id":51383},"_2711-if分支语句","2.7.1.1 if分支语句",[21,51386,51387],{},"if语句单行简单的话，可以不写{}，写在一行就行",[14,51389,51390],{},[17,51391,51392],{},"单分支语句",[21,51394,51395],{},[1823,51396],{"alt":30,"src":51397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[21,51399,51400],{},"除了0，所有数字都为真",[25,51402,51404],{"className":50959,"code":51403,"language":50961,"meta":30,"style":30},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[32,51405,51406,51411,51416,51421,51425],{"__ignoreMap":30},[35,51407,51408],{"class":37,"line":38},[35,51409,51410],{"class":359},"if（0) {\n",[35,51412,51413],{"class":37,"line":45},[35,51414,51415],{"class":359},"    let a=1\n",[35,51417,51418],{"class":37,"line":55},[35,51419,51420],{"class":359},"    alert(typeof a)\n",[35,51422,51423],{"class":37,"line":65},[35,51424,1926],{"class":359},[35,51426,51427],{"class":37,"line":74},[35,51428,51429],{"class":359},"不输出，括号为假\n",[14,51431,51432],{"start":45},[17,51433,51434],{},"双分支语句",[21,51436,51437],{},[1823,51438],{"alt":30,"src":51439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[14,51441,51442],{"start":55},[17,51443,51444],{},"多分支语句",[21,51446,51447],{},[1823,51448],{"alt":30,"src":51449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22332,51451,51453],{"id":51452},"_2712-三元运算符","2.7.1.2 三元运算符",[21,51455,51456],{},[1823,51457],{"alt":30,"src":51458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22332,51460,51462],{"id":51461},"_2713-switch语句","2.7.1.3 switch语句",[21,51464,51465],{},[1823,51466],{"alt":30,"src":51467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[21,51469,51470],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[465,51472,51474],{"id":51473},"_272-循环语句","2.7.2 循环语句",[22332,51476,51478],{"id":51477},"_2721-断点演示","2.7.2.1 断点演示",[21,51480,51481],{},[1823,51482],{"alt":30,"src":51483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22332,51485,51487],{"id":51486},"_2722-while循环","2.7.2.2 while循环",[21,51489,51490],{},[1823,51491],{"alt":30,"src":51492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[21,51494,51495],{},[1823,51496],{"alt":30,"src":51497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22332,51499,51501],{"id":51500},"_2723-for循环","2.7.2.3 for循环",[21,51503,51504],{},[1823,51505],{"alt":30,"src":51506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[21,51508,51509],{},"for(;;) {",[21,51511,1440],{},[21,51513,51514],{},"表示无限循环",[21,51516,51517],{},[1823,51518],{"alt":30,"src":51519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22332,51521,51523],{"id":51522},"_2724-循环的退出","2.7.2.4 循环的退出",[21,51525,51526],{},[1823,51527],{"alt":30,"src":51528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[438,51530,51532],{"id":51531},"_28-数组","2.8 数组",[465,51534,51536],{"id":51535},"_281-基础认识","2.8.1 基础认识",[21,51538,51539],{},[1823,51540],{"alt":30,"src":51541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[21,51543,51544],{},[1823,51545],{"alt":30,"src":51546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[21,51548,51549],{},[1823,51550],{"alt":30,"src":51551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[21,51553,51554],{},[1823,51555],{"alt":30,"src":51556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[465,51558,51560],{"id":51559},"_282-操作数组","2.8.2 操作数组",[21,51562,51563],{},[1823,51564],{"alt":30,"src":51565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[14,51567,51568],{},[17,51569,51570],{},"添加元素",[21,51572,51573],{},[1823,51574],{"alt":30,"src":51575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[21,51577,51578],{},"console.log(arr.push('green'))",[21,51580,51581],{},"输出结果：为新数组的长度",[21,51583,51584],{},[1823,51585],{"alt":30,"src":51586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[21,51588,51589],{},"push用的非常多，一定要记住",[14,51591,51592],{},[17,51593,51594],{},"删除元素",[21,51596,51597],{},[1823,51598],{"alt":30,"src":51599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[21,51601,51602],{},[1823,51603],{"alt":30,"src":51604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[21,51606,51607],{},[1823,51608],{"alt":30,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[465,51611,51613],{"id":51612},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[25,51615,51617],{"className":50959,"code":51616,"language":50961,"meta":30,"style":30},"\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",[32,51618,51619,51634,51650,51654,51663,51681,51705,51727,51741,51749,51756,51768,51779,51783,51787,51794,51806,51821,51834,51853,51870,51885,51897,51909,51921,51925,51929,51940,51950,51962,51974,51986,51997,52001,52005,52017,52021,52035,52039,52043,52054,52068,52080,52094,52098,52107,52116,52120,52129,52133,52142,52147,52152,52165,52193,52198,52203,52228,52233,52237,52242,52247,52262,52266,52271,52301,52313,52329,52345,52359,52364,52371,52375,52380,52393,52401,52409,52413],{"__ignoreMap":30},[35,51620,51621,51624,51628,51631],{"class":37,"line":38},[35,51622,51623],{"class":359},"\u003C!",[35,51625,51627],{"class":51626},"s9eBZ","DOCTYPE",[35,51629,51630],{"class":48}," html",[35,51632,51633],{"class":359},">\n",[35,51635,51636,51638,51640,51643,51645,51648],{"class":37,"line":45},[35,51637,1404],{"class":359},[35,51639,50961],{"class":51626},[35,51641,51642],{"class":48}," lang",[35,51644,544],{"class":359},[35,51646,51647],{"class":306},"\"en\"",[35,51649,51633],{"class":359},[35,51651,51652],{"class":37,"line":55},[35,51653,141],{"emptyLinePlaceholder":140},[35,51655,51656,51658,51661],{"class":37,"line":65},[35,51657,1404],{"class":359},[35,51659,51660],{"class":51626},"head",[35,51662,51633],{"class":359},[35,51664,51665,51668,51671,51674,51676,51679],{"class":37,"line":74},[35,51666,51667],{"class":359},"    \u003C",[35,51669,51670],{"class":51626},"meta",[35,51672,51673],{"class":48}," charset",[35,51675,544],{"class":359},[35,51677,51678],{"class":306},"\"UTF-8\"",[35,51680,51633],{"class":359},[35,51682,51683,51685,51687,51690,51692,51695,51698,51700,51703],{"class":37,"line":83},[35,51684,51667],{"class":359},[35,51686,51670],{"class":51626},[35,51688,51689],{"class":48}," http-equiv",[35,51691,544],{"class":359},[35,51693,51694],{"class":306},"\"X-UA-Compatible\"",[35,51696,51697],{"class":48}," content",[35,51699,544],{"class":359},[35,51701,51702],{"class":306},"\"IE=edge\"",[35,51704,51633],{"class":359},[35,51706,51707,51709,51711,51713,51715,51718,51720,51722,51725],{"class":37,"line":92},[35,51708,51667],{"class":359},[35,51710,51670],{"class":51626},[35,51712,15254],{"class":48},[35,51714,544],{"class":359},[35,51716,51717],{"class":306},"\"viewport\"",[35,51719,51697],{"class":48},[35,51721,544],{"class":359},[35,51723,51724],{"class":306},"\"width=device-width, initial-scale=1.0\"",[35,51726,51633],{"class":359},[35,51728,51729,51731,51734,51737,51739],{"class":37,"line":101},[35,51730,51667],{"class":359},[35,51732,51733],{"class":51626},"title",[35,51735,51736],{"class":359},">Document\u003C\u002F",[35,51738,51733],{"class":51626},[35,51740,51633],{"class":359},[35,51742,51743,51745,51747],{"class":37,"line":110},[35,51744,51667],{"class":359},[35,51746,416],{"class":51626},[35,51748,51633],{"class":359},[35,51750,51751,51754],{"class":37,"line":119},[35,51752,51753],{"class":51626},"        *",[35,51755,15906],{"class":359},[35,51757,51758,51761,51764,51766],{"class":37,"line":128},[35,51759,51760],{"class":58},"            margin",[35,51762,51763],{"class":359},": ",[35,51765,687],{"class":58},[35,51767,1655],{"class":359},[35,51769,51770,51773,51775,51777],{"class":37,"line":137},[35,51771,51772],{"class":58},"            padding",[35,51774,51763],{"class":359},[35,51776,687],{"class":58},[35,51778,1655],{"class":359},[35,51780,51781],{"class":37,"line":144},[35,51782,2869],{"class":359},[35,51784,51785],{"class":37,"line":150},[35,51786,141],{"emptyLinePlaceholder":140},[35,51788,51789,51792],{"class":37,"line":159},[35,51790,51791],{"class":48},"        .box",[35,51793,15906],{"class":359},[35,51795,51796,51799,51801,51804],{"class":37,"line":168},[35,51797,51798],{"class":58},"            display",[35,51800,51763],{"class":359},[35,51802,51803],{"class":58},"flex",[35,51805,1655],{"class":359},[35,51807,51808,51811,51813,51816,51819],{"class":37,"line":177},[35,51809,51810],{"class":58},"            width",[35,51812,51763],{"class":359},[35,51814,51815],{"class":58},"700",[35,51817,51818],{"class":495},"px",[35,51820,1655],{"class":359},[35,51822,51823,51826,51828,51830,51832],{"class":37,"line":182},[35,51824,51825],{"class":58},"            height",[35,51827,51763],{"class":359},[35,51829,4307],{"class":58},[35,51831,51818],{"class":495},[35,51833,1655],{"class":359},[35,51835,51836,51839,51841,51843,51845,51848,51851],{"class":37,"line":188},[35,51837,51838],{"class":58},"            border-left",[35,51840,51763],{"class":359},[35,51842,713],{"class":58},[35,51844,51818],{"class":495},[35,51846,51847],{"class":58}," solid",[35,51849,51850],{"class":58}," pink",[35,51852,1655],{"class":359},[35,51854,51855,51858,51860,51862,51864,51866,51868],{"class":37,"line":197},[35,51856,51857],{"class":58},"            border-bottom",[35,51859,51763],{"class":359},[35,51861,713],{"class":58},[35,51863,51818],{"class":495},[35,51865,51847],{"class":58},[35,51867,51850],{"class":58},[35,51869,1655],{"class":359},[35,51871,51872,51874,51876,51878,51880,51883],{"class":37,"line":206},[35,51873,51760],{"class":58},[35,51875,51763],{"class":359},[35,51877,1150],{"class":58},[35,51879,51818],{"class":495},[35,51881,51882],{"class":58}," auto",[35,51884,1655],{"class":359},[35,51886,51887,51890,51892,51895],{"class":37,"line":215},[35,51888,51889],{"class":58},"            justify-content",[35,51891,51763],{"class":359},[35,51893,51894],{"class":58},"space-around",[35,51896,1655],{"class":359},[35,51898,51899,51902,51904,51907],{"class":37,"line":224},[35,51900,51901],{"class":58},"            align-items",[35,51903,51763],{"class":359},[35,51905,51906],{"class":58},"flex-end",[35,51908,1655],{"class":359},[35,51910,51911,51914,51916,51919],{"class":37,"line":233},[35,51912,51913],{"class":58},"            text-align",[35,51915,51763],{"class":359},[35,51917,51918],{"class":58},"center",[35,51920,1655],{"class":359},[35,51922,51923],{"class":37,"line":238},[35,51924,2869],{"class":359},[35,51926,51927],{"class":37,"line":244},[35,51928,141],{"emptyLinePlaceholder":140},[35,51930,51931,51933,51935,51938],{"class":37,"line":253},[35,51932,51791],{"class":48},[35,51934,1454],{"class":495},[35,51936,51937],{"class":51626},"div",[35,51939,15906],{"class":359},[35,51941,51942,51944,51946,51948],{"class":37,"line":262},[35,51943,51798],{"class":58},[35,51945,51763],{"class":359},[35,51947,51803],{"class":58},[35,51949,1655],{"class":359},[35,51951,51952,51954,51956,51958,51960],{"class":37,"line":271},[35,51953,51810],{"class":58},[35,51955,51763],{"class":359},[35,51957,1150],{"class":58},[35,51959,51818],{"class":495},[35,51961,1655],{"class":359},[35,51963,51964,51967,51969,51972],{"class":37,"line":280},[35,51965,51966],{"class":58},"            background-color",[35,51968,51763],{"class":359},[35,51970,51971],{"class":58},"pink",[35,51973,1655],{"class":359},[35,51975,51976,51979,51981,51984],{"class":37,"line":289},[35,51977,51978],{"class":58},"            flex-direction",[35,51980,51763],{"class":359},[35,51982,51983],{"class":58},"column",[35,51985,1655],{"class":359},[35,51987,51988,51990,51992,51995],{"class":37,"line":294},[35,51989,51889],{"class":58},[35,51991,51763],{"class":359},[35,51993,51994],{"class":58},"space-between",[35,51996,1655],{"class":359},[35,51998,51999],{"class":37,"line":300},[35,52000,2869],{"class":359},[35,52002,52003],{"class":37,"line":313},[35,52004,141],{"emptyLinePlaceholder":140},[35,52006,52007,52009,52012,52015],{"class":37,"line":324},[35,52008,51791],{"class":48},[35,52010,52011],{"class":51626}," div",[35,52013,52014],{"class":51626}," span",[35,52016,15906],{"class":359},[35,52018,52019],{"class":37,"line":2955},[35,52020,141],{"emptyLinePlaceholder":140},[35,52022,52023,52026,52028,52031,52033],{"class":37,"line":8282},[35,52024,52025],{"class":58},"            margin-top",[35,52027,51763],{"class":359},[35,52029,52030],{"class":58},"-20",[35,52032,51818],{"class":495},[35,52034,1655],{"class":359},[35,52036,52037],{"class":37,"line":8306},[35,52038,2869],{"class":359},[35,52040,52041],{"class":37,"line":8311},[35,52042,141],{"emptyLinePlaceholder":140},[35,52044,52045,52047,52049,52052],{"class":37,"line":8317},[35,52046,51791],{"class":48},[35,52048,52011],{"class":51626},[35,52050,52051],{"class":51626}," h4",[35,52053,15906],{"class":359},[35,52055,52056,52059,52061,52064,52066],{"class":37,"line":8344},[35,52057,52058],{"class":58},"            margin-bottom",[35,52060,51763],{"class":359},[35,52062,52063],{"class":58},"-35",[35,52065,51818],{"class":495},[35,52067,1655],{"class":359},[35,52069,52070,52072,52074,52076,52078],{"class":37,"line":8349},[35,52071,51810],{"class":58},[35,52073,51763],{"class":359},[35,52075,850],{"class":58},[35,52077,51818],{"class":495},[35,52079,1655],{"class":359},[35,52081,52082,52085,52087,52090,52092],{"class":37,"line":8355},[35,52083,52084],{"class":58},"            margin-left",[35,52086,51763],{"class":359},[35,52088,52089],{"class":58},"-10",[35,52091,51818],{"class":495},[35,52093,1655],{"class":359},[35,52095,52096],{"class":37,"line":8367},[35,52097,2869],{"class":359},[35,52099,52100,52103,52105],{"class":37,"line":8379},[35,52101,52102],{"class":359},"    \u003C\u002F",[35,52104,416],{"class":51626},[35,52106,51633],{"class":359},[35,52108,52109,52112,52114],{"class":37,"line":8391},[35,52110,52111],{"class":359},"\u003C\u002F",[35,52113,51660],{"class":51626},[35,52115,51633],{"class":359},[35,52117,52118],{"class":37,"line":10050},[35,52119,141],{"emptyLinePlaceholder":140},[35,52121,52122,52124,52127],{"class":37,"line":10075},[35,52123,1404],{"class":359},[35,52125,52126],{"class":51626},"body",[35,52128,51633],{"class":359},[35,52130,52131],{"class":37,"line":10098},[35,52132,141],{"emptyLinePlaceholder":140},[35,52134,52135,52137,52140],{"class":37,"line":10122},[35,52136,51667],{"class":359},[35,52138,52139],{"class":51626},"script",[35,52141,51633],{"class":359},[35,52143,52144],{"class":37,"line":10127},[35,52145,52146],{"class":41},"        \u002F\u002F 1. 四次弹框效果\n",[35,52148,52149],{"class":37,"line":10132},[35,52150,52151],{"class":41},"        \u002F\u002F 声明一个新的数组\n",[35,52153,52154,52157,52160,52162],{"class":37,"line":10137},[35,52155,52156],{"class":495},"        let",[35,52158,52159],{"class":359}," arr ",[35,52161,544],{"class":495},[35,52163,52164],{"class":359}," []\n",[35,52166,52167,52169,52171,52174,52176,52178,52180,52182,52184,52187,52189,52191],{"class":37,"line":10146},[35,52168,3737],{"class":495},[35,52170,2012],{"class":359},[35,52172,52173],{"class":495},"let",[35,52175,9772],{"class":359},[35,52177,544],{"class":495},[35,52179,25450],{"class":58},[35,52181,9779],{"class":359},[35,52183,1949],{"class":495},[35,52185,52186],{"class":58}," 4",[35,52188,3548],{"class":359},[35,52190,2633],{"class":495},[35,52192,12776],{"class":359},[35,52194,52195],{"class":37,"line":10151},[35,52196,52197],{"class":41},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[35,52199,52200],{"class":37,"line":10157},[35,52201,52202],{"class":41},"            \u002F\u002F arr.push(num)\n",[35,52204,52205,52208,52211,52213,52216,52218,52221,52223,52226],{"class":37,"line":10178},[35,52206,52207],{"class":359},"            arr.",[35,52209,52210],{"class":48},"push",[35,52212,499],{"class":359},[35,52214,52215],{"class":48},"prompt",[35,52217,499],{"class":359},[35,52219,52220],{"class":306},"`请输入第${",[35,52222,935],{"class":359},[35,52224,52225],{"class":306},"}季度的数据:`",[35,52227,30823],{"class":359},[35,52229,52230],{"class":37,"line":10184},[35,52231,52232],{"class":41},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[35,52234,52235],{"class":37,"line":10198},[35,52236,2869],{"class":359},[35,52238,52239],{"class":37,"line":10204},[35,52240,52241],{"class":41},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[35,52243,52244],{"class":37,"line":10231},[35,52245,52246],{"class":41},"        \u002F\u002F 盒子开头\n",[35,52248,52249,52252,52255,52257,52260],{"class":37,"line":10240},[35,52250,52251],{"class":359},"        document.",[35,52253,52254],{"class":48},"write",[35,52256,499],{"class":359},[35,52258,52259],{"class":306},"` \u003Cdiv class=\"box\">`",[35,52261,505],{"class":359},[35,52263,52264],{"class":37,"line":10246},[35,52265,141],{"emptyLinePlaceholder":140},[35,52267,52268],{"class":37,"line":10254},[35,52269,52270],{"class":41},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[35,52272,52273,52275,52277,52279,52281,52283,52285,52287,52289,52292,52295,52297,52299],{"class":37,"line":10259},[35,52274,3737],{"class":495},[35,52276,2012],{"class":359},[35,52278,52173],{"class":495},[35,52280,9772],{"class":359},[35,52282,544],{"class":495},[35,52284,4427],{"class":58},[35,52286,9779],{"class":359},[35,52288,1404],{"class":495},[35,52290,52291],{"class":359}," arr.",[35,52293,52294],{"class":58},"length",[35,52296,3548],{"class":359},[35,52298,2633],{"class":495},[35,52300,12776],{"class":359},[35,52302,52303,52306,52308,52310],{"class":37,"line":16938},[35,52304,52305],{"class":359},"            document.",[35,52307,52254],{"class":48},[35,52309,499],{"class":359},[35,52311,52312],{"class":306},"`\n",[35,52314,52315,52318,52320,52322,52324,52326],{"class":37,"line":16944},[35,52316,52317],{"class":306},"              \u003Cdiv style=\"height: ${",[35,52319,4214],{"class":359},[35,52321,1384],{"class":306},[35,52323,935],{"class":359},[35,52325,1434],{"class":306},[35,52327,52328],{"class":306},"}px;\">\n",[35,52330,52331,52334,52336,52338,52340,52342],{"class":37,"line":16967},[35,52332,52333],{"class":306},"                \u003Cspan>${",[35,52335,4214],{"class":359},[35,52337,1384],{"class":306},[35,52339,935],{"class":359},[35,52341,1434],{"class":306},[35,52343,52344],{"class":306},"}\u003C\u002Fspan>\n",[35,52346,52347,52350,52352,52354,52356],{"class":37,"line":16973},[35,52348,52349],{"class":306},"                \u003Ch4>第${",[35,52351,935],{"class":359},[35,52353,45892],{"class":495},[35,52355,25450],{"class":58},[35,52357,52358],{"class":306},"}季度\u003C\u002Fh4>\n",[35,52360,52361],{"class":37,"line":16996},[35,52362,52363],{"class":306},"              \u003C\u002Fdiv>          \n",[35,52365,52366,52369],{"class":37,"line":17010},[35,52367,52368],{"class":306},"            `",[35,52370,505],{"class":359},[35,52372,52373],{"class":37,"line":17030},[35,52374,2869],{"class":359},[35,52376,52377],{"class":37,"line":17036},[35,52378,52379],{"class":41},"        \u002F\u002F 盒子结尾\n",[35,52381,52382,52384,52386,52388,52391],{"class":37,"line":17047},[35,52383,52251],{"class":359},[35,52385,52254],{"class":48},[35,52387,499],{"class":359},[35,52389,52390],{"class":306},"` \u003C\u002Fdiv>`",[35,52392,505],{"class":359},[35,52394,52395,52397,52399],{"class":37,"line":17070},[35,52396,52102],{"class":359},[35,52398,52139],{"class":51626},[35,52400,51633],{"class":359},[35,52402,52403,52405,52407],{"class":37,"line":17092},[35,52404,52111],{"class":359},[35,52406,52126],{"class":51626},[35,52408,51633],{"class":359},[35,52410,52411],{"class":37,"line":17097},[35,52412,141],{"emptyLinePlaceholder":140},[35,52414,52415,52417,52419],{"class":37,"line":17103},[35,52416,52111],{"class":359},[35,52418,50961],{"class":51626},[35,52420,51633],{"class":359},[465,52422,52424],{"id":52423},"_284-冒泡排序","2.8.4 冒泡排序",[25,52426,52428],{"className":50959,"code":52427,"language":50961,"meta":30,"style":30},"\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",[32,52429,52430,52440,52454,52458,52466,52481,52501,52513,52521,52525,52533,52541,52573,52606,52643,52648,52667,52672,52685,52700,52716,52720,52725,52729,52739,52748,52756,52760],{"__ignoreMap":30},[35,52431,52432,52434,52436,52438],{"class":37,"line":38},[35,52433,51623],{"class":359},[35,52435,51627],{"class":51626},[35,52437,51630],{"class":48},[35,52439,51633],{"class":359},[35,52441,52442,52444,52446,52448,52450,52452],{"class":37,"line":45},[35,52443,1404],{"class":359},[35,52445,50961],{"class":51626},[35,52447,51642],{"class":48},[35,52449,544],{"class":359},[35,52451,51647],{"class":306},[35,52453,51633],{"class":359},[35,52455,52456],{"class":37,"line":55},[35,52457,141],{"emptyLinePlaceholder":140},[35,52459,52460,52462,52464],{"class":37,"line":65},[35,52461,1404],{"class":359},[35,52463,51660],{"class":51626},[35,52465,51633],{"class":359},[35,52467,52468,52471,52473,52475,52477,52479],{"class":37,"line":74},[35,52469,52470],{"class":359},"  \u003C",[35,52472,51670],{"class":51626},[35,52474,51673],{"class":48},[35,52476,544],{"class":359},[35,52478,51678],{"class":306},[35,52480,51633],{"class":359},[35,52482,52483,52485,52487,52489,52491,52493,52495,52497,52499],{"class":37,"line":83},[35,52484,52470],{"class":359},[35,52486,51670],{"class":51626},[35,52488,15254],{"class":48},[35,52490,544],{"class":359},[35,52492,51717],{"class":306},[35,52494,51697],{"class":48},[35,52496,544],{"class":359},[35,52498,51724],{"class":306},[35,52500,51633],{"class":359},[35,52502,52503,52505,52507,52509,52511],{"class":37,"line":92},[35,52504,52470],{"class":359},[35,52506,51733],{"class":51626},[35,52508,51736],{"class":359},[35,52510,51733],{"class":51626},[35,52512,51633],{"class":359},[35,52514,52515,52517,52519],{"class":37,"line":101},[35,52516,52111],{"class":359},[35,52518,51660],{"class":51626},[35,52520,51633],{"class":359},[35,52522,52523],{"class":37,"line":110},[35,52524,141],{"emptyLinePlaceholder":140},[35,52526,52527,52529,52531],{"class":37,"line":119},[35,52528,1404],{"class":359},[35,52530,52126],{"class":51626},[35,52532,51633],{"class":359},[35,52534,52535,52537,52539],{"class":37,"line":128},[35,52536,52470],{"class":359},[35,52538,52139],{"class":51626},[35,52540,51633],{"class":359},[35,52542,52543,52546,52548,52550,52553,52555,52557,52559,52561,52563,52565,52567,52569,52571],{"class":37,"line":137},[35,52544,52545],{"class":495},"    let",[35,52547,52159],{"class":359},[35,52549,544],{"class":495},[35,52551,52552],{"class":359}," [",[35,52554,372],{"class":58},[35,52556,12769],{"class":359},[35,52558,789],{"class":58},[35,52560,12769],{"class":359},[35,52562,568],{"class":58},[35,52564,12769],{"class":359},[35,52566,574],{"class":58},[35,52568,12769],{"class":359},[35,52570,713],{"class":58},[35,52572,33572],{"class":359},[35,52574,52575,52577,52579,52581,52583,52585,52587,52589,52591,52593,52595,52598,52600,52602,52604],{"class":37,"line":144},[35,52576,3535],{"class":495},[35,52578,2012],{"class":359},[35,52580,52173],{"class":495},[35,52582,9772],{"class":359},[35,52584,544],{"class":495},[35,52586,4427],{"class":58},[35,52588,9779],{"class":359},[35,52590,1404],{"class":495},[35,52592,52291],{"class":359},[35,52594,52294],{"class":58},[35,52596,52597],{"class":495}," -",[35,52599,25450],{"class":58},[35,52601,3548],{"class":359},[35,52603,2633],{"class":495},[35,52605,12776],{"class":359},[35,52607,52608,52611,52613,52615,52617,52619,52621,52623,52625,52627,52629,52631,52633,52635,52637,52639,52641],{"class":37,"line":150},[35,52609,52610],{"class":495},"      for",[35,52612,2012],{"class":359},[35,52614,52173],{"class":495},[35,52616,9834],{"class":359},[35,52618,544],{"class":495},[35,52620,4427],{"class":58},[35,52622,9841],{"class":359},[35,52624,1404],{"class":495},[35,52626,52291],{"class":359},[35,52628,52294],{"class":58},[35,52630,52597],{"class":495},[35,52632,9772],{"class":359},[35,52634,1026],{"class":495},[35,52636,25450],{"class":58},[35,52638,9848],{"class":359},[35,52640,2633],{"class":495},[35,52642,12776],{"class":359},[35,52644,52645],{"class":37,"line":159},[35,52646,52647],{"class":41},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[35,52649,52650,52652,52655,52657,52660,52662,52664],{"class":37,"line":168},[35,52651,2837],{"class":495},[35,52653,52654],{"class":359}," (arr[j] ",[35,52656,1454],{"class":495},[35,52658,52659],{"class":359}," arr[j ",[35,52661,975],{"class":495},[35,52663,25450],{"class":58},[35,52665,52666],{"class":359},"]) {\n",[35,52668,52669],{"class":37,"line":177},[35,52670,52671],{"class":41},"          \u002F\u002F 交换两个变量\n",[35,52673,52674,52677,52680,52682],{"class":37,"line":182},[35,52675,52676],{"class":495},"          let",[35,52678,52679],{"class":359}," tmp ",[35,52681,544],{"class":495},[35,52683,52684],{"class":359}," arr[j]\n",[35,52686,52687,52690,52692,52694,52696,52698],{"class":37,"line":188},[35,52688,52689],{"class":359},"          arr[j] ",[35,52691,544],{"class":495},[35,52693,52659],{"class":359},[35,52695,975],{"class":495},[35,52697,25450],{"class":58},[35,52699,33572],{"class":359},[35,52701,52702,52705,52707,52709,52711,52713],{"class":37,"line":197},[35,52703,52704],{"class":359},"          arr[j ",[35,52706,975],{"class":495},[35,52708,25450],{"class":58},[35,52710,4777],{"class":359},[35,52712,544],{"class":495},[35,52714,52715],{"class":359}," tmp\n",[35,52717,52718],{"class":37,"line":206},[35,52719,2869],{"class":359},[35,52721,52722],{"class":37,"line":215},[35,52723,52724],{"class":359},"      }\n",[35,52726,52727],{"class":37,"line":224},[35,52728,2528],{"class":359},[35,52730,52731,52734,52736],{"class":37,"line":233},[35,52732,52733],{"class":359},"    document.",[35,52735,52254],{"class":48},[35,52737,52738],{"class":359},"(arr)\n",[35,52740,52741,52744,52746],{"class":37,"line":238},[35,52742,52743],{"class":359},"  \u003C\u002F",[35,52745,52139],{"class":51626},[35,52747,51633],{"class":359},[35,52749,52750,52752,52754],{"class":37,"line":244},[35,52751,52111],{"class":359},[35,52753,52126],{"class":51626},[35,52755,51633],{"class":359},[35,52757,52758],{"class":37,"line":253},[35,52759,141],{"emptyLinePlaceholder":140},[35,52761,52762,52764,52766],{"class":37,"line":262},[35,52763,52111],{"class":359},[35,52765,50961],{"class":51626},[35,52767,51633],{"class":359},[21,52769,52770],{},[1823,52771],{"alt":30,"src":52772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[21,52774,52775],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[21,52777,52778],{},"let arr = [4, 2, 5, 1, 3]",[21,52780,52781],{},"\u002F\u002F 1.升序排列写法",[21,52783,52784],{},"arr.sort(function (a, b) {",[21,52786,52787],{},"return a - b",[21,52789,52790],{},"})",[21,52792,52793],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[21,52795,52796],{},"\u002F\u002F 降序排列写法",[21,52798,52784],{},[21,52800,52801],{},"return b - a",[21,52803,52790],{},[21,52805,52806],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[438,52808,52810],{"id":52809},"_29-函数","2.9 函数",[21,52812,52813],{},[1823,52814],{"alt":30,"src":52815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[21,52817,52818],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[21,52820,52821],{},"函数的声明用function",[21,52823,52824],{},"函数里边可以嵌套函数",[465,52826,52828],{"id":52827},"_291-函数传参","2.9.1 函数传参",[21,52830,52831],{},[1823,52832],{"alt":30,"src":52833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[21,52835,52836],{},[1823,52837],{"alt":30,"src":52838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1501,52840,52841,52844,52847,52850,52853,52856],{},[17,52842,52843],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[17,52845,52846],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[17,52848,52849],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[17,52851,52852],{},"开发中尽量保持形参和实参个数一致",[17,52854,52855],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[17,52857,52858],{},"形参只在函数中有用，所以不需要进行声明这个变量",[21,52860,52861],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[465,52863,52865],{"id":52864},"_292-函数的返回值","2.9.2 函数的返回值",[21,52867,52868],{},[1823,52869],{"alt":30,"src":52870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[21,52872,52873],{},[1823,52874],{"alt":30,"src":52875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1501,52877,52878,52881,52884,52887,52890],{},[17,52879,52880],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[17,52882,52883],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[17,52885,52886],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[17,52888,52889],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[17,52891,52892],{},"断点调试:进入函数内部看执行过程F11",[465,52894,52896],{"id":52895},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[25,52898,52900],{"className":50959,"code":52899,"language":50961,"meta":30,"style":30},"    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",[32,52901,52902,52907,52912,52916,52921],{"__ignoreMap":30},[35,52903,52904],{"class":37,"line":38},[35,52905,52906],{"class":359},"    function fn(a, b) {\n",[35,52908,52909],{"class":37,"line":45},[35,52910,52911],{"class":359},"      console.log(a + b);\n",[35,52913,52914],{"class":37,"line":55},[35,52915,2528],{"class":359},[35,52917,52918],{"class":37,"line":65},[35,52919,52920],{"class":359},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[35,52922,52923],{"class":37,"line":74},[35,52924,52925],{"class":359},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[465,52927,52929],{"id":52928},"_294-作用域","2.9.4 作用域",[1501,52931,52932,52938,52943,52946,52949],{},[17,52933,52934,52935],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[645,52936,52937],{},"作用域",[17,52939,52940],{},[645,52941,52942],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[17,52944,52945],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[17,52947,52948],{},"函数内部可以直接所使用全局变量",[17,52950,52951],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[21,52953,14967],{},[25,52955,52957],{"className":50959,"code":52956,"language":50961,"meta":30,"style":30},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[32,52958,52959,52964,52969,52973,52978,52983,52988],{"__ignoreMap":30},[35,52960,52961],{"class":37,"line":38},[35,52962,52963],{"class":359},"    function fun() {\n",[35,52965,52966],{"class":37,"line":45},[35,52967,52968],{"class":359},"      num = 10\n",[35,52970,52971],{"class":37,"line":55},[35,52972,2528],{"class":359},[35,52974,52975],{"class":37,"line":65},[35,52976,52977],{"class":359},"    fun()\n",[35,52979,52980],{"class":37,"line":74},[35,52981,52982],{"class":359},"    console.log(num)\n",[35,52984,52985],{"class":37,"line":83},[35,52986,52987],{"class":359},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[35,52989,52990],{"class":37,"line":92},[35,52991,52992],{"class":359},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1501,52994,52995,52998],{},[17,52996,52997],{},"函数内部的形参可以看做是局部变量",[17,52999,53000],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[21,53002,53003,53004],{},"变量访问原则： ",[645,53005,53006],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[465,53008,53010],{"id":53009},"_295-匿名函数","2.9.5 匿名函数",[21,53012,53013],{},"函数可以分为具名函数和匿名函数",[21,53015,53016],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[14,53018,53019],{},[17,53020,53021],{},"函数表达式",[21,53023,53024],{},[1823,53025],{"alt":30,"src":53026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[21,53028,53029],{},"里边也可以写参数",[21,53031,53032],{},"具名函数调用位置可以随意调整；",[21,53034,53035],{},"匿名函数函数表达式形式只能在声明后才可以使用",[14,53037,53038],{"start":45},[17,53039,53040],{},"立即执行函数",[21,53042,53043],{},[1823,53044],{"alt":30,"src":53045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[21,53047,53048],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[21,53050,53051],{},"写法：两个小括号，然后在第一个小括号中写function",[21,53053,53054],{},"(function () {})();",[21,53056,53057],{},"不要落下最后的;",[21,53059,53060],{},"立即执行函数必须要加;",[21,53062,53063],{},"分号写前写后都没问题",[21,53065,53066],{},"写前：",[21,53068,53069],{},"(function() {})()",[21,53071,53072],{},";(function () {})();",[21,53074,53075],{},"写后:",[21,53077,53078],{},"(function() {})();",[21,53080,53054],{},[21,53082,53083],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[21,53085,53086],{},"还有一种写法：",[21,53088,53089],{},"(function(){}());",[21,53091,53092],{},"或者:",[21,53094,53095],{},"!function(){}();",[21,53097,53098],{},"立即执行函数有时候也是可以加名字的：",[21,53100,53101],{},"(function flexible(window,document) {}(window,document));",[21,53103,53104],{},"省一些调用方法",[465,53106,53108],{"id":53107},"_296-逻辑中断","2.9.6 逻辑中断!!!",[21,53110,53111],{},[1823,53112],{"alt":30,"src":53113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[21,53115,53116],{},"这样就不用非得给x,y初始化了",[21,53118,53119],{},[1823,53120],{"alt":30,"src":53121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[21,53123,53124],{},"代码执行时先看左边",[21,53126,53127],{},"例如：console.log(false && 3+5)",[21,53129,53130],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[21,53132,53133],{},"&&都是真时，就返回最后一个真值",[21,53135,53136],{},"console.log(11 && 22)",[21,53138,53139],{},"输出22",[21,53141,53142],{},"逻辑与：遇真则真",[21,53144,14967],{},[21,53146,53147],{},"let age=1",[21,53149,53150],{},"console.log(11 || age++)",[21,53152,53153],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[21,53155,53156],{},"console.log(11 || 22)",[21,53158,53159],{},"||逻辑或遇到真就直接输出，输出结果为11",[21,53161,53162],{},"||如果都是假的话，就取最后一个假的值了",[465,53164,53166],{"id":53165},"_297-转换为boolean型","2.9.7 转换为Boolean型",[21,53168,53169],{},"显示转换：",[21,53171,53172,53175,53176],{},[645,53173,53174],{},"记忆","： ",[645,53177,53178],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[21,53180,53181],{},"空字符串为假，其他字符串全为真",[21,53183,53184],{},[1823,53185],{"alt":30,"src":53186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[21,53188,53189],{},"隐式转换：",[21,53191,53192],{},[1823,53193],{"alt":30,"src":53194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[21,53196,53197],{},"隐式转换:",[21,53199,53200],{},"null+3=3",[21,53202,53203],{},"undefined+3=NaN",[21,53205,53206],{},"null==undefined 输出true,他两个都当0看",[21,53208,53209],{},"null===undefined 输出false",[21,53211,53212],{},"undefined做任何操作都是NaN",[21,53214,53215],{},"NaN不等于NaN，NaN表示计算错误",[438,53217,53219],{"id":53218},"_210-对象","2.10 对象",[465,53221,53223],{"id":53222},"_2101-对象的介绍","2.10.1 对象的介绍",[21,53225,53226],{},"对象也是一种数据类型，里边的数据是无序的",[21,53228,53229],{},"对象由属性和方法组成",[21,53231,53232],{},[1823,53233],{"alt":30,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[21,53236,53237],{},[1823,53238],{"alt":30,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[21,53241,53242],{},[1823,53243],{"alt":30,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[465,53246,53248],{"id":53247},"_2102-对象属性","2.10.2 对象属性",[21,53250,53251],{},[1823,53252],{"alt":30,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[14,53255,53256],{},[17,53257,53258],{},"查询对象",[21,53260,53261],{},"对象名.属性 goods.uname",[21,53263,53264],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[21,53266,53267],{},"不带字符串的属性名也可以使用 对象名['属性名']",[21,53269,53270],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[21,53272,53273],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[14,53275,53276],{"start":45},[17,53277,53278],{},"重新赋值",[21,53280,53281],{},"对象名.属性=新值",[14,53283,53284],{"start":55},[17,53285,53286],{},"增加新数据",[21,53288,53281],{},[14,53290,53291],{"start":65},[17,53292,53293],{},"删除对象中的属性",[21,53295,53296],{},"delete 对象名.属性",[465,53298,53300],{"id":53299},"_2103-对象方法","2.10.3 对象方法",[21,53302,53303],{},[1823,53304],{"alt":30,"src":53305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[21,53307,53308],{},"后边跟的是匿名函数",[21,53310,53311],{},"对象外面的叫函数；对象内部的叫方法",[21,53313,53314],{},[1823,53315],{"alt":30,"src":53316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[465,53318,53320],{"id":53319},"_2104-遍历对象","2.10.4 遍历对象",[21,53322,53323],{},"理解为加括号的python字典遍历",[21,53325,53326],{},[1823,53327],{"alt":30,"src":53328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[21,53330,53331],{},"k是字符串类型",[21,53333,53334],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[25,53336,53338],{"className":50959,"code":53337,"language":50961,"meta":30,"style":30},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[32,53339,53340,53345,53350,53355,53360],{"__ignoreMap":30},[35,53341,53342],{"class":37,"line":38},[35,53343,53344],{"class":359},"   let arr = [1, 2, 3]\n",[35,53346,53347],{"class":37,"line":45},[35,53348,53349],{"class":359},"    for (let k in arr) {\n",[35,53351,53352],{"class":37,"line":55},[35,53353,53354],{"class":359},"      console.log(k)\n",[35,53356,53357],{"class":37,"line":65},[35,53358,53359],{"class":359},"      console.log(arr[k])\n",[35,53361,53362],{"class":37,"line":74},[35,53363,2528],{"class":359},[21,53365,53366],{},[1823,53367],{"alt":30,"src":53368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[21,53370,53371],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[21,53373,53374],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[21,53376,53377],{},"for in 得到的k是属性名",[52139,53379,53380],{},"\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",[21,53382,53383],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[465,53385,53387],{"id":53386},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[21,53389,53390],{},"数组中放对象信息",[25,53392,53396],{"className":53393,"code":53394,"language":53395,"meta":30,"style":30},"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",[32,53397,53398,53406,53411,53416,53421,53426,53431,53436,53441,53446,53451,53456,53461,53465,53469],{"__ignoreMap":30},[35,53399,53400,53402,53404],{"class":37,"line":38},[35,53401,1404],{"class":359},[35,53403,52139],{"class":51626},[35,53405,51633],{"class":359},[35,53407,53408],{"class":37,"line":45},[35,53409,53410],{"class":359},"    let students = [\n",[35,53412,53413],{"class":37,"line":55},[35,53414,53415],{"class":359},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[35,53417,53418],{"class":37,"line":65},[35,53419,53420],{"class":359},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[35,53422,53423],{"class":37,"line":74},[35,53424,53425],{"class":359},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[35,53427,53428],{"class":37,"line":83},[35,53429,53430],{"class":359},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[35,53432,53433],{"class":37,"line":92},[35,53434,53435],{"class":359},"    ]\n",[35,53437,53438],{"class":37,"line":101},[35,53439,53440],{"class":359},"    for (let i = 0; i \u003C students.length; i++) {\n",[35,53442,53443],{"class":37,"line":110},[35,53444,53445],{"class":359},"      for (let k in students[i]) {\n",[35,53447,53448],{"class":37,"line":119},[35,53449,53450],{"class":359},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[35,53452,53453],{"class":37,"line":128},[35,53454,53455],{"class":359},"        \u002F\u002F输出每个人的名字：\n",[35,53457,53458],{"class":37,"line":137},[35,53459,53460],{"class":359},"        \u002F\u002Fconsole.log(students[i].name)\n",[35,53462,53463],{"class":37,"line":144},[35,53464,52724],{"class":359},[35,53466,53467],{"class":37,"line":150},[35,53468,2528],{"class":359},[35,53470,53471,53473,53475],{"class":37,"line":159},[35,53472,52743],{"class":359},[35,53474,52139],{"class":51626},[35,53476,51633],{"class":359},[465,53478,53480],{"id":53479},"_2106-内置对象","2.10.6 内置对象",[21,53482,53483],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[14,53485,53486],{},[17,53487,53488],{},"数学对象Math",[21,53490,53491],{},[1823,53492],{"alt":30,"src":53493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[21,53495,53496],{},[734,53497,53500],{"href":53498,"rel":53499},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24198],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[21,53502,53503],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[21,53505,53506],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[21,53508,53509],{},"数组不可以使用Math中的max,min来求最大值与最小值",[21,53511,53512],{},"null是一个空对象，可以认为：null类似于let obj={}",[21,53514,53515],{},"null属于对象数据类型",[14,53517,53518],{"start":45},[17,53519,53520],{},"生成任意范围随机数",[21,53522,53523],{},[1823,53524],{"alt":30,"src":53525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[21,53527,53528],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[21,53530,53531],{},"乘以几就取不到几",[21,53533,53534],{},"取数组中的随机元素：",[21,53536,53537],{},"let arr = ['red', 'green', 'blue']",[21,53539,53540],{},"let random = Math.floor(Math.random() * arr.length)",[21,53542,53543],{},"console.log(arr[random])",[21,53545,53546],{},"这个函数得到的是全闭区间",[21,53548,53549],{},"function getRandom(N, M) {",[21,53551,53552],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[21,53554,1440],{},[21,53556,53557],{},"console.log(getRandom(4, 8))",[465,53559,53561],{"id":53560},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[21,53563,53564],{},[1823,53565],{"alt":30,"src":53566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[21,53568,53569],{},[1823,53570],{"alt":30,"src":53571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[21,53573,53574],{},[1823,53575],{"alt":30,"src":53576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[21,53578,53579],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[21,53581,53582],{},[1823,53583],{"alt":30,"src":53584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[21,53586,53587],{},[1823,53588],{"alt":30,"src":53589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[21,53591,53592],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[21,53594,53595],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[21,53597,53598],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[416,53600,53601],{},"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":30,"searchDepth":45,"depth":45,"links":53603},[53604,53612,53613,53614,53615,53616,53623,53627,53633,53642],{"id":50794,"depth":45,"text":50795,"children":53605},[53606,53607,53608,53609,53610,53611],{"id":50798,"depth":55,"text":50799},{"id":50815,"depth":55,"text":50816},{"id":50855,"depth":55,"text":50856},{"id":50867,"depth":55,"text":50868},{"id":50876,"depth":55,"text":50877},{"id":50924,"depth":55,"text":50925},{"id":50934,"depth":45,"text":50935},{"id":51022,"depth":45,"text":51023},{"id":51045,"depth":45,"text":51046},{"id":51057,"depth":45,"text":51058},{"id":51244,"depth":45,"text":51245,"children":53617},[53618,53619,53620,53621,53622],{"id":51248,"depth":55,"text":51249},{"id":51257,"depth":55,"text":51258},{"id":51285,"depth":55,"text":51286},{"id":51321,"depth":55,"text":51322},{"id":51346,"depth":55,"text":51347},{"id":51358,"depth":45,"text":51359,"children":53624},[53625,53626],{"id":51379,"depth":55,"text":51380},{"id":51473,"depth":55,"text":51474},{"id":51531,"depth":45,"text":51532,"children":53628},[53629,53630,53631,53632],{"id":51535,"depth":55,"text":51536},{"id":51559,"depth":55,"text":51560},{"id":51612,"depth":55,"text":51613},{"id":52423,"depth":55,"text":52424},{"id":52809,"depth":45,"text":52810,"children":53634},[53635,53636,53637,53638,53639,53640,53641],{"id":52827,"depth":55,"text":52828},{"id":52864,"depth":55,"text":52865},{"id":52895,"depth":55,"text":52896},{"id":52928,"depth":55,"text":52929},{"id":53009,"depth":55,"text":53010},{"id":53107,"depth":55,"text":53108},{"id":53165,"depth":55,"text":53166},{"id":53218,"depth":45,"text":53219,"children":53643},[53644,53645,53646,53647,53648,53649,53650],{"id":53222,"depth":55,"text":53223},{"id":53247,"depth":55,"text":53248},{"id":53299,"depth":55,"text":53300},{"id":53319,"depth":55,"text":53320},{"id":53386,"depth":55,"text":53387},{"id":53479,"depth":55,"text":53480},{"id":53560,"depth":55,"text":53561},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50786,"description":421},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53657,"title":53658,"body":53659,"description":421,"extension":422,"meta":76998,"navigation":140,"path":76999,"seo":77000,"stem":77001,"__hash__":77002},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53660,"toc":76938},[53661,53664,53667,53670,53675,53678,53681,53684,53688,53692,53698,53703,53711,53718,53721,53725,53730,53735,53740,53743,53746,53757,53760,53764,53767,53770,53775,53780,53785,53788,53791,53883,53886,53891,53894,53899,53902,53905,53910,53913,53918,53922,53925,53939,53943,53948,53951,53954,53958,53963,53966,53970,53974,53979,53983,53988,53991,53994,53997,54000,54003,54006,54011,54016,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,70776,70779,71275,71278,71283,71288,71293,71297,71302,71307,71312,71316,71321,71324,71327,71330,71333,71337,71340,71345,71348,71353,71357,71362,71365,71370,71375,71380,71383,71386,71391,71396,71399,71402,71406,71409,71414,71417,71422,71425,71430,71435,71440,71443,71448,71513,71516,71527,71531,71536,71708,71712,71717,71720,71723,71726,71730,71741,71745,71748,71753,71758,71761,71764,71767,71770,71773,71775,71778,71781,71784,71789,71792,71797,71800,71804,71807,71810,71824,71828,71831,71886,71891,71894,71897,71902,71905,71909,71914,72044,72048,72053,72058,72139,72144,72148,72151,72156,72161,72167,72170,72173,72176,72180,72185,72188,72199,72203,72220,75267,75271,75274,75277,75280,75301,75305,75308,75316,75319,75324,75327,75330,75335,75340,75344,75365,75369,75374,75377,75380,75383,75386,75390,75395,75398,75402,75407,75410,75415,75418,75423,75426,75431,76634,76638,76643,76646,76651,76935],[10,53662,53658],{"id":53663},"_3web-apis",[21,53665,53666],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[21,53668,53669],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[21,53671,53672],{},[1823,53673],{"alt":30,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[21,53676,53677],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[21,53679,53680],{},"建议数组和对象使用 const 来声明",[21,53682,53683],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[438,53685,53687],{"id":53686},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[465,53689,53691],{"id":53690},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[21,53693,53694,53697],{},[32,53695,53696],{},"document"," = HTML 文件解析后的对象化表示；",[21,53699,53700,53702],{},[32,53701,53696],{}," ≠ HTML 文件本身",[21,53704,53705,53710],{},[645,53706,53707],{},[32,53708,53709],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[21,53712,53713,53717],{},[645,53714,53715],{},[32,53716,53696],{}," ：容器里的内容，代表当前加载的网页（DOM）",[21,53719,53720],{},"document实际上为window.document的简写",[465,53722,53724],{"id":53723},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[21,53726,53727],{},[1823,53728],{"alt":30,"src":53729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[21,53731,53732],{},[1823,53733],{"alt":30,"src":53734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[21,53736,53737],{},[1823,53738],{"alt":30,"src":53739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[21,53741,53742],{},"console.dir()",[21,53744,53745],{},"dir用来打印对象",[1501,53747,53748,53751,53754],{},[17,53749,53750],{},"任何一个标签，都是一个对象",[17,53752,53753],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[17,53755,53756],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[21,53758,53759],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[465,53761,53763],{"id":53762},"_312-获取dom对象","3.1.2 获取DoM对象",[21,53765,53766],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[21,53768,53769],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[21,53771,53772],{},[645,53773,53774],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[14,53776,53777],{},[17,53778,53779],{},"利用CSS选择器来获取标签元素",[21,53781,53782],{},[1823,53783],{"alt":30,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[21,53786,53787],{},"里边的选择器必须必须加引号！！！",[21,53789,53790],{},"只选择第一个元素",[25,53792,53794],{"className":53393,"code":53793,"language":53395,"meta":30,"style":30},"\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",[32,53795,53796,53804,53825,53844,53852,53857,53862,53867,53875],{"__ignoreMap":30},[35,53797,53798,53800,53802],{"class":37,"line":38},[35,53799,1404],{"class":359},[35,53801,52126],{"class":51626},[35,53803,51633],{"class":359},[35,53805,53806,53808,53810,53813,53815,53818,53821,53823],{"class":37,"line":45},[35,53807,52470],{"class":359},[35,53809,51937],{"class":51626},[35,53811,53812],{"class":48}," class",[35,53814,544],{"class":359},[35,53816,53817],{"class":306},"\"box\"",[35,53819,53820],{"class":359},">123\u003C\u002F",[35,53822,51937],{"class":51626},[35,53824,51633],{"class":359},[35,53826,53827,53829,53831,53833,53835,53837,53840,53842],{"class":37,"line":55},[35,53828,52470],{"class":359},[35,53830,51937],{"class":51626},[35,53832,53812],{"class":48},[35,53834,544],{"class":359},[35,53836,53817],{"class":306},[35,53838,53839],{"class":359},">456\u003C\u002F",[35,53841,51937],{"class":51626},[35,53843,51633],{"class":359},[35,53845,53846,53848,53850],{"class":37,"line":65},[35,53847,52470],{"class":359},[35,53849,52139],{"class":51626},[35,53851,51633],{"class":359},[35,53853,53854],{"class":37,"line":74},[35,53855,53856],{"class":359},"    \u002F\u002F 1.获取匹配的第一个元素\n",[35,53858,53859],{"class":37,"line":83},[35,53860,53861],{"class":359},"    const box = document.querySelector('div')\n",[35,53863,53864],{"class":37,"line":92},[35,53865,53866],{"class":359},"    console.dir(box)\n",[35,53868,53869,53871,53873],{"class":37,"line":101},[35,53870,52743],{"class":359},[35,53872,52139],{"class":51626},[35,53874,51633],{"class":359},[35,53876,53877,53879,53881],{"class":37,"line":110},[35,53878,52111],{"class":359},[35,53880,52126],{"class":51626},[35,53882,51633],{"class":359},[21,53884,53885],{},"只选123，不选456",[21,53887,53888],{},[1823,53889],{"alt":30,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[21,53892,53893],{},"返回的是一个数组的集合，不能对其进行直接修改",[21,53895,53896],{},[1823,53897],{"alt":30,"src":53898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[21,53900,53901],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[21,53903,53904],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[14,53906,53907],{"start":45},[17,53908,53909],{},"其他方法来获取标签元素",[21,53911,53912],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[21,53914,53915],{},[1823,53916],{"alt":30,"src":53917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[465,53919,53921],{"id":53920},"_313-操作元素的内容","3.1.3 操作元素的内容",[21,53923,53924],{},"设置修改DOM元素内容有两种方式：",[1501,53926,53927,53930,53933,53936],{},[17,53928,53929],{},"元素.innerText=''",[17,53931,53932],{},"元素.innerHTML=''",[17,53934,53935],{},"不写字符串输出数字也是可以的",[17,53937,53938],{},"元素.innerHtml=1",[22332,53940,53942],{"id":53941},"_3131-innertext","3.1.3.1 innerText",[21,53944,53945],{},[1823,53946],{"alt":30,"src":53947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[21,53949,53950],{},"思路：实现了修改盒子中的内容！",[21,53952,53953],{},"它只显示纯文本，不解析标签",[22332,53955,53957],{"id":53956},"_3132-innerhtml","3.1.3.2 innerHTML",[21,53959,53960],{},[1823,53961],{"alt":30,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[21,53964,53965],{},"相比于innerText，他的强大之处在于可以解析标签",[465,53967,53969],{"id":53968},"_314-操作元素属性","3.1.4 操作元素属性",[22332,53971,53973],{"id":53972},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[21,53975,53976],{},[1823,53977],{"alt":30,"src":53978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22332,53980,53982],{"id":53981},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[21,53984,53985],{},[1823,53986],{"alt":30,"src":53987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[21,53989,53990],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[21,53992,53993],{},"div.style.backgroundColor = 'hotpink'",[21,53995,53996],{},"如果按照css的写法，-表示减，就会出错",[21,53998,53999],{},"body元素不需要再获取，直接用就行！！！！！！",[21,54001,54002],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[21,54004,54005],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[21,54007,54008],{},[1823,54009],{"alt":30,"src":54010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[21,54012,54013],{},[1823,54014],{"alt":30,"src":54015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[14,54017,54018,54021,54024,54027,54030,54033],{},[17,54019,54020],{},"className这个方式就是修改很多样式的时候来使用的！",[17,54022,54023],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[17,54025,54026],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[17,54028,54029],{},"className为属性名，如果还用class的话就导致与关键字冲突",[17,54031,54032],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[17,54034,54035,54036,54041],{},"解析标签的时候就变为了",[51937,54037],{"className":54038},[54039,54040],"nav","box",[54042,54043],"br",{},[21,54045,54046],{},"例子：",[51937,54048],{"className":54049},[54039],[52139,54051,54052],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[21,54054,54055],{},[1823,54056],{"alt":30,"src":54057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[21,54059,54060],{},"追加和删除类名用classList",[21,54062,54063],{},"常用于类似于开关的操作",[21,54065,54066],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[21,54068,54069],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22332,54071,54073],{"id":54072},"_3143-牢记点","3.1.4.3 牢记点",[14,54075,54076,54079,54082,54085,54088,54091,54094,54097,54100],{},[17,54077,54078],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[17,54080,54081],{},"使用style属性操作css时不要忘记引号",[17,54083,54084],{},"使用className或者classList时也不要忘记引号",[17,54086,54087],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[17,54089,54090],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[17,54092,54093],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[17,54095,54096],{},"若： let arr=['1','2',3] arr[0]=1",[17,54098,54099],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[17,54101,54102],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[465,54104,54106],{"id":54105},"_315-操作表单元素","3.1.5 操作表单元素",[14,54108,54109],{},[17,54110,54111],{},"天生的属性",[21,54113,54114],{},[1823,54115],{"alt":30,"src":54116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[21,54118,54119],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[21,54121,54122],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[21,54124,54125],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[21,54127,54128],{},[1823,54129],{"alt":30,"src":54130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[25,54132,54134],{"className":50959,"code":54133,"language":50961,"meta":30,"style":30},"在复选框中如果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",[32,54135,54136,54141,54173,54178,54183,54188,54193,54197,54202,54207,54224,54236,54241],{"__ignoreMap":30},[35,54137,54138],{"class":37,"line":38},[35,54139,54140],{"class":359},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[35,54142,54143,54145,54148,54151,54153,54156,54158,54160,54162,54164,54166,54168,54171],{"class":37,"line":45},[35,54144,1404],{"class":359},[35,54146,54147],{"class":51626},"input",[35,54149,54150],{"class":48}," type",[35,54152,544],{"class":359},[35,54154,54155],{"class":306},"\"checkbox\"",[35,54157,15254],{"class":48},[35,54159,544],{"class":359},[35,54161,7986],{"class":306},[35,54163,15293],{"class":48},[35,54165,544],{"class":359},[35,54167,7986],{"class":306},[35,54169,54170],{"class":48}," checked",[35,54172,51633],{"class":359},[35,54174,54175],{"class":37,"line":55},[35,54176,54177],{"class":359},"不选的话：\n",[35,54179,54180],{"class":37,"line":65},[35,54181,54182],{"class":359},"const input = document.querySelector('input')\n",[35,54184,54185],{"class":37,"line":74},[35,54186,54187],{"class":359},"input.checked=false\n",[35,54189,54190],{"class":37,"line":83},[35,54191,54192],{"class":359},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[35,54194,54195],{"class":37,"line":92},[35,54196,141],{"emptyLinePlaceholder":140},[35,54198,54199],{"class":37,"line":101},[35,54200,54201],{"class":359},"禁用按钮：\n",[35,54203,54204],{"class":37,"line":110},[35,54205,54206],{"class":359},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[35,54208,54209,54211,54214,54217,54220,54222],{"class":37,"line":119},[35,54210,1404],{"class":359},[35,54212,54213],{"class":51626},"button",[35,54215,54216],{"class":48}," disabled",[35,54218,54219],{"class":359},">点击\u003C\u002F",[35,54221,54213],{"class":51626},[35,54223,51633],{"class":359},[35,54225,54226,54228,54230,54232,54234],{"class":37,"line":128},[35,54227,1404],{"class":359},[35,54229,54213],{"class":51626},[35,54231,54219],{"class":359},[35,54233,54213],{"class":51626},[35,54235,51633],{"class":359},[35,54237,54238],{"class":37,"line":137},[35,54239,54240],{"class":359},"const bt = document.querySelector('button')\n",[35,54242,54243],{"class":37,"line":144},[35,54244,54245],{"class":359},"bt.disabled = false\n",[14,54247,54248],{"start":45},[17,54249,54250],{},"自定义属性",[21,54252,54253],{},[1823,54254],{"alt":30,"src":54255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[25,54257,54259],{"className":53393,"code":54258,"language":53395,"meta":30,"style":30},"\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",[32,54260,54261,54269,54297,54316,54335,54354,54373,54381,54386,54391,54396,54401,54409],{"__ignoreMap":30},[35,54262,54263,54265,54267],{"class":37,"line":38},[35,54264,1404],{"class":359},[35,54266,52126],{"class":51626},[35,54268,51633],{"class":359},[35,54270,54271,54273,54275,54278,54280,54282,54285,54287,54290,54293,54295],{"class":37,"line":45},[35,54272,52470],{"class":359},[35,54274,51937],{"class":51626},[35,54276,54277],{"class":48}," data-id",[35,54279,544],{"class":359},[35,54281,4012],{"class":306},[35,54283,54284],{"class":48}," data-spm",[35,54286,544],{"class":359},[35,54288,54289],{"class":306},"\"我不知道\"",[35,54291,54292],{"class":359},">1\u003C\u002F",[35,54294,51937],{"class":51626},[35,54296,51633],{"class":359},[35,54298,54299,54301,54303,54305,54307,54309,54312,54314],{"class":37,"line":55},[35,54300,52470],{"class":359},[35,54302,51937],{"class":51626},[35,54304,54277],{"class":48},[35,54306,544],{"class":359},[35,54308,4035],{"class":306},[35,54310,54311],{"class":359},">2\u003C\u002F",[35,54313,51937],{"class":51626},[35,54315,51633],{"class":359},[35,54317,54318,54320,54322,54324,54326,54328,54331,54333],{"class":37,"line":65},[35,54319,52470],{"class":359},[35,54321,51937],{"class":51626},[35,54323,54277],{"class":48},[35,54325,544],{"class":359},[35,54327,4048],{"class":306},[35,54329,54330],{"class":359},">3\u003C\u002F",[35,54332,51937],{"class":51626},[35,54334,51633],{"class":359},[35,54336,54337,54339,54341,54343,54345,54347,54350,54352],{"class":37,"line":74},[35,54338,52470],{"class":359},[35,54340,51937],{"class":51626},[35,54342,54277],{"class":48},[35,54344,544],{"class":359},[35,54346,4061],{"class":306},[35,54348,54349],{"class":359},">4\u003C\u002F",[35,54351,51937],{"class":51626},[35,54353,51633],{"class":359},[35,54355,54356,54358,54360,54362,54364,54366,54369,54371],{"class":37,"line":83},[35,54357,52470],{"class":359},[35,54359,51937],{"class":51626},[35,54361,54277],{"class":48},[35,54363,544],{"class":359},[35,54365,4082],{"class":306},[35,54367,54368],{"class":359},">5\u003C\u002F",[35,54370,51937],{"class":51626},[35,54372,51633],{"class":359},[35,54374,54375,54377,54379],{"class":37,"line":92},[35,54376,52470],{"class":359},[35,54378,52139],{"class":51626},[35,54380,51633],{"class":359},[35,54382,54383],{"class":37,"line":101},[35,54384,54385],{"class":359},"    const one = document.querySelector('div')\n",[35,54387,54388],{"class":37,"line":110},[35,54389,54390],{"class":359},"    console.log(one.dataset)\n",[35,54392,54393],{"class":37,"line":119},[35,54394,54395],{"class":359},"    console.log(one.dataset.id)\n",[35,54397,54398],{"class":37,"line":128},[35,54399,54400],{"class":359},"    console.log(one.dataset.spm)\n",[35,54402,54403,54405,54407],{"class":37,"line":137},[35,54404,52743],{"class":359},[35,54406,52139],{"class":51626},[35,54408,51633],{"class":359},[35,54410,54411,54413,54415],{"class":37,"line":144},[35,54412,52111],{"class":359},[35,54414,52126],{"class":51626},[35,54416,51633],{"class":359},[21,54418,54419],{},[1823,54420],{"alt":30,"src":54421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[21,54423,54424],{},"document.querySelector选择的是第一个对象（元素）",[465,54426,54428],{"id":54427},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[21,54430,54431],{},[1823,54432],{"alt":30,"src":54433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[21,54435,54436],{},[1823,54437],{"alt":30,"src":54438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[21,54440,54441],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52139,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",[21,54446,54447],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52139,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",[21,54452,54453],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[21,54455,54456],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[21,54458,54459],{},"单位为毫秒！！！",[21,54461,54462],{},"可以搭配匿名函数来用！！！",[21,54464,54465],{},"setInterval(function () {",[21,54467,54468],{},"alert('两秒执行一次')",[21,54470,54471],{},"}, 2000)",[21,54473,54474],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[21,54476,54477],{},"function fn() {",[21,54479,54480],{},"document.write(1)",[21,54482,1440],{},[21,54484,54485],{},"setInterval(fn, 1000)",[21,54487,54488],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[21,54490,54491],{},"setInterval('fn()', 1000)",[21,54493,54494],{},[1823,54495],{"alt":30,"src":54496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22332,54498,54500],{"id":54499},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[25,54502,54504],{"className":50959,"code":54503,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,54507,54508,54510,54512,54514],{"class":37,"line":38},[35,54509,51623],{"class":359},[35,54511,51627],{"class":51626},[35,54513,51630],{"class":48},[35,54515,51633],{"class":359},[35,54517,54518,54520,54522,54524,54526,54528],{"class":37,"line":45},[35,54519,1404],{"class":359},[35,54521,50961],{"class":51626},[35,54523,51642],{"class":48},[35,54525,544],{"class":359},[35,54527,51647],{"class":306},[35,54529,51633],{"class":359},[35,54531,54532],{"class":37,"line":55},[35,54533,141],{"emptyLinePlaceholder":140},[35,54535,54536,54538,54540],{"class":37,"line":65},[35,54537,1404],{"class":359},[35,54539,51660],{"class":51626},[35,54541,51633],{"class":359},[35,54543,54544,54546,54548,54550,54552,54554],{"class":37,"line":74},[35,54545,52470],{"class":359},[35,54547,51670],{"class":51626},[35,54549,51673],{"class":48},[35,54551,544],{"class":359},[35,54553,51678],{"class":306},[35,54555,51633],{"class":359},[35,54557,54558,54560,54562,54564,54566,54568,54570,54572,54574],{"class":37,"line":83},[35,54559,52470],{"class":359},[35,54561,51670],{"class":51626},[35,54563,15254],{"class":48},[35,54565,544],{"class":359},[35,54567,51717],{"class":306},[35,54569,51697],{"class":48},[35,54571,544],{"class":359},[35,54573,51724],{"class":306},[35,54575,51633],{"class":359},[35,54577,54578,54580,54582,54584,54586],{"class":37,"line":92},[35,54579,52470],{"class":359},[35,54581,51733],{"class":51626},[35,54583,51736],{"class":359},[35,54585,51733],{"class":51626},[35,54587,51633],{"class":359},[35,54589,54590,54592,54594],{"class":37,"line":101},[35,54591,52111],{"class":359},[35,54593,51660],{"class":51626},[35,54595,51633],{"class":359},[35,54597,54598],{"class":37,"line":110},[35,54599,141],{"emptyLinePlaceholder":140},[35,54601,54602,54604,54606],{"class":37,"line":119},[35,54603,1404],{"class":359},[35,54605,52126],{"class":51626},[35,54607,51633],{"class":359},[35,54609,54610,54612,54615,54617,54619,54621,54623,54625,54627,54630,54632,54635,54638,54640,54643],{"class":37,"line":128},[35,54611,52470],{"class":359},[35,54613,54614],{"class":51626},"textarea",[35,54616,15254],{"class":48},[35,54618,544],{"class":359},[35,54620,7986],{"class":306},[35,54622,15293],{"class":48},[35,54624,544],{"class":359},[35,54626,7986],{"class":306},[35,54628,54629],{"class":48}," cols",[35,54631,544],{"class":359},[35,54633,54634],{"class":306},"\"30\"",[35,54636,54637],{"class":48}," rows",[35,54639,544],{"class":359},[35,54641,54642],{"class":306},"\"10\"",[35,54644,51633],{"class":359},[35,54646,54647],{"class":37,"line":137},[35,54648,54649],{"class":359},"        用户注册协议\n",[35,54651,54652],{"class":37,"line":144},[35,54653,54654],{"class":359},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[35,54656,54657],{"class":37,"line":150},[35,54658,54659],{"class":359},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[35,54661,54662,54664,54666],{"class":37,"line":159},[35,54663,52102],{"class":359},[35,54665,54614],{"class":51626},[35,54667,51633],{"class":359},[35,54669,54670,54672,54674],{"class":37,"line":168},[35,54671,52470],{"class":359},[35,54673,54042],{"class":51626},[35,54675,51633],{"class":359},[35,54677,54678,54680,54682,54684,54686,54689,54691,54694,54696],{"class":37,"line":177},[35,54679,52470],{"class":359},[35,54681,54213],{"class":51626},[35,54683,53812],{"class":48},[35,54685,544],{"class":359},[35,54687,54688],{"class":306},"\"btn\"",[35,54690,54216],{"class":48},[35,54692,54693],{"class":359},">我已经阅读用户协议(5)\u003C\u002F",[35,54695,54213],{"class":51626},[35,54697,51633],{"class":359},[35,54699,54700,54702,54704],{"class":37,"line":182},[35,54701,52470],{"class":359},[35,54703,52139],{"class":51626},[35,54705,51633],{"class":359},[35,54707,54708],{"class":37,"line":188},[35,54709,54710],{"class":41},"    \u002F\u002F 1. 获取元素\n",[35,54712,54713,54715,54718,54720,54723,54726,54728,54731],{"class":37,"line":197},[35,54714,11555],{"class":495},[35,54716,54717],{"class":58}," btn",[35,54719,13898],{"class":495},[35,54721,54722],{"class":359}," document.",[35,54724,54725],{"class":48},"querySelector",[35,54727,499],{"class":359},[35,54729,54730],{"class":306},"'.btn'",[35,54732,505],{"class":359},[35,54734,54735],{"class":37,"line":206},[35,54736,54737],{"class":41},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[35,54739,54740],{"class":37,"line":215},[35,54741,54742],{"class":41},"    \u002F\u002F 2. 倒计时\n",[35,54744,54745,54747,54749,54751],{"class":37,"line":224},[35,54746,52545],{"class":495},[35,54748,9772],{"class":359},[35,54750,544],{"class":495},[35,54752,54753],{"class":58}," 5\n",[35,54755,54756],{"class":37,"line":233},[35,54757,54758],{"class":41},"    \u002F\u002F 2.1 开启定时器\n",[35,54760,54761,54763,54766,54768,54771,54773,54776],{"class":37,"line":238},[35,54762,52545],{"class":495},[35,54764,54765],{"class":359}," n ",[35,54767,544],{"class":495},[35,54769,54770],{"class":48}," setInterval",[35,54772,499],{"class":359},[35,54774,54775],{"class":495},"function",[35,54777,54778],{"class":359}," () {\n",[35,54780,54781,54784],{"class":37,"line":244},[35,54782,54783],{"class":359},"      i",[35,54785,54786],{"class":495},"--\n",[35,54788,54789,54792,54794,54797,54799],{"class":37,"line":253},[35,54790,54791],{"class":359},"      btn.innerHTML ",[35,54793,544],{"class":495},[35,54795,54796],{"class":306}," `我已经阅读用户协议(${",[35,54798,935],{"class":359},[35,54800,54801],{"class":306},"})`\n",[35,54803,54804,54807,54810,54813,54815],{"class":37,"line":262},[35,54805,54806],{"class":495},"      if",[35,54808,54809],{"class":359}," (i ",[35,54811,54812],{"class":495},"===",[35,54814,4427],{"class":58},[35,54816,12776],{"class":359},[35,54818,54819,54822,54825],{"class":37,"line":271},[35,54820,54821],{"class":48},"        clearInterval",[35,54823,54824],{"class":359},"(n)  ",[35,54826,54827],{"class":41},"\u002F\u002F 关闭定时器\n",[35,54829,54830],{"class":37,"line":280},[35,54831,54832],{"class":41},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[35,54834,54835,54838,54840],{"class":37,"line":289},[35,54836,54837],{"class":359},"        btn.disabled ",[35,54839,544],{"class":495},[35,54841,54842],{"class":58}," false\n",[35,54844,54845,54848,54850],{"class":37,"line":294},[35,54846,54847],{"class":359},"        btn.innerHTML ",[35,54849,544],{"class":495},[35,54851,54852],{"class":306}," '同意'\n",[35,54854,54855],{"class":37,"line":300},[35,54856,52724],{"class":359},[35,54858,54859,54862,54864],{"class":37,"line":313},[35,54860,54861],{"class":359},"    }, ",[35,54863,6744],{"class":58},[35,54865,505],{"class":359},[35,54867,54868],{"class":37,"line":324},[35,54869,141],{"emptyLinePlaceholder":140},[35,54871,54872,54874,54876],{"class":37,"line":2955},[35,54873,52743],{"class":359},[35,54875,52139],{"class":51626},[35,54877,51633],{"class":359},[35,54879,54880,54882,54884],{"class":37,"line":8282},[35,54881,52111],{"class":359},[35,54883,52126],{"class":51626},[35,54885,51633],{"class":359},[35,54887,54888],{"class":37,"line":8306},[35,54889,141],{"emptyLinePlaceholder":140},[35,54891,54892,54894,54896],{"class":37,"line":8311},[35,54893,52111],{"class":359},[35,54895,50961],{"class":51626},[35,54897,51633],{"class":359},[21,54899,54900],{},"不要一直想着用死循环,避免死循环",[21,54902,54903,54906],{},[32,54904,54905],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22332,54908,54910],{"id":54909},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[14,54912,54913],{},[17,54914,54915],{},"法1",[25,54917,54919],{"className":50959,"code":54918,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,54922,54923,54925,54927,54929],{"class":37,"line":38},[35,54924,51623],{"class":359},[35,54926,51627],{"class":51626},[35,54928,51630],{"class":48},[35,54930,51633],{"class":359},[35,54932,54933,54935,54937,54939,54941,54943],{"class":37,"line":45},[35,54934,1404],{"class":359},[35,54936,50961],{"class":51626},[35,54938,51642],{"class":48},[35,54940,544],{"class":359},[35,54942,51647],{"class":306},[35,54944,51633],{"class":359},[35,54946,54947],{"class":37,"line":55},[35,54948,141],{"emptyLinePlaceholder":140},[35,54950,54951,54953,54955],{"class":37,"line":65},[35,54952,1404],{"class":359},[35,54954,51660],{"class":51626},[35,54956,51633],{"class":359},[35,54958,54959,54961,54963,54965,54967,54969],{"class":37,"line":74},[35,54960,52470],{"class":359},[35,54962,51670],{"class":51626},[35,54964,51673],{"class":48},[35,54966,544],{"class":359},[35,54968,51678],{"class":306},[35,54970,51633],{"class":359},[35,54972,54973,54975,54977,54979,54981,54983,54985,54987,54989],{"class":37,"line":83},[35,54974,52470],{"class":359},[35,54976,51670],{"class":51626},[35,54978,15254],{"class":48},[35,54980,544],{"class":359},[35,54982,51717],{"class":306},[35,54984,51697],{"class":48},[35,54986,544],{"class":359},[35,54988,51724],{"class":306},[35,54990,51633],{"class":359},[35,54992,54993,54995,54997,54999,55001],{"class":37,"line":92},[35,54994,52470],{"class":359},[35,54996,51733],{"class":51626},[35,54998,51736],{"class":359},[35,55000,51733],{"class":51626},[35,55002,51633],{"class":359},[35,55004,55005,55007,55009],{"class":37,"line":101},[35,55006,52470],{"class":359},[35,55008,416],{"class":51626},[35,55010,51633],{"class":359},[35,55012,55013,55015],{"class":37,"line":110},[35,55014,6737],{"class":51626},[35,55016,15906],{"class":359},[35,55018,55019,55022,55024,55026],{"class":37,"line":119},[35,55020,55021],{"class":58},"      padding",[35,55023,51763],{"class":359},[35,55025,687],{"class":58},[35,55027,1655],{"class":359},[35,55029,55030,55033,55035,55037],{"class":37,"line":128},[35,55031,55032],{"class":58},"      margin",[35,55034,51763],{"class":359},[35,55036,687],{"class":58},[35,55038,1655],{"class":359},[35,55040,55041],{"class":37,"line":137},[35,55042,2528],{"class":359},[35,55044,55045],{"class":37,"line":144},[35,55046,141],{"emptyLinePlaceholder":140},[35,55048,55049,55052],{"class":37,"line":150},[35,55050,55051],{"class":51626},"    li",[35,55053,15906],{"class":359},[35,55055,55056,55059,55061,55064],{"class":37,"line":159},[35,55057,55058],{"class":58},"      list-style",[35,55060,51763],{"class":359},[35,55062,55063],{"class":58},"none",[35,55065,1655],{"class":359},[35,55067,55068],{"class":37,"line":168},[35,55069,2528],{"class":359},[35,55071,55072],{"class":37,"line":177},[35,55073,141],{"emptyLinePlaceholder":140},[35,55075,55076,55079],{"class":37,"line":182},[35,55077,55078],{"class":48},"    .box",[35,55080,15906],{"class":359},[35,55082,55083,55086,55088,55091],{"class":37,"line":188},[35,55084,55085],{"class":58},"      position",[35,55087,51763],{"class":359},[35,55089,55090],{"class":58},"relative",[35,55092,1655],{"class":359},[35,55094,55095,55098,55100,55103,55105],{"class":37,"line":197},[35,55096,55097],{"class":58},"      width",[35,55099,51763],{"class":359},[35,55101,55102],{"class":58},"976",[35,55104,51818],{"class":495},[35,55106,1655],{"class":359},[35,55108,55109,55112,55114,55116,55118],{"class":37,"line":206},[35,55110,55111],{"class":58},"      height",[35,55113,51763],{"class":359},[35,55115,1900],{"class":58},[35,55117,51818],{"class":495},[35,55119,1655],{"class":359},[35,55121,55122,55124,55126,55128,55130,55132],{"class":37,"line":215},[35,55123,55032],{"class":58},[35,55125,51763],{"class":359},[35,55127,807],{"class":58},[35,55129,51818],{"class":495},[35,55131,51882],{"class":58},[35,55133,1655],{"class":359},[35,55135,55136],{"class":37,"line":224},[35,55137,2528],{"class":359},[35,55139,55140],{"class":37,"line":233},[35,55141,141],{"emptyLinePlaceholder":140},[35,55143,55144,55147],{"class":37,"line":238},[35,55145,55146],{"class":48},"    .slider-footer",[35,55148,15906],{"class":359},[35,55150,55151,55153,55155,55158],{"class":37,"line":244},[35,55152,55085],{"class":58},[35,55154,51763],{"class":359},[35,55156,55157],{"class":58},"absolute",[35,55159,1655],{"class":359},[35,55161,55162,55165,55167,55169],{"class":37,"line":253},[35,55163,55164],{"class":58},"      left",[35,55166,51763],{"class":359},[35,55168,687],{"class":58},[35,55170,1655],{"class":359},[35,55172,55173,55176,55178,55180],{"class":37,"line":262},[35,55174,55175],{"class":58},"      bottom",[35,55177,51763],{"class":359},[35,55179,687],{"class":58},[35,55181,1655],{"class":359},[35,55183,55184,55186,55188,55190,55192],{"class":37,"line":271},[35,55185,55097],{"class":58},[35,55187,51763],{"class":359},[35,55189,807],{"class":58},[35,55191,823],{"class":495},[35,55193,1655],{"class":359},[35,55195,55196,55198,55200,55202,55204],{"class":37,"line":280},[35,55197,55111],{"class":58},[35,55199,51763],{"class":359},[35,55201,1069],{"class":58},[35,55203,823],{"class":495},[35,55205,1655],{"class":359},[35,55207,55208,55211,55213,55216],{"class":37,"line":289},[35,55209,55210],{"class":58},"      background-color",[35,55212,51763],{"class":359},[35,55214,55215],{"class":58},"skyblue",[35,55217,1655],{"class":359},[35,55219,55220],{"class":37,"line":294},[35,55221,2528],{"class":359},[35,55223,55224],{"class":37,"line":300},[35,55225,141],{"emptyLinePlaceholder":140},[35,55227,55228,55230,55232],{"class":37,"line":313},[35,55229,55146],{"class":48},[35,55231,7159],{"class":51626},[35,55233,15906],{"class":359},[35,55235,55236,55238,55240,55242],{"class":37,"line":324},[35,55237,55085],{"class":58},[35,55239,51763],{"class":359},[35,55241,55157],{"class":58},[35,55243,1655],{"class":359},[35,55245,55246,55249,55251,55253,55255],{"class":37,"line":2955},[35,55247,55248],{"class":58},"      font-size",[35,55250,51763],{"class":359},[35,55252,1395],{"class":58},[35,55254,51818],{"class":495},[35,55256,1655],{"class":359},[35,55258,55259,55261,55263,55265,55267],{"class":37,"line":8282},[35,55260,55164],{"class":58},[35,55262,51763],{"class":359},[35,55264,1194],{"class":58},[35,55266,51818],{"class":495},[35,55268,1655],{"class":359},[35,55270,55271,55274,55276,55278,55280],{"class":37,"line":8306},[35,55272,55273],{"class":58},"      top",[35,55275,51763],{"class":359},[35,55277,372],{"class":58},[35,55279,51818],{"class":495},[35,55281,1655],{"class":359},[35,55283,55284],{"class":37,"line":8311},[35,55285,2528],{"class":359},[35,55287,55288],{"class":37,"line":8317},[35,55289,141],{"emptyLinePlaceholder":140},[35,55291,55292,55295],{"class":37,"line":8344},[35,55293,55294],{"class":51626},"    ul",[35,55296,15906],{"class":359},[35,55298,55299,55301,55303,55305],{"class":37,"line":8349},[35,55300,55085],{"class":58},[35,55302,51763],{"class":359},[35,55304,55157],{"class":58},[35,55306,1655],{"class":359},[35,55308,55309,55311,55313,55315,55317],{"class":37,"line":8355},[35,55310,55273],{"class":58},[35,55312,51763],{"class":359},[35,55314,1275],{"class":58},[35,55316,51818],{"class":495},[35,55318,1655],{"class":359},[35,55320,55321,55323,55325,55327,55329],{"class":37,"line":8367},[35,55322,55164],{"class":58},[35,55324,51763],{"class":359},[35,55326,1194],{"class":58},[35,55328,51818],{"class":495},[35,55330,1655],{"class":359},[35,55332,55333,55336,55338,55340],{"class":37,"line":8379},[35,55334,55335],{"class":58},"      display",[35,55337,51763],{"class":359},[35,55339,51803],{"class":58},[35,55341,1655],{"class":359},[35,55343,55344,55347,55349,55351],{"class":37,"line":8391},[35,55345,55346],{"class":58},"      justify-content",[35,55348,51763],{"class":359},[35,55350,51994],{"class":58},[35,55352,1655],{"class":359},[35,55354,55355,55357,55359,55361],{"class":37,"line":10050},[35,55356,55085],{"class":58},[35,55358,51763],{"class":359},[35,55360,55157],{"class":58},[35,55362,1655],{"class":359},[35,55364,55365,55367,55369,55371,55373],{"class":37,"line":10075},[35,55366,55097],{"class":58},[35,55368,51763],{"class":359},[35,55370,4326],{"class":58},[35,55372,51818],{"class":495},[35,55374,1655],{"class":359},[35,55376,55377,55379,55381,55383,55385],{"class":37,"line":10098},[35,55378,55111],{"class":58},[35,55380,51763],{"class":359},[35,55382,1194],{"class":58},[35,55384,51818],{"class":495},[35,55386,1655],{"class":359},[35,55388,55389],{"class":37,"line":10122},[35,55390,2528],{"class":359},[35,55392,55393],{"class":37,"line":10127},[35,55394,141],{"emptyLinePlaceholder":140},[35,55396,55397,55399,55402],{"class":37,"line":10132},[35,55398,55294],{"class":51626},[35,55400,55401],{"class":51626}," li",[35,55403,15906],{"class":359},[35,55405,55406,55408,55410,55412,55414],{"class":37,"line":10137},[35,55407,55097],{"class":58},[35,55409,51763],{"class":359},[35,55411,1194],{"class":58},[35,55413,51818],{"class":495},[35,55415,1655],{"class":359},[35,55417,55418,55420,55422,55424,55426],{"class":37,"line":10146},[35,55419,55111],{"class":58},[35,55421,51763],{"class":359},[35,55423,1194],{"class":58},[35,55425,51818],{"class":495},[35,55427,1655],{"class":359},[35,55429,55430,55432,55434,55437,55439,55441,55443,55445,55447,55449,55451,55454],{"class":37,"line":10151},[35,55431,55210],{"class":58},[35,55433,51763],{"class":359},[35,55435,55436],{"class":58},"rgba",[35,55438,499],{"class":359},[35,55440,687],{"class":58},[35,55442,12769],{"class":359},[35,55444,687],{"class":58},[35,55446,12769],{"class":359},[35,55448,687],{"class":58},[35,55450,12769],{"class":359},[35,55452,55453],{"class":58},".4",[35,55455,3053],{"class":359},[35,55457,55458,55461,55463,55465,55467],{"class":37,"line":10157},[35,55459,55460],{"class":58},"      border-radius",[35,55462,51763],{"class":359},[35,55464,940],{"class":58},[35,55466,51818],{"class":495},[35,55468,1655],{"class":359},[35,55470,55471],{"class":37,"line":10178},[35,55472,2528],{"class":359},[35,55474,55475],{"class":37,"line":10184},[35,55476,141],{"emptyLinePlaceholder":140},[35,55478,55479,55482],{"class":37,"line":10198},[35,55480,55481],{"class":48},"    .activate",[35,55483,15906],{"class":359},[35,55485,55486,55488,55490,55493],{"class":37,"line":10204},[35,55487,55210],{"class":58},[35,55489,51763],{"class":359},[35,55491,55492],{"class":58},"#f7f7f7",[35,55494,1655],{"class":359},[35,55496,55497],{"class":37,"line":10231},[35,55498,2528],{"class":359},[35,55500,55501,55503,55505],{"class":37,"line":10240},[35,55502,52743],{"class":359},[35,55504,416],{"class":51626},[35,55506,51633],{"class":359},[35,55508,55509,55511,55513],{"class":37,"line":10246},[35,55510,52111],{"class":359},[35,55512,51660],{"class":51626},[35,55514,51633],{"class":359},[35,55516,55517],{"class":37,"line":10254},[35,55518,141],{"emptyLinePlaceholder":140},[35,55520,55521,55523,55525],{"class":37,"line":10259},[35,55522,1404],{"class":359},[35,55524,52126],{"class":51626},[35,55526,51633],{"class":359},[35,55528,55529,55531,55533,55535,55537,55539],{"class":37,"line":16938},[35,55530,52470],{"class":359},[35,55532,51937],{"class":51626},[35,55534,53812],{"class":48},[35,55536,544],{"class":359},[35,55538,53817],{"class":306},[35,55540,51633],{"class":359},[35,55542,55543,55545,55547,55549,55551,55554],{"class":37,"line":16944},[35,55544,51667],{"class":359},[35,55546,51937],{"class":51626},[35,55548,53812],{"class":48},[35,55550,544],{"class":359},[35,55552,55553],{"class":306},"\"slider-wrapper\"",[35,55555,51633],{"class":359},[35,55557,55558,55561,55563,55566,55568,55571,55574,55576,55578],{"class":37,"line":16967},[35,55559,55560],{"class":359},"      \u003C",[35,55562,1823],{"class":51626},[35,55564,55565],{"class":48}," src",[35,55567,544],{"class":359},[35,55569,55570],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[35,55572,55573],{"class":48}," alt",[35,55575,544],{"class":359},[35,55577,7986],{"class":306},[35,55579,51633],{"class":359},[35,55581,55582,55584,55586],{"class":37,"line":16973},[35,55583,52102],{"class":359},[35,55585,51937],{"class":51626},[35,55587,51633],{"class":359},[35,55589,55590,55592,55594,55596,55598,55601],{"class":37,"line":16996},[35,55591,51667],{"class":359},[35,55593,51937],{"class":51626},[35,55595,53812],{"class":48},[35,55597,544],{"class":359},[35,55599,55600],{"class":306},"\"slider-footer\"",[35,55602,51633],{"class":359},[35,55604,55605,55607,55609,55612,55614],{"class":37,"line":17010},[35,55606,55560],{"class":359},[35,55608,21],{"class":51626},[35,55610,55611],{"class":359},">对人类来说会不会太超前了?\u003C\u002F",[35,55613,21],{"class":51626},[35,55615,51633],{"class":359},[35,55617,55618,55620,55622],{"class":37,"line":17030},[35,55619,55560],{"class":359},[35,55621,1501],{"class":51626},[35,55623,51633],{"class":359},[35,55625,55626,55629,55631,55633,55635,55638,55641,55643],{"class":37,"line":17036},[35,55627,55628],{"class":359},"        \u003C",[35,55630,17],{"class":51626},[35,55632,53812],{"class":48},[35,55634,544],{"class":359},[35,55636,55637],{"class":306},"\"activate\"",[35,55639,55640],{"class":359},">\u003C\u002F",[35,55642,17],{"class":51626},[35,55644,51633],{"class":359},[35,55646,55647,55649,55651,55653,55655],{"class":37,"line":17047},[35,55648,55628],{"class":359},[35,55650,17],{"class":51626},[35,55652,55640],{"class":359},[35,55654,17],{"class":51626},[35,55656,51633],{"class":359},[35,55658,55659,55661,55663,55665,55667],{"class":37,"line":17070},[35,55660,55628],{"class":359},[35,55662,17],{"class":51626},[35,55664,55640],{"class":359},[35,55666,17],{"class":51626},[35,55668,51633],{"class":359},[35,55670,55671,55673,55675,55677,55679],{"class":37,"line":17092},[35,55672,55628],{"class":359},[35,55674,17],{"class":51626},[35,55676,55640],{"class":359},[35,55678,17],{"class":51626},[35,55680,51633],{"class":359},[35,55682,55683,55685,55687,55689,55691],{"class":37,"line":17097},[35,55684,55628],{"class":359},[35,55686,17],{"class":51626},[35,55688,55640],{"class":359},[35,55690,17],{"class":51626},[35,55692,51633],{"class":359},[35,55694,55695,55697,55699,55701,55703],{"class":37,"line":17103},[35,55696,55628],{"class":359},[35,55698,17],{"class":51626},[35,55700,55640],{"class":359},[35,55702,17],{"class":51626},[35,55704,51633],{"class":359},[35,55706,55707,55709,55711,55713,55715],{"class":37,"line":17117},[35,55708,55628],{"class":359},[35,55710,17],{"class":51626},[35,55712,55640],{"class":359},[35,55714,17],{"class":51626},[35,55716,51633],{"class":359},[35,55718,55719,55721,55723,55725,55727],{"class":37,"line":17130},[35,55720,55628],{"class":359},[35,55722,17],{"class":51626},[35,55724,55640],{"class":359},[35,55726,17],{"class":51626},[35,55728,51633],{"class":359},[35,55730,55731,55734,55736],{"class":37,"line":17135},[35,55732,55733],{"class":359},"      \u003C\u002F",[35,55735,1501],{"class":51626},[35,55737,51633],{"class":359},[35,55739,55740,55742,55744],{"class":37,"line":17149},[35,55741,52102],{"class":359},[35,55743,51937],{"class":51626},[35,55745,51633],{"class":359},[35,55747,55748,55750,55752],{"class":37,"line":17154},[35,55749,52743],{"class":359},[35,55751,51937],{"class":51626},[35,55753,51633],{"class":359},[35,55755,55756,55758,55760],{"class":37,"line":17160},[35,55757,52470],{"class":359},[35,55759,52139],{"class":51626},[35,55761,51633],{"class":359},[35,55763,55764,55766,55769,55771],{"class":37,"line":17165},[35,55765,11555],{"class":495},[35,55767,55768],{"class":58}," arrImage",[35,55770,13898],{"class":495},[35,55772,55773],{"class":359}," [\n",[35,55775,55776,55779,55782,55785,55788,55791,55794],{"class":37,"line":17179},[35,55777,55778],{"class":359},"      { url: ",[35,55780,55781],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[35,55783,55784],{"class":359},", title: ",[35,55786,55787],{"class":306},"'对人类来说会不会太超前了?'",[35,55789,55790],{"class":359},", color: ",[35,55792,55793],{"class":306},"'rgba(100,67,68)'",[35,55795,55796],{"class":359}," },\n",[35,55798,55799,55801,55804,55806,55809,55811,55814],{"class":37,"line":17184},[35,55800,55778],{"class":359},[35,55802,55803],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[35,55805,55784],{"class":359},[35,55807,55808],{"class":306},"'开启剑与雪的黑暗传说!'",[35,55810,55790],{"class":359},[35,55812,55813],{"class":306},"'rgba(43,35,26)'",[35,55815,55796],{"class":359},[35,55817,55818,55820,55823,55825,55828,55830,55833],{"class":37,"line":17189},[35,55819,55778],{"class":359},[35,55821,55822],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[35,55824,55784],{"class":359},[35,55826,55827],{"class":306},"'真正的jo厨出现了!'",[35,55829,55790],{"class":359},[35,55831,55832],{"class":306},"'rgba(36,31,33)'",[35,55834,55796],{"class":359},[35,55836,55837,55839,55842,55844,55847,55849,55852],{"class":37,"line":17203},[35,55838,55778],{"class":359},[35,55840,55841],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[35,55843,55784],{"class":359},[35,55845,55846],{"class":306},"'李玉刚:让世界通过b站看到东方大国文化'",[35,55848,55790],{"class":359},[35,55850,55851],{"class":306},"'rgba(139,98,66)'",[35,55853,55796],{"class":359},[35,55855,55856,55858,55861,55863,55866,55868,55871],{"class":37,"line":17215},[35,55857,55778],{"class":359},[35,55859,55860],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[35,55862,55784],{"class":359},[35,55864,55865],{"class":306},"'快来分享你的寒假日常吧'",[35,55867,55790],{"class":359},[35,55869,55870],{"class":306},"'rgba(67,90,92)'",[35,55872,55796],{"class":359},[35,55874,55875,55877,55880,55882,55885,55887,55890],{"class":37,"line":17220},[35,55876,55778],{"class":359},[35,55878,55879],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[35,55881,55784],{"class":359},[35,55883,55884],{"class":306},"'哔哩哔哩小年YEAR'",[35,55886,55790],{"class":359},[35,55888,55889],{"class":306},"'rgba(166,131,143)'",[35,55891,55796],{"class":359},[35,55893,55894,55896,55899,55901,55904,55906,55909],{"class":37,"line":17233},[35,55895,55778],{"class":359},[35,55897,55898],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[35,55900,55784],{"class":359},[35,55902,55903],{"class":306},"'一站式解决你的电脑配置问题'",[35,55905,55790],{"class":359},[35,55907,55908],{"class":306},"'rgba(53,29,25)'",[35,55910,55796],{"class":359},[35,55912,55913,55915,55918,55920,55923,55925,55928],{"class":37,"line":17238},[35,55914,55778],{"class":359},[35,55916,55917],{"class":306},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[35,55919,55784],{"class":359},[35,55921,55922],{"class":306},"'谁不想和小猫咪贴贴呢?'",[35,55924,55790],{"class":359},[35,55926,55927],{"class":306},"'rgba(99,72,114)'",[35,55929,55930],{"class":359}," }\n",[35,55932,55933],{"class":37,"line":17243},[35,55934,53435],{"class":359},[35,55936,55937,55939,55942,55944,55946,55948,55950,55953],{"class":37,"line":17248},[35,55938,11555],{"class":495},[35,55940,55941],{"class":58}," img",[35,55943,13898],{"class":495},[35,55945,54722],{"class":359},[35,55947,54725],{"class":48},[35,55949,499],{"class":359},[35,55951,55952],{"class":306},"'.slider-wrapper img'",[35,55954,505],{"class":359},[35,55956,55957,55959,55961,55963,55965,55967,55969,55972],{"class":37,"line":17261},[35,55958,11555],{"class":495},[35,55960,7159],{"class":58},[35,55962,13898],{"class":495},[35,55964,54722],{"class":359},[35,55966,54725],{"class":48},[35,55968,499],{"class":359},[35,55970,55971],{"class":306},"'.slider-footer p'",[35,55973,505],{"class":359},[35,55975,55976,55978,55981,55983,55985,55987,55989,55992],{"class":37,"line":17266},[35,55977,11555],{"class":495},[35,55979,55980],{"class":58}," color",[35,55982,13898],{"class":495},[35,55984,54722],{"class":359},[35,55986,54725],{"class":48},[35,55988,499],{"class":359},[35,55990,55991],{"class":306},"'.slider-footer'",[35,55993,505],{"class":359},[35,55995,55996,55998,56001,56003,56005,56008,56010,56013],{"class":37,"line":32959},[35,55997,11555],{"class":495},[35,55999,56000],{"class":58}," lis",[35,56002,13898],{"class":495},[35,56004,54722],{"class":359},[35,56006,56007],{"class":48},"querySelectorAll",[35,56009,499],{"class":359},[35,56011,56012],{"class":306},"'.slider-footer ul li'",[35,56014,505],{"class":359},[35,56016,56017,56019,56021,56023],{"class":37,"line":32965},[35,56018,52545],{"class":495},[35,56020,9772],{"class":359},[35,56022,544],{"class":495},[35,56024,56025],{"class":58}," 1\n",[35,56027,56028,56030,56033,56035,56037,56039,56041],{"class":37,"line":32971},[35,56029,52545],{"class":495},[35,56031,56032],{"class":359}," timer ",[35,56034,544],{"class":495},[35,56036,54770],{"class":48},[35,56038,499],{"class":359},[35,56040,54775],{"class":495},[35,56042,54778],{"class":359},[35,56044,56045,56048,56050],{"class":37,"line":32977},[35,56046,56047],{"class":359},"      img.src ",[35,56049,544],{"class":495},[35,56051,56052],{"class":359}," arrImage[i].url\n",[35,56054,56055,56058,56060],{"class":37,"line":32983},[35,56056,56057],{"class":359},"      p.innerHTML ",[35,56059,544],{"class":495},[35,56061,56062],{"class":359}," arrImage[i].title\n",[35,56064,56065,56068,56070],{"class":37,"line":32994},[35,56066,56067],{"class":359},"      color.style.backgroundColor ",[35,56069,544],{"class":495},[35,56071,56072],{"class":359}," arrImage[i].color\n",[35,56074,56075],{"class":37,"line":33000},[35,56076,56077],{"class":41},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[35,56079,56080],{"class":37,"line":33020},[35,56081,56082],{"class":41},"      \u002F\u002F li.classList.add('activate')\n",[35,56084,56085],{"class":37,"line":33026},[35,56086,56087],{"class":41},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[35,56089,56090],{"class":37,"line":33037},[35,56091,56092],{"class":41},"      \u002F\u002F lis[i].classList.remove('activate')\n",[35,56094,56095,56098,56100,56102,56105,56108,56111,56113,56116],{"class":37,"line":33043},[35,56096,56097],{"class":359},"      document.",[35,56099,54725],{"class":48},[35,56101,499],{"class":359},[35,56103,56104],{"class":306},"'.activate'",[35,56106,56107],{"class":359},")?.classList.",[35,56109,56110],{"class":48},"toggle",[35,56112,499],{"class":359},[35,56114,56115],{"class":306},"'activate'",[35,56117,505],{"class":359},[35,56119,56120,56123,56125,56127,56129],{"class":37,"line":33049},[35,56121,56122],{"class":359},"      lis[i].classList.",[35,56124,5668],{"class":48},[35,56126,499],{"class":359},[35,56128,56115],{"class":306},[35,56130,505],{"class":359},[35,56132,56133],{"class":37,"line":33055},[35,56134,141],{"emptyLinePlaceholder":140},[35,56136,56137,56140,56142,56144,56146,56148,56150,56152,56155],{"class":37,"line":33061},[35,56138,56139],{"class":359},"      i ",[35,56141,544],{"class":495},[35,56143,54809],{"class":359},[35,56145,975],{"class":495},[35,56147,25450],{"class":58},[35,56149,14048],{"class":359},[35,56151,823],{"class":495},[35,56153,56154],{"class":359}," arrImage.",[35,56156,56157],{"class":58},"length\n",[35,56159,56160],{"class":37,"line":33067},[35,56161,141],{"emptyLinePlaceholder":140},[35,56163,56164,56166,56168],{"class":37,"line":33073},[35,56165,54861],{"class":359},[35,56167,6744],{"class":58},[35,56169,505],{"class":359},[35,56171,56172,56174,56176],{"class":37,"line":33079},[35,56173,52743],{"class":359},[35,56175,52139],{"class":51626},[35,56177,51633],{"class":359},[35,56179,56180,56182,56184],{"class":37,"line":33099},[35,56181,52111],{"class":359},[35,56183,52126],{"class":51626},[35,56185,51633],{"class":359},[35,56187,56188],{"class":37,"line":33105},[35,56189,141],{"emptyLinePlaceholder":140},[35,56191,56192,56194,56196],{"class":37,"line":33121},[35,56193,52111],{"class":359},[35,56195,50961],{"class":51626},[35,56197,51633],{"class":359},[21,56199,56200],{},[1823,56201],{"alt":30,"src":56202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[21,56204,56205],{},"?.就是短路保护,确保输出正常进行",[21,56207,56208],{},"不要忘记取余%,有时候可以用",[21,56210,56211],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[14,56213,56214],{"start":45},[17,56215,56216],{},"法2",[25,56218,56220],{"className":50959,"code":56219,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,56223,56224,56226,56228,56230],{"class":37,"line":38},[35,56225,51623],{"class":359},[35,56227,51627],{"class":51626},[35,56229,51630],{"class":48},[35,56231,51633],{"class":359},[35,56233,56234,56236,56238,56240,56242,56244],{"class":37,"line":45},[35,56235,1404],{"class":359},[35,56237,50961],{"class":51626},[35,56239,51642],{"class":48},[35,56241,544],{"class":359},[35,56243,51647],{"class":306},[35,56245,51633],{"class":359},[35,56247,56248],{"class":37,"line":55},[35,56249,141],{"emptyLinePlaceholder":140},[35,56251,56252,56254,56256],{"class":37,"line":65},[35,56253,1404],{"class":359},[35,56255,51660],{"class":51626},[35,56257,51633],{"class":359},[35,56259,56260,56262,56264,56266,56268,56270],{"class":37,"line":74},[35,56261,52470],{"class":359},[35,56263,51670],{"class":51626},[35,56265,51673],{"class":48},[35,56267,544],{"class":359},[35,56269,51678],{"class":306},[35,56271,51633],{"class":359},[35,56273,56274,56276,56278,56280,56282,56284,56286,56288,56290],{"class":37,"line":83},[35,56275,52470],{"class":359},[35,56277,51670],{"class":51626},[35,56279,15254],{"class":48},[35,56281,544],{"class":359},[35,56283,51717],{"class":306},[35,56285,51697],{"class":48},[35,56287,544],{"class":359},[35,56289,51724],{"class":306},[35,56291,51633],{"class":359},[35,56293,56294,56296,56298,56300,56302],{"class":37,"line":92},[35,56295,52470],{"class":359},[35,56297,51733],{"class":51626},[35,56299,51736],{"class":359},[35,56301,51733],{"class":51626},[35,56303,51633],{"class":359},[35,56305,56306,56308,56310],{"class":37,"line":101},[35,56307,52470],{"class":359},[35,56309,416],{"class":51626},[35,56311,51633],{"class":359},[35,56313,56314,56316],{"class":37,"line":110},[35,56315,6737],{"class":51626},[35,56317,15906],{"class":359},[35,56319,56320,56322,56324,56326],{"class":37,"line":119},[35,56321,55021],{"class":58},[35,56323,51763],{"class":359},[35,56325,687],{"class":58},[35,56327,1655],{"class":359},[35,56329,56330,56332,56334,56336],{"class":37,"line":128},[35,56331,55032],{"class":58},[35,56333,51763],{"class":359},[35,56335,687],{"class":58},[35,56337,1655],{"class":359},[35,56339,56340],{"class":37,"line":137},[35,56341,2528],{"class":359},[35,56343,56344],{"class":37,"line":144},[35,56345,141],{"emptyLinePlaceholder":140},[35,56347,56348,56350],{"class":37,"line":150},[35,56349,55051],{"class":51626},[35,56351,15906],{"class":359},[35,56353,56354,56356,56358,56360],{"class":37,"line":159},[35,56355,55058],{"class":58},[35,56357,51763],{"class":359},[35,56359,55063],{"class":58},[35,56361,1655],{"class":359},[35,56363,56364],{"class":37,"line":168},[35,56365,2528],{"class":359},[35,56367,56368],{"class":37,"line":177},[35,56369,141],{"emptyLinePlaceholder":140},[35,56371,56372,56374],{"class":37,"line":182},[35,56373,55078],{"class":48},[35,56375,15906],{"class":359},[35,56377,56378,56380,56382,56384],{"class":37,"line":188},[35,56379,55085],{"class":58},[35,56381,51763],{"class":359},[35,56383,55090],{"class":58},[35,56385,1655],{"class":359},[35,56387,56388,56390,56392,56394,56396],{"class":37,"line":197},[35,56389,55097],{"class":58},[35,56391,51763],{"class":359},[35,56393,55102],{"class":58},[35,56395,51818],{"class":495},[35,56397,1655],{"class":359},[35,56399,56400,56402,56404,56406,56408],{"class":37,"line":206},[35,56401,55111],{"class":58},[35,56403,51763],{"class":359},[35,56405,1900],{"class":58},[35,56407,51818],{"class":495},[35,56409,1655],{"class":359},[35,56411,56412,56414,56416,56418,56420,56422],{"class":37,"line":215},[35,56413,55032],{"class":58},[35,56415,51763],{"class":359},[35,56417,807],{"class":58},[35,56419,51818],{"class":495},[35,56421,51882],{"class":58},[35,56423,1655],{"class":359},[35,56425,56426],{"class":37,"line":224},[35,56427,2528],{"class":359},[35,56429,56430],{"class":37,"line":233},[35,56431,141],{"emptyLinePlaceholder":140},[35,56433,56434,56436],{"class":37,"line":238},[35,56435,55146],{"class":48},[35,56437,15906],{"class":359},[35,56439,56440,56442,56444,56446],{"class":37,"line":244},[35,56441,55085],{"class":58},[35,56443,51763],{"class":359},[35,56445,55157],{"class":58},[35,56447,1655],{"class":359},[35,56449,56450,56452,56454,56456],{"class":37,"line":253},[35,56451,55164],{"class":58},[35,56453,51763],{"class":359},[35,56455,687],{"class":58},[35,56457,1655],{"class":359},[35,56459,56460,56462,56464,56466],{"class":37,"line":262},[35,56461,55175],{"class":58},[35,56463,51763],{"class":359},[35,56465,687],{"class":58},[35,56467,1655],{"class":359},[35,56469,56470,56472,56474,56476,56478],{"class":37,"line":271},[35,56471,55097],{"class":58},[35,56473,51763],{"class":359},[35,56475,807],{"class":58},[35,56477,823],{"class":495},[35,56479,1655],{"class":359},[35,56481,56482,56484,56486,56488,56490],{"class":37,"line":280},[35,56483,55111],{"class":58},[35,56485,51763],{"class":359},[35,56487,1069],{"class":58},[35,56489,823],{"class":495},[35,56491,1655],{"class":359},[35,56493,56494,56496,56498,56500],{"class":37,"line":289},[35,56495,55210],{"class":58},[35,56497,51763],{"class":359},[35,56499,55215],{"class":58},[35,56501,1655],{"class":359},[35,56503,56504],{"class":37,"line":294},[35,56505,2528],{"class":359},[35,56507,56508],{"class":37,"line":300},[35,56509,141],{"emptyLinePlaceholder":140},[35,56511,56512,56514,56516],{"class":37,"line":313},[35,56513,55146],{"class":48},[35,56515,7159],{"class":51626},[35,56517,15906],{"class":359},[35,56519,56520,56522,56524,56526],{"class":37,"line":324},[35,56521,55085],{"class":58},[35,56523,51763],{"class":359},[35,56525,55157],{"class":58},[35,56527,1655],{"class":359},[35,56529,56530,56532,56534,56536,56538],{"class":37,"line":2955},[35,56531,55248],{"class":58},[35,56533,51763],{"class":359},[35,56535,1395],{"class":58},[35,56537,51818],{"class":495},[35,56539,1655],{"class":359},[35,56541,56542,56544,56546,56548,56550],{"class":37,"line":8282},[35,56543,55164],{"class":58},[35,56545,51763],{"class":359},[35,56547,1194],{"class":58},[35,56549,51818],{"class":495},[35,56551,1655],{"class":359},[35,56553,56554,56556,56558,56560,56562],{"class":37,"line":8306},[35,56555,55273],{"class":58},[35,56557,51763],{"class":359},[35,56559,372],{"class":58},[35,56561,51818],{"class":495},[35,56563,1655],{"class":359},[35,56565,56566],{"class":37,"line":8311},[35,56567,2528],{"class":359},[35,56569,56570],{"class":37,"line":8317},[35,56571,141],{"emptyLinePlaceholder":140},[35,56573,56574,56576],{"class":37,"line":8344},[35,56575,55294],{"class":51626},[35,56577,15906],{"class":359},[35,56579,56580,56582,56584,56586],{"class":37,"line":8349},[35,56581,55085],{"class":58},[35,56583,51763],{"class":359},[35,56585,55157],{"class":58},[35,56587,1655],{"class":359},[35,56589,56590,56592,56594,56596,56598],{"class":37,"line":8355},[35,56591,55273],{"class":58},[35,56593,51763],{"class":359},[35,56595,1275],{"class":58},[35,56597,51818],{"class":495},[35,56599,1655],{"class":359},[35,56601,56602,56604,56606,56608,56610],{"class":37,"line":8367},[35,56603,55164],{"class":58},[35,56605,51763],{"class":359},[35,56607,1194],{"class":58},[35,56609,51818],{"class":495},[35,56611,1655],{"class":359},[35,56613,56614,56616,56618,56620],{"class":37,"line":8379},[35,56615,55335],{"class":58},[35,56617,51763],{"class":359},[35,56619,51803],{"class":58},[35,56621,1655],{"class":359},[35,56623,56624,56626,56628,56630],{"class":37,"line":8391},[35,56625,55346],{"class":58},[35,56627,51763],{"class":359},[35,56629,51994],{"class":58},[35,56631,1655],{"class":359},[35,56633,56634,56636,56638,56640],{"class":37,"line":10050},[35,56635,55085],{"class":58},[35,56637,51763],{"class":359},[35,56639,55157],{"class":58},[35,56641,1655],{"class":359},[35,56643,56644,56646,56648,56650,56652],{"class":37,"line":10075},[35,56645,55097],{"class":58},[35,56647,51763],{"class":359},[35,56649,4326],{"class":58},[35,56651,51818],{"class":495},[35,56653,1655],{"class":359},[35,56655,56656,56658,56660,56662,56664],{"class":37,"line":10098},[35,56657,55111],{"class":58},[35,56659,51763],{"class":359},[35,56661,1194],{"class":58},[35,56663,51818],{"class":495},[35,56665,1655],{"class":359},[35,56667,56668],{"class":37,"line":10122},[35,56669,2528],{"class":359},[35,56671,56672],{"class":37,"line":10127},[35,56673,141],{"emptyLinePlaceholder":140},[35,56675,56676,56678,56680],{"class":37,"line":10132},[35,56677,55294],{"class":51626},[35,56679,55401],{"class":51626},[35,56681,15906],{"class":359},[35,56683,56684,56686,56688,56690,56692],{"class":37,"line":10137},[35,56685,55097],{"class":58},[35,56687,51763],{"class":359},[35,56689,1194],{"class":58},[35,56691,51818],{"class":495},[35,56693,1655],{"class":359},[35,56695,56696,56698,56700,56702,56704],{"class":37,"line":10146},[35,56697,55111],{"class":58},[35,56699,51763],{"class":359},[35,56701,1194],{"class":58},[35,56703,51818],{"class":495},[35,56705,1655],{"class":359},[35,56707,56708,56710,56712,56714,56716,56718,56720,56722,56724,56726,56728,56730],{"class":37,"line":10151},[35,56709,55210],{"class":58},[35,56711,51763],{"class":359},[35,56713,55436],{"class":58},[35,56715,499],{"class":359},[35,56717,687],{"class":58},[35,56719,12769],{"class":359},[35,56721,687],{"class":58},[35,56723,12769],{"class":359},[35,56725,687],{"class":58},[35,56727,12769],{"class":359},[35,56729,55453],{"class":58},[35,56731,3053],{"class":359},[35,56733,56734,56736,56738,56740,56742],{"class":37,"line":10157},[35,56735,55460],{"class":58},[35,56737,51763],{"class":359},[35,56739,940],{"class":58},[35,56741,51818],{"class":495},[35,56743,1655],{"class":359},[35,56745,56746],{"class":37,"line":10178},[35,56747,2528],{"class":359},[35,56749,56750],{"class":37,"line":10184},[35,56751,141],{"emptyLinePlaceholder":140},[35,56753,56754,56756],{"class":37,"line":10198},[35,56755,55481],{"class":48},[35,56757,15906],{"class":359},[35,56759,56760,56762,56764,56766],{"class":37,"line":10204},[35,56761,55210],{"class":58},[35,56763,51763],{"class":359},[35,56765,55492],{"class":58},[35,56767,1655],{"class":359},[35,56769,56770],{"class":37,"line":10231},[35,56771,2528],{"class":359},[35,56773,56774,56776,56778],{"class":37,"line":10240},[35,56775,52743],{"class":359},[35,56777,416],{"class":51626},[35,56779,51633],{"class":359},[35,56781,56782,56784,56786],{"class":37,"line":10246},[35,56783,52111],{"class":359},[35,56785,51660],{"class":51626},[35,56787,51633],{"class":359},[35,56789,56790],{"class":37,"line":10254},[35,56791,141],{"emptyLinePlaceholder":140},[35,56793,56794,56796,56798],{"class":37,"line":10259},[35,56795,1404],{"class":359},[35,56797,52126],{"class":51626},[35,56799,51633],{"class":359},[35,56801,56802,56804,56806,56808,56810,56812],{"class":37,"line":16938},[35,56803,52470],{"class":359},[35,56805,51937],{"class":51626},[35,56807,53812],{"class":48},[35,56809,544],{"class":359},[35,56811,53817],{"class":306},[35,56813,51633],{"class":359},[35,56815,56816,56818,56820,56822,56824,56826],{"class":37,"line":16944},[35,56817,51667],{"class":359},[35,56819,51937],{"class":51626},[35,56821,53812],{"class":48},[35,56823,544],{"class":359},[35,56825,55553],{"class":306},[35,56827,51633],{"class":359},[35,56829,56830,56832,56834,56836,56838,56840,56842,56844,56846],{"class":37,"line":16967},[35,56831,55560],{"class":359},[35,56833,1823],{"class":51626},[35,56835,55565],{"class":48},[35,56837,544],{"class":359},[35,56839,55570],{"class":306},[35,56841,55573],{"class":48},[35,56843,544],{"class":359},[35,56845,7986],{"class":306},[35,56847,51633],{"class":359},[35,56849,56850,56852,56854],{"class":37,"line":16973},[35,56851,52102],{"class":359},[35,56853,51937],{"class":51626},[35,56855,51633],{"class":359},[35,56857,56858,56860,56862,56864,56866,56868],{"class":37,"line":16996},[35,56859,51667],{"class":359},[35,56861,51937],{"class":51626},[35,56863,53812],{"class":48},[35,56865,544],{"class":359},[35,56867,55600],{"class":306},[35,56869,51633],{"class":359},[35,56871,56872,56874,56876,56878,56880],{"class":37,"line":17010},[35,56873,55560],{"class":359},[35,56875,21],{"class":51626},[35,56877,55611],{"class":359},[35,56879,21],{"class":51626},[35,56881,51633],{"class":359},[35,56883,56884,56886,56888],{"class":37,"line":17030},[35,56885,55560],{"class":359},[35,56887,1501],{"class":51626},[35,56889,51633],{"class":359},[35,56891,56892,56894,56896,56898,56900,56902,56904,56906],{"class":37,"line":17036},[35,56893,55628],{"class":359},[35,56895,17],{"class":51626},[35,56897,53812],{"class":48},[35,56899,544],{"class":359},[35,56901,55637],{"class":306},[35,56903,55640],{"class":359},[35,56905,17],{"class":51626},[35,56907,51633],{"class":359},[35,56909,56910,56912,56914,56916,56918],{"class":37,"line":17047},[35,56911,55628],{"class":359},[35,56913,17],{"class":51626},[35,56915,55640],{"class":359},[35,56917,17],{"class":51626},[35,56919,51633],{"class":359},[35,56921,56922,56924,56926,56928,56930],{"class":37,"line":17070},[35,56923,55628],{"class":359},[35,56925,17],{"class":51626},[35,56927,55640],{"class":359},[35,56929,17],{"class":51626},[35,56931,51633],{"class":359},[35,56933,56934,56936,56938,56940,56942],{"class":37,"line":17092},[35,56935,55628],{"class":359},[35,56937,17],{"class":51626},[35,56939,55640],{"class":359},[35,56941,17],{"class":51626},[35,56943,51633],{"class":359},[35,56945,56946,56948,56950,56952,56954],{"class":37,"line":17097},[35,56947,55628],{"class":359},[35,56949,17],{"class":51626},[35,56951,55640],{"class":359},[35,56953,17],{"class":51626},[35,56955,51633],{"class":359},[35,56957,56958,56960,56962,56964,56966],{"class":37,"line":17103},[35,56959,55628],{"class":359},[35,56961,17],{"class":51626},[35,56963,55640],{"class":359},[35,56965,17],{"class":51626},[35,56967,51633],{"class":359},[35,56969,56970,56972,56974,56976,56978],{"class":37,"line":17117},[35,56971,55628],{"class":359},[35,56973,17],{"class":51626},[35,56975,55640],{"class":359},[35,56977,17],{"class":51626},[35,56979,51633],{"class":359},[35,56981,56982,56984,56986,56988,56990],{"class":37,"line":17130},[35,56983,55628],{"class":359},[35,56985,17],{"class":51626},[35,56987,55640],{"class":359},[35,56989,17],{"class":51626},[35,56991,51633],{"class":359},[35,56993,56994,56996,56998],{"class":37,"line":17135},[35,56995,55733],{"class":359},[35,56997,1501],{"class":51626},[35,56999,51633],{"class":359},[35,57001,57002,57004,57006],{"class":37,"line":17149},[35,57003,52102],{"class":359},[35,57005,51937],{"class":51626},[35,57007,51633],{"class":359},[35,57009,57010,57012,57014],{"class":37,"line":17154},[35,57011,52743],{"class":359},[35,57013,51937],{"class":51626},[35,57015,51633],{"class":359},[35,57017,57018,57020,57022],{"class":37,"line":17160},[35,57019,52470],{"class":359},[35,57021,52139],{"class":51626},[35,57023,51633],{"class":359},[35,57025,57026,57028,57031,57033],{"class":37,"line":17165},[35,57027,11555],{"class":495},[35,57029,57030],{"class":58}," sliderData",[35,57032,13898],{"class":495},[35,57034,55773],{"class":359},[35,57036,57037,57039,57041,57043,57045,57047,57049],{"class":37,"line":17179},[35,57038,55778],{"class":359},[35,57040,55781],{"class":306},[35,57042,55784],{"class":359},[35,57044,55787],{"class":306},[35,57046,55790],{"class":359},[35,57048,55793],{"class":306},[35,57050,55796],{"class":359},[35,57052,57053,57055,57057,57059,57061,57063,57065],{"class":37,"line":17184},[35,57054,55778],{"class":359},[35,57056,55803],{"class":306},[35,57058,55784],{"class":359},[35,57060,55808],{"class":306},[35,57062,55790],{"class":359},[35,57064,55813],{"class":306},[35,57066,55796],{"class":359},[35,57068,57069,57071,57073,57075,57077,57079,57081],{"class":37,"line":17189},[35,57070,55778],{"class":359},[35,57072,55822],{"class":306},[35,57074,55784],{"class":359},[35,57076,55827],{"class":306},[35,57078,55790],{"class":359},[35,57080,55832],{"class":306},[35,57082,55796],{"class":359},[35,57084,57085,57087,57089,57091,57093,57095,57097],{"class":37,"line":17203},[35,57086,55778],{"class":359},[35,57088,55841],{"class":306},[35,57090,55784],{"class":359},[35,57092,55846],{"class":306},[35,57094,55790],{"class":359},[35,57096,55851],{"class":306},[35,57098,55796],{"class":359},[35,57100,57101,57103,57105,57107,57109,57111,57113],{"class":37,"line":17215},[35,57102,55778],{"class":359},[35,57104,55860],{"class":306},[35,57106,55784],{"class":359},[35,57108,55865],{"class":306},[35,57110,55790],{"class":359},[35,57112,55870],{"class":306},[35,57114,55796],{"class":359},[35,57116,57117,57119,57121,57123,57125,57127,57129],{"class":37,"line":17220},[35,57118,55778],{"class":359},[35,57120,55879],{"class":306},[35,57122,55784],{"class":359},[35,57124,55884],{"class":306},[35,57126,55790],{"class":359},[35,57128,55889],{"class":306},[35,57130,55796],{"class":359},[35,57132,57133,57135,57137,57139,57141,57143,57145],{"class":37,"line":17233},[35,57134,55778],{"class":359},[35,57136,55898],{"class":306},[35,57138,55784],{"class":359},[35,57140,55903],{"class":306},[35,57142,55790],{"class":359},[35,57144,55908],{"class":306},[35,57146,55796],{"class":359},[35,57148,57149,57151,57153,57155,57157,57159,57161],{"class":37,"line":17238},[35,57150,55778],{"class":359},[35,57152,55917],{"class":306},[35,57154,55784],{"class":359},[35,57156,55922],{"class":306},[35,57158,55790],{"class":359},[35,57160,55927],{"class":306},[35,57162,55930],{"class":359},[35,57164,57165],{"class":37,"line":17243},[35,57166,53435],{"class":359},[35,57168,57169],{"class":37,"line":17248},[35,57170,57171],{"class":41},"    \u002F\u002F 1.获取元素\n",[35,57173,57174,57176,57178,57180,57182,57184,57186,57188],{"class":37,"line":17261},[35,57175,11555],{"class":495},[35,57177,55941],{"class":58},[35,57179,13898],{"class":495},[35,57181,54722],{"class":359},[35,57183,54725],{"class":48},[35,57185,499],{"class":359},[35,57187,55952],{"class":306},[35,57189,505],{"class":359},[35,57191,57192,57194,57196,57198,57200,57202,57204,57206],{"class":37,"line":17266},[35,57193,11555],{"class":495},[35,57195,7159],{"class":58},[35,57197,13898],{"class":495},[35,57199,54722],{"class":359},[35,57201,54725],{"class":48},[35,57203,499],{"class":359},[35,57205,55971],{"class":306},[35,57207,505],{"class":359},[35,57209,57210,57212,57214,57216],{"class":37,"line":32959},[35,57211,52545],{"class":495},[35,57213,9772],{"class":359},[35,57215,544],{"class":495},[35,57217,47659],{"class":58},[35,57219,57220],{"class":37,"line":32965},[35,57221,57222],{"class":41},"    \u002F\u002F 2.开启定时器\n",[35,57224,57225],{"class":37,"line":32971},[35,57226,57227],{"class":41},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[35,57229,57230,57233,57235,57237],{"class":37,"line":32977},[35,57231,57232],{"class":48},"    setInterval",[35,57234,499],{"class":359},[35,57236,54775],{"class":495},[35,57238,54778],{"class":359},[35,57240,57241,57243],{"class":37,"line":32983},[35,57242,54783],{"class":359},[35,57244,3036],{"class":495},[35,57246,57247,57249,57251,57253,57256,57258],{"class":37,"line":32994},[35,57248,54806],{"class":495},[35,57250,54809],{"class":359},[35,57252,2060],{"class":495},[35,57254,57255],{"class":359}," sliderData.",[35,57257,52294],{"class":58},[35,57259,12776],{"class":359},[35,57261,57262,57265,57267],{"class":37,"line":33000},[35,57263,57264],{"class":359},"        i ",[35,57266,544],{"class":495},[35,57268,47659],{"class":58},[35,57270,57271],{"class":37,"line":33020},[35,57272,52724],{"class":359},[35,57274,57275],{"class":37,"line":33026},[35,57276,57277],{"class":41},"      \u002F\u002F 更换图片路径\n",[35,57279,57280,57282,57284],{"class":37,"line":33037},[35,57281,56047],{"class":359},[35,57283,544],{"class":495},[35,57285,57286],{"class":359}," sliderData[i].url\n",[35,57288,57289],{"class":37,"line":33043},[35,57290,57291],{"class":41},"      \u002F\u002F 把文字写到p里面\n",[35,57293,57294,57296,57298],{"class":37,"line":33049},[35,57295,56057],{"class":359},[35,57297,544],{"class":495},[35,57299,57300],{"class":359}," sliderData[i].title\n",[35,57302,57303],{"class":37,"line":33055},[35,57304,57305],{"class":41},"      \u002F\u002F 小圆点\n",[35,57307,57308],{"class":37,"line":33061},[35,57309,57310],{"class":41},"      \u002F\u002F 先删除以前的active\n",[35,57312,57313],{"class":37,"line":33067},[35,57314,57315],{"class":41},"      \u002F\u002F 只让当前li添加active\n",[35,57317,57318,57320,57322,57324,57327,57330,57333,57335,57337],{"class":37,"line":33073},[35,57319,56097],{"class":359},[35,57321,54725],{"class":48},[35,57323,499],{"class":359},[35,57325,57326],{"class":306},"'.slider-footer .activate'",[35,57328,57329],{"class":359},").classList.",[35,57331,57332],{"class":48},"remove",[35,57334,499],{"class":359},[35,57336,56115],{"class":306},[35,57338,505],{"class":359},[35,57340,57341,57343,57345,57347,57350,57352,57354,57356,57359,57361,57363,57365,57367],{"class":37,"line":33079},[35,57342,56097],{"class":359},[35,57344,54725],{"class":48},[35,57346,499],{"class":359},[35,57348,57349],{"class":306},"`.slider-footer ul li:nth-child(${",[35,57351,935],{"class":359},[35,57353,45892],{"class":495},[35,57355,25450],{"class":58},[35,57357,57358],{"class":306},"})`",[35,57360,57329],{"class":359},[35,57362,5668],{"class":48},[35,57364,499],{"class":359},[35,57366,56115],{"class":306},[35,57368,505],{"class":359},[35,57370,57371],{"class":37,"line":33099},[35,57372,141],{"emptyLinePlaceholder":140},[35,57374,57375,57377,57379],{"class":37,"line":33105},[35,57376,54861],{"class":359},[35,57378,6744],{"class":58},[35,57380,505],{"class":359},[35,57382,57383],{"class":37,"line":33121},[35,57384,141],{"emptyLinePlaceholder":140},[35,57386,57387,57389,57391],{"class":37,"line":33127},[35,57388,52743],{"class":359},[35,57390,52139],{"class":51626},[35,57392,51633],{"class":359},[35,57394,57395,57397,57399],{"class":37,"line":33141},[35,57396,52111],{"class":359},[35,57398,52126],{"class":51626},[35,57400,51633],{"class":359},[35,57402,57403],{"class":37,"line":33147},[35,57404,141],{"emptyLinePlaceholder":140},[35,57406,57407,57409,57411],{"class":37,"line":33162},[35,57408,52111],{"class":359},[35,57410,50961],{"class":51626},[35,57412,51633],{"class":359},[465,57414,57416],{"id":57415},"_317-重要知识点","3.1.7 重要知识点",[21,57418,57419,57420],{},"浏览器在渲染文本时， ",[645,57421,57422],{},"没有空格或换行符就没有“断行点”",[21,57424,57425],{},[1823,57426],{"alt":30,"src":57427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[21,57429,57430],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[21,57432,57433],{},[1823,57434],{"alt":30,"src":57435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[21,57437,57438],{},[1823,57439],{"alt":30,"src":57440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[438,57442,57444],{"id":57443},"_32-dom事件基础","3.2 DOM事件基础",[465,57446,57448],{"id":57447},"_321-事件监听","3.2.1 事件监听",[21,57450,57451],{},[1823,57452],{"alt":30,"src":57453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[21,57455,57456],{},"事件监听有响应的发生",[21,57458,57459],{},[1823,57460],{"alt":30,"src":57461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[21,57463,57464],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[21,57466,57467],{},"对于有名函数,要执行的函数名后边不要加()",[465,57469,57471],{"id":57470},"_322-随机点名案例","3.2.2 随机点名案例",[25,57473,57475],{"className":50959,"code":57474,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,57478,57479,57481,57483,57485],{"class":37,"line":38},[35,57480,51623],{"class":359},[35,57482,51627],{"class":51626},[35,57484,51630],{"class":48},[35,57486,51633],{"class":359},[35,57488,57489,57491,57493,57495,57497,57499],{"class":37,"line":45},[35,57490,1404],{"class":359},[35,57492,50961],{"class":51626},[35,57494,51642],{"class":48},[35,57496,544],{"class":359},[35,57498,51647],{"class":306},[35,57500,51633],{"class":359},[35,57502,57503],{"class":37,"line":55},[35,57504,141],{"emptyLinePlaceholder":140},[35,57506,57507,57509,57511],{"class":37,"line":65},[35,57508,1404],{"class":359},[35,57510,51660],{"class":51626},[35,57512,51633],{"class":359},[35,57514,57515,57517,57519,57521,57523,57525],{"class":37,"line":74},[35,57516,52470],{"class":359},[35,57518,51670],{"class":51626},[35,57520,51673],{"class":48},[35,57522,544],{"class":359},[35,57524,51678],{"class":306},[35,57526,51633],{"class":359},[35,57528,57529,57531,57533,57535,57537,57539,57541,57543,57545],{"class":37,"line":83},[35,57530,52470],{"class":359},[35,57532,51670],{"class":51626},[35,57534,15254],{"class":48},[35,57536,544],{"class":359},[35,57538,51717],{"class":306},[35,57540,51697],{"class":48},[35,57542,544],{"class":359},[35,57544,51724],{"class":306},[35,57546,51633],{"class":359},[35,57548,57549,57551,57553,57555,57557],{"class":37,"line":92},[35,57550,52470],{"class":359},[35,57552,51733],{"class":51626},[35,57554,51736],{"class":359},[35,57556,51733],{"class":51626},[35,57558,51633],{"class":359},[35,57560,57561,57563,57565],{"class":37,"line":101},[35,57562,52470],{"class":359},[35,57564,416],{"class":51626},[35,57566,51633],{"class":359},[35,57568,57569,57571],{"class":37,"line":110},[35,57570,6737],{"class":51626},[35,57572,15906],{"class":359},[35,57574,57575,57577,57579,57581],{"class":37,"line":119},[35,57576,55032],{"class":58},[35,57578,51763],{"class":359},[35,57580,687],{"class":58},[35,57582,1655],{"class":359},[35,57584,57585,57587,57589,57591],{"class":37,"line":128},[35,57586,55021],{"class":58},[35,57588,51763],{"class":359},[35,57590,687],{"class":58},[35,57592,1655],{"class":359},[35,57594,57595],{"class":37,"line":137},[35,57596,2528],{"class":359},[35,57598,57599],{"class":37,"line":144},[35,57600,141],{"emptyLinePlaceholder":140},[35,57602,57603,57606],{"class":37,"line":150},[35,57604,57605],{"class":51626},"    h2",[35,57607,15906],{"class":359},[35,57609,57610,57613,57615,57617],{"class":37,"line":159},[35,57611,57612],{"class":58},"      text-align",[35,57614,51763],{"class":359},[35,57616,51918],{"class":58},[35,57618,1655],{"class":359},[35,57620,57621],{"class":37,"line":168},[35,57622,2528],{"class":359},[35,57624,57625],{"class":37,"line":177},[35,57626,141],{"emptyLinePlaceholder":140},[35,57628,57629,57631],{"class":37,"line":182},[35,57630,55078],{"class":48},[35,57632,15906],{"class":359},[35,57634,57635,57637,57639,57641,57643],{"class":37,"line":188},[35,57636,55097],{"class":58},[35,57638,51763],{"class":359},[35,57640,1900],{"class":58},[35,57642,51818],{"class":495},[35,57644,1655],{"class":359},[35,57646,57647,57649,57651,57653,57655,57657],{"class":37,"line":197},[35,57648,55032],{"class":58},[35,57650,51763],{"class":359},[35,57652,1150],{"class":58},[35,57654,51818],{"class":495},[35,57656,51882],{"class":58},[35,57658,1655],{"class":359},[35,57660,57661,57663,57665,57667],{"class":37,"line":206},[35,57662,55335],{"class":58},[35,57664,51763],{"class":359},[35,57666,51803],{"class":58},[35,57668,1655],{"class":359},[35,57670,57671,57673,57675,57677,57679],{"class":37,"line":215},[35,57672,55248],{"class":58},[35,57674,51763],{"class":359},[35,57676,1319],{"class":58},[35,57678,51818],{"class":495},[35,57680,1655],{"class":359},[35,57682,57683,57686,57688,57690,57692],{"class":37,"line":224},[35,57684,57685],{"class":58},"      line-height",[35,57687,51763],{"class":359},[35,57689,895],{"class":58},[35,57691,51818],{"class":495},[35,57693,1655],{"class":359},[35,57695,57696],{"class":37,"line":233},[35,57697,2528],{"class":359},[35,57699,57700],{"class":37,"line":238},[35,57701,141],{"emptyLinePlaceholder":140},[35,57703,57704,57707],{"class":37,"line":244},[35,57705,57706],{"class":48},"    .qs",[35,57708,15906],{"class":359},[35,57710,57711],{"class":37,"line":253},[35,57712,141],{"emptyLinePlaceholder":140},[35,57714,57715,57717,57719,57722,57724],{"class":37,"line":262},[35,57716,55097],{"class":58},[35,57718,51763],{"class":359},[35,57720,57721],{"class":58},"450",[35,57723,51818],{"class":495},[35,57725,1655],{"class":359},[35,57727,57728,57730,57732,57734,57736],{"class":37,"line":271},[35,57729,55111],{"class":58},[35,57731,51763],{"class":359},[35,57733,895],{"class":58},[35,57735,51818],{"class":495},[35,57737,1655],{"class":359},[35,57739,57740,57743,57745,57748],{"class":37,"line":280},[35,57741,57742],{"class":58},"      color",[35,57744,51763],{"class":359},[35,57746,57747],{"class":58},"red",[35,57749,1655],{"class":359},[35,57751,57752],{"class":37,"line":289},[35,57753,141],{"emptyLinePlaceholder":140},[35,57755,57756],{"class":37,"line":294},[35,57757,2528],{"class":359},[35,57759,57760],{"class":37,"line":300},[35,57761,141],{"emptyLinePlaceholder":140},[35,57763,57764,57767],{"class":37,"line":313},[35,57765,57766],{"class":48},"    .btns",[35,57768,15906],{"class":359},[35,57770,57771,57773,57775,57777],{"class":37,"line":324},[35,57772,57612],{"class":58},[35,57774,51763],{"class":359},[35,57776,51918],{"class":58},[35,57778,1655],{"class":359},[35,57780,57781],{"class":37,"line":2955},[35,57782,2528],{"class":359},[35,57784,57785],{"class":37,"line":8282},[35,57786,141],{"emptyLinePlaceholder":140},[35,57788,57789,57791,57794],{"class":37,"line":8306},[35,57790,57766],{"class":48},[35,57792,57793],{"class":51626}," button",[35,57795,15906],{"class":359},[35,57797,57798,57800,57802,57804,57806],{"class":37,"line":8311},[35,57799,55097],{"class":58},[35,57801,51763],{"class":359},[35,57803,1311],{"class":58},[35,57805,51818],{"class":495},[35,57807,1655],{"class":359},[35,57809,57810,57812,57814,57816,57818],{"class":37,"line":8317},[35,57811,55111],{"class":58},[35,57813,51763],{"class":359},[35,57815,769],{"class":58},[35,57817,51818],{"class":495},[35,57819,1655],{"class":359},[35,57821,57822,57824,57826,57828,57831,57833],{"class":37,"line":8344},[35,57823,55032],{"class":58},[35,57825,51763],{"class":359},[35,57827,687],{"class":58},[35,57829,57830],{"class":58}," 50",[35,57832,51818],{"class":495},[35,57834,1655],{"class":359},[35,57836,57837],{"class":37,"line":8349},[35,57838,2528],{"class":359},[35,57840,57841,57843,57845],{"class":37,"line":8355},[35,57842,52743],{"class":359},[35,57844,416],{"class":51626},[35,57846,51633],{"class":359},[35,57848,57849,57851,57853],{"class":37,"line":8367},[35,57850,52111],{"class":359},[35,57852,51660],{"class":51626},[35,57854,51633],{"class":359},[35,57856,57857],{"class":37,"line":8379},[35,57858,141],{"emptyLinePlaceholder":140},[35,57860,57861,57863,57865],{"class":37,"line":8391},[35,57862,1404],{"class":359},[35,57864,52126],{"class":51626},[35,57866,51633],{"class":359},[35,57868,57869,57871,57873,57876,57878],{"class":37,"line":10050},[35,57870,52470],{"class":359},[35,57872,438],{"class":51626},[35,57874,57875],{"class":359},">随机点名\u003C\u002F",[35,57877,438],{"class":51626},[35,57879,51633],{"class":359},[35,57881,57882,57884,57886,57888,57890,57892],{"class":37,"line":10075},[35,57883,52470],{"class":359},[35,57885,51937],{"class":51626},[35,57887,53812],{"class":48},[35,57889,544],{"class":359},[35,57891,53817],{"class":306},[35,57893,51633],{"class":359},[35,57895,57896,57898,57900,57903,57905],{"class":37,"line":10098},[35,57897,51667],{"class":359},[35,57899,35],{"class":51626},[35,57901,57902],{"class":359},">名字是：\u003C\u002F",[35,57904,35],{"class":51626},[35,57906,51633],{"class":359},[35,57908,57909,57911,57913,57915,57917,57920,57923,57925],{"class":37,"line":10122},[35,57910,51667],{"class":359},[35,57912,51937],{"class":51626},[35,57914,53812],{"class":48},[35,57916,544],{"class":359},[35,57918,57919],{"class":306},"\"qs\"",[35,57921,57922],{"class":359},">这里显示姓名\u003C\u002F",[35,57924,51937],{"class":51626},[35,57926,51633],{"class":359},[35,57928,57929,57931,57933],{"class":37,"line":10127},[35,57930,52743],{"class":359},[35,57932,51937],{"class":51626},[35,57934,51633],{"class":359},[35,57936,57937,57939,57941,57943,57945,57948],{"class":37,"line":10132},[35,57938,52470],{"class":359},[35,57940,51937],{"class":51626},[35,57942,53812],{"class":48},[35,57944,544],{"class":359},[35,57946,57947],{"class":306},"\"btns\"",[35,57949,51633],{"class":359},[35,57951,57952,57954,57956,57958,57960,57963,57966,57968],{"class":37,"line":10137},[35,57953,51667],{"class":359},[35,57955,54213],{"class":51626},[35,57957,53812],{"class":48},[35,57959,544],{"class":359},[35,57961,57962],{"class":306},"\"start\"",[35,57964,57965],{"class":359},">开始\u003C\u002F",[35,57967,54213],{"class":51626},[35,57969,51633],{"class":359},[35,57971,57972,57974,57976,57978,57980,57983,57986,57988],{"class":37,"line":10146},[35,57973,51667],{"class":359},[35,57975,54213],{"class":51626},[35,57977,53812],{"class":48},[35,57979,544],{"class":359},[35,57981,57982],{"class":306},"\"end\"",[35,57984,57985],{"class":359},">结束\u003C\u002F",[35,57987,54213],{"class":51626},[35,57989,51633],{"class":359},[35,57991,57992,57994,57996],{"class":37,"line":10151},[35,57993,52743],{"class":359},[35,57995,51937],{"class":51626},[35,57997,51633],{"class":359},[35,57999,58000],{"class":37,"line":10157},[35,58001,141],{"emptyLinePlaceholder":140},[35,58003,58004,58006,58008],{"class":37,"line":10178},[35,58005,52470],{"class":359},[35,58007,52139],{"class":51626},[35,58009,51633],{"class":359},[35,58011,58012],{"class":37,"line":10184},[35,58013,58014],{"class":41},"    \u002F\u002F 数据数组\n",[35,58016,58017,58019,58022,58024,58026,58029,58031,58034,58036,58039,58041,58044,58046,58049],{"class":37,"line":10198},[35,58018,11555],{"class":495},[35,58020,58021],{"class":58}," arr",[35,58023,13898],{"class":495},[35,58025,52552],{"class":359},[35,58027,58028],{"class":306},"'马超'",[35,58030,12769],{"class":359},[35,58032,58033],{"class":306},"'黄忠'",[35,58035,12769],{"class":359},[35,58037,58038],{"class":306},"'赵云'",[35,58040,12769],{"class":359},[35,58042,58043],{"class":306},"'关羽'",[35,58045,12769],{"class":359},[35,58047,58048],{"class":306},"'张飞'",[35,58050,33572],{"class":359},[35,58052,58053,58055,58058,58060,58062,58064,58066,58069],{"class":37,"line":10204},[35,58054,11555],{"class":495},[35,58056,58057],{"class":58}," qs",[35,58059,13898],{"class":495},[35,58061,54722],{"class":359},[35,58063,54725],{"class":48},[35,58065,499],{"class":359},[35,58067,58068],{"class":306},"'.qs'",[35,58070,505],{"class":359},[35,58072,58073],{"class":37,"line":10231},[35,58074,58075],{"class":41},"    \u002F\u002F 1.业务1.开始按钮模块\n",[35,58077,58078,58080,58082,58084,58086,58088,58090,58093],{"class":37,"line":10240},[35,58079,11555],{"class":495},[35,58081,4518],{"class":58},[35,58083,13898],{"class":495},[35,58085,54722],{"class":359},[35,58087,54725],{"class":48},[35,58089,499],{"class":359},[35,58091,58092],{"class":306},"'.start'",[35,58094,505],{"class":359},[35,58096,58097],{"class":37,"line":10246},[35,58098,58099],{"class":41},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[35,58101,58102,58104,58107,58109],{"class":37,"line":10254},[35,58103,52545],{"class":495},[35,58105,58106],{"class":359}," timerId ",[35,58108,544],{"class":495},[35,58110,47659],{"class":58},[35,58112,58113],{"class":37,"line":10259},[35,58114,58115],{"class":41},"    \u002F\u002F 随机号要全局变量\n",[35,58117,58118,58120,58123,58125],{"class":37,"line":16938},[35,58119,52545],{"class":495},[35,58121,58122],{"class":359}," random ",[35,58124,544],{"class":495},[35,58126,47659],{"class":58},[35,58128,58129],{"class":37,"line":16944},[35,58130,58131],{"class":41},"    \u002F\u002F 1.1 添加点击事件\n",[35,58133,58134,58137,58140,58142,58145,58147,58149],{"class":37,"line":16967},[35,58135,58136],{"class":359},"    start.",[35,58138,58139],{"class":48},"addEventListener",[35,58141,499],{"class":359},[35,58143,58144],{"class":306},"'click'",[35,58146,12769],{"class":359},[35,58148,54775],{"class":495},[35,58150,54778],{"class":359},[35,58152,58153,58156,58158,58160,58162,58164],{"class":37,"line":16973},[35,58154,58155],{"class":359},"      timerId ",[35,58157,544],{"class":495},[35,58159,54770],{"class":48},[35,58161,499],{"class":359},[35,58163,54775],{"class":495},[35,58165,54778],{"class":359},[35,58167,58168],{"class":37,"line":16996},[35,58169,58170],{"class":41},"        \u002F\u002F 随机数\n",[35,58172,58173,58176,58178,58181,58184,58187,58189,58191,58193,58195],{"class":37,"line":17010},[35,58174,58175],{"class":359},"        random ",[35,58177,544],{"class":495},[35,58179,58180],{"class":48}," parseInt",[35,58182,58183],{"class":359},"(Math.",[35,58185,58186],{"class":48},"random",[35,58188,13384],{"class":359},[35,58190,949],{"class":495},[35,58192,52291],{"class":359},[35,58194,52294],{"class":58},[35,58196,505],{"class":359},[35,58198,58199,58202,58204],{"class":37,"line":17030},[35,58200,58201],{"class":359},"        qs.innerHTML ",[35,58203,544],{"class":495},[35,58205,58206],{"class":359}," arr[random]\n",[35,58208,58209,58212,58214],{"class":37,"line":17036},[35,58210,58211],{"class":359},"      }, ",[35,58213,769],{"class":58},[35,58215,505],{"class":359},[35,58217,58218],{"class":37,"line":17047},[35,58219,58220],{"class":41},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[35,58222,58223,58225,58228,58230,58233,58235],{"class":37,"line":17070},[35,58224,54806],{"class":495},[35,58226,58227],{"class":359}," (arr.",[35,58229,52294],{"class":58},[35,58231,58232],{"class":495}," ===",[35,58234,25450],{"class":58},[35,58236,12776],{"class":359},[35,58238,58239],{"class":37,"line":17092},[35,58240,58241],{"class":41},"        \u002F\u002F start.disabled = true\n",[35,58243,58244],{"class":37,"line":17097},[35,58245,58246],{"class":41},"        \u002F\u002F end.disabled = true\n",[35,58248,58249],{"class":37,"line":17103},[35,58250,58251],{"class":41},"        \u002F\u002F 可以合起来写\n",[35,58253,58254,58257,58259,58262,58264],{"class":37,"line":17117},[35,58255,58256],{"class":359},"        start.disabled ",[35,58258,544],{"class":495},[35,58260,58261],{"class":359}," end.disabled ",[35,58263,544],{"class":495},[35,58265,58266],{"class":58}," true\n",[35,58268,58269],{"class":37,"line":17130},[35,58270,52724],{"class":359},[35,58272,58273],{"class":37,"line":17135},[35,58274,33787],{"class":359},[35,58276,58277],{"class":37,"line":17149},[35,58278,58279],{"class":41},"    \u002F\u002F 1.2 关闭按钮模块\n",[35,58281,58282,58284,58286,58288,58290,58292,58294,58297],{"class":37,"line":17154},[35,58283,11555],{"class":495},[35,58285,4534],{"class":58},[35,58287,13898],{"class":495},[35,58289,54722],{"class":359},[35,58291,54725],{"class":48},[35,58293,499],{"class":359},[35,58295,58296],{"class":306},"'.end'",[35,58298,505],{"class":359},[35,58300,58301,58304,58306,58308,58310,58312,58314],{"class":37,"line":17160},[35,58302,58303],{"class":359},"    end.",[35,58305,58139],{"class":48},[35,58307,499],{"class":359},[35,58309,58144],{"class":306},[35,58311,12769],{"class":359},[35,58313,54775],{"class":495},[35,58315,54778],{"class":359},[35,58317,58318,58321],{"class":37,"line":17165},[35,58319,58320],{"class":48},"      clearInterval",[35,58322,58323],{"class":359},"(timerId)\n",[35,58325,58326],{"class":37,"line":17179},[35,58327,58328],{"class":41},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[35,58330,58331,58334,58337,58340,58342],{"class":37,"line":17184},[35,58332,58333],{"class":359},"      arr.",[35,58335,58336],{"class":48},"splice",[35,58338,58339],{"class":359},"(random, ",[35,58341,713],{"class":58},[35,58343,505],{"class":359},[35,58345,58346],{"class":37,"line":17189},[35,58347,33787],{"class":359},[35,58349,58350],{"class":37,"line":17203},[35,58351,141],{"emptyLinePlaceholder":140},[35,58353,58354,58356,58358],{"class":37,"line":17215},[35,58355,52743],{"class":359},[35,58357,52139],{"class":51626},[35,58359,51633],{"class":359},[35,58361,58362,58364,58366],{"class":37,"line":17220},[35,58363,52111],{"class":359},[35,58365,52126],{"class":51626},[35,58367,51633],{"class":359},[35,58369,58370],{"class":37,"line":17233},[35,58371,141],{"emptyLinePlaceholder":140},[35,58373,58374,58376,58378],{"class":37,"line":17238},[35,58375,52111],{"class":359},[35,58377,50961],{"class":51626},[35,58379,51633],{"class":359},[21,58381,58382],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[465,58384,58386],{"id":58385},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[25,58388,58390],{"className":50959,"code":58389,"language":50961,"meta":30,"style":30},"\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",[32,58391,58392,58402,58416,58420,58428,58442,58462,58474,58482,58486,58494,58506,58514,58533,58550,58566,58576,58580,58588,58596,58600],{"__ignoreMap":30},[35,58393,58394,58396,58398,58400],{"class":37,"line":38},[35,58395,51623],{"class":359},[35,58397,51627],{"class":51626},[35,58399,51630],{"class":48},[35,58401,51633],{"class":359},[35,58403,58404,58406,58408,58410,58412,58414],{"class":37,"line":45},[35,58405,1404],{"class":359},[35,58407,50961],{"class":51626},[35,58409,51642],{"class":48},[35,58411,544],{"class":359},[35,58413,51647],{"class":306},[35,58415,51633],{"class":359},[35,58417,58418],{"class":37,"line":55},[35,58419,141],{"emptyLinePlaceholder":140},[35,58421,58422,58424,58426],{"class":37,"line":65},[35,58423,1404],{"class":359},[35,58425,51660],{"class":51626},[35,58427,51633],{"class":359},[35,58429,58430,58432,58434,58436,58438,58440],{"class":37,"line":74},[35,58431,52470],{"class":359},[35,58433,51670],{"class":51626},[35,58435,51673],{"class":48},[35,58437,544],{"class":359},[35,58439,51678],{"class":306},[35,58441,51633],{"class":359},[35,58443,58444,58446,58448,58450,58452,58454,58456,58458,58460],{"class":37,"line":83},[35,58445,52470],{"class":359},[35,58447,51670],{"class":51626},[35,58449,15254],{"class":48},[35,58451,544],{"class":359},[35,58453,51717],{"class":306},[35,58455,51697],{"class":48},[35,58457,544],{"class":359},[35,58459,51724],{"class":306},[35,58461,51633],{"class":359},[35,58463,58464,58466,58468,58470,58472],{"class":37,"line":92},[35,58465,52470],{"class":359},[35,58467,51733],{"class":51626},[35,58469,51736],{"class":359},[35,58471,51733],{"class":51626},[35,58473,51633],{"class":359},[35,58475,58476,58478,58480],{"class":37,"line":101},[35,58477,52111],{"class":359},[35,58479,51660],{"class":51626},[35,58481,51633],{"class":359},[35,58483,58484],{"class":37,"line":110},[35,58485,141],{"emptyLinePlaceholder":140},[35,58487,58488,58490,58492],{"class":37,"line":119},[35,58489,1404],{"class":359},[35,58491,52126],{"class":51626},[35,58493,51633],{"class":359},[35,58495,58496,58498,58500,58502,58504],{"class":37,"line":128},[35,58497,52470],{"class":359},[35,58499,54213],{"class":51626},[35,58501,54219],{"class":359},[35,58503,54213],{"class":51626},[35,58505,51633],{"class":359},[35,58507,58508,58510,58512],{"class":37,"line":137},[35,58509,52470],{"class":359},[35,58511,52139],{"class":51626},[35,58513,51633],{"class":359},[35,58515,58516,58518,58520,58522,58524,58526,58528,58531],{"class":37,"line":144},[35,58517,11555],{"class":495},[35,58519,54717],{"class":58},[35,58521,13898],{"class":495},[35,58523,54722],{"class":359},[35,58525,54725],{"class":48},[35,58527,499],{"class":359},[35,58529,58530],{"class":306},"'button'",[35,58532,505],{"class":359},[35,58534,58535,58538,58540,58542,58544,58546,58548],{"class":37,"line":150},[35,58536,58537],{"class":359},"    btn.",[35,58539,58139],{"class":48},[35,58541,499],{"class":359},[35,58543,58144],{"class":306},[35,58545,12769],{"class":359},[35,58547,54775],{"class":495},[35,58549,54778],{"class":359},[35,58551,58552,58555,58557,58559,58562,58564],{"class":37,"line":159},[35,58553,58554],{"class":495},"      const",[35,58556,2581],{"class":58},[35,58558,13898],{"class":495},[35,58560,58561],{"class":359}," Math.",[35,58563,58186],{"class":48},[35,58565,2317],{"class":359},[35,58567,58568,58571,58574],{"class":37,"line":168},[35,58569,58570],{"class":359},"      console.",[35,58572,58573],{"class":48},"log",[35,58575,512],{"class":359},[35,58577,58578],{"class":37,"line":177},[35,58579,33787],{"class":359},[35,58581,58582,58584,58586],{"class":37,"line":182},[35,58583,52743],{"class":359},[35,58585,52139],{"class":51626},[35,58587,51633],{"class":359},[35,58589,58590,58592,58594],{"class":37,"line":188},[35,58591,52111],{"class":359},[35,58593,52126],{"class":51626},[35,58595,51633],{"class":359},[35,58597,58598],{"class":37,"line":197},[35,58599,141],{"emptyLinePlaceholder":140},[35,58601,58602,58604,58606],{"class":37,"line":206},[35,58603,52111],{"class":359},[35,58605,50961],{"class":51626},[35,58607,51633],{"class":359},[21,58609,58610],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[21,58612,58613],{},"常量不可以重新赋值",[21,58615,58616],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[25,58618,58620],{"className":50959,"code":58619,"language":50961,"meta":30,"style":30},"\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",[32,58621,58622,58632,58646,58650,58658,58672,58692,58704,58712,58716,58724,58736,58744,58755,58773,58789,58803,58811,58815,58823,58831,58835],{"__ignoreMap":30},[35,58623,58624,58626,58628,58630],{"class":37,"line":38},[35,58625,51623],{"class":359},[35,58627,51627],{"class":51626},[35,58629,51630],{"class":48},[35,58631,51633],{"class":359},[35,58633,58634,58636,58638,58640,58642,58644],{"class":37,"line":45},[35,58635,1404],{"class":359},[35,58637,50961],{"class":51626},[35,58639,51642],{"class":48},[35,58641,544],{"class":359},[35,58643,51647],{"class":306},[35,58645,51633],{"class":359},[35,58647,58648],{"class":37,"line":55},[35,58649,141],{"emptyLinePlaceholder":140},[35,58651,58652,58654,58656],{"class":37,"line":65},[35,58653,1404],{"class":359},[35,58655,51660],{"class":51626},[35,58657,51633],{"class":359},[35,58659,58660,58662,58664,58666,58668,58670],{"class":37,"line":74},[35,58661,52470],{"class":359},[35,58663,51670],{"class":51626},[35,58665,51673],{"class":48},[35,58667,544],{"class":359},[35,58669,51678],{"class":306},[35,58671,51633],{"class":359},[35,58673,58674,58676,58678,58680,58682,58684,58686,58688,58690],{"class":37,"line":83},[35,58675,52470],{"class":359},[35,58677,51670],{"class":51626},[35,58679,15254],{"class":48},[35,58681,544],{"class":359},[35,58683,51717],{"class":306},[35,58685,51697],{"class":48},[35,58687,544],{"class":359},[35,58689,51724],{"class":306},[35,58691,51633],{"class":359},[35,58693,58694,58696,58698,58700,58702],{"class":37,"line":92},[35,58695,52470],{"class":359},[35,58697,51733],{"class":51626},[35,58699,51736],{"class":359},[35,58701,51733],{"class":51626},[35,58703,51633],{"class":359},[35,58705,58706,58708,58710],{"class":37,"line":101},[35,58707,52111],{"class":359},[35,58709,51660],{"class":51626},[35,58711,51633],{"class":359},[35,58713,58714],{"class":37,"line":110},[35,58715,141],{"emptyLinePlaceholder":140},[35,58717,58718,58720,58722],{"class":37,"line":119},[35,58719,1404],{"class":359},[35,58721,52126],{"class":51626},[35,58723,51633],{"class":359},[35,58725,58726,58728,58730,58732,58734],{"class":37,"line":128},[35,58727,52470],{"class":359},[35,58729,54213],{"class":51626},[35,58731,54219],{"class":359},[35,58733,54213],{"class":51626},[35,58735,51633],{"class":359},[35,58737,58738,58740,58742],{"class":37,"line":137},[35,58739,52470],{"class":359},[35,58741,52139],{"class":51626},[35,58743,51633],{"class":359},[35,58745,58746,58748,58750,58752],{"class":37,"line":144},[35,58747,11555],{"class":495},[35,58749,2581],{"class":58},[35,58751,13898],{"class":495},[35,58753,58754],{"class":58}," 10\n",[35,58756,58757,58759,58761,58763,58765,58767,58769,58771],{"class":37,"line":150},[35,58758,11555],{"class":495},[35,58760,54717],{"class":58},[35,58762,13898],{"class":495},[35,58764,54722],{"class":359},[35,58766,54725],{"class":48},[35,58768,499],{"class":359},[35,58770,58530],{"class":306},[35,58772,505],{"class":359},[35,58774,58775,58777,58779,58781,58783,58785,58787],{"class":37,"line":159},[35,58776,58537],{"class":359},[35,58778,58139],{"class":48},[35,58780,499],{"class":359},[35,58782,58144],{"class":306},[35,58784,12769],{"class":359},[35,58786,54775],{"class":495},[35,58788,54778],{"class":359},[35,58790,58791,58793,58795,58797,58799,58801],{"class":37,"line":168},[35,58792,58554],{"class":495},[35,58794,2581],{"class":58},[35,58796,13898],{"class":495},[35,58798,58561],{"class":359},[35,58800,58186],{"class":48},[35,58802,2317],{"class":359},[35,58804,58805,58807,58809],{"class":37,"line":177},[35,58806,58570],{"class":359},[35,58808,58573],{"class":48},[35,58810,512],{"class":359},[35,58812,58813],{"class":37,"line":182},[35,58814,33787],{"class":359},[35,58816,58817,58819,58821],{"class":37,"line":188},[35,58818,52743],{"class":359},[35,58820,52139],{"class":51626},[35,58822,51633],{"class":359},[35,58824,58825,58827,58829],{"class":37,"line":197},[35,58826,52111],{"class":359},[35,58828,52126],{"class":51626},[35,58830,51633],{"class":359},[35,58832,58833],{"class":37,"line":206},[35,58834,141],{"emptyLinePlaceholder":140},[35,58836,58837,58839,58841],{"class":37,"line":215},[35,58838,52111],{"class":359},[35,58840,50961],{"class":51626},[35,58842,51633],{"class":359},[21,58844,58845],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[25,58847,58849],{"className":50959,"code":58848,"language":50961,"meta":30,"style":30},"\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",[32,58850,58851,58861,58875,58879,58887,58901,58921,58933,58941,58945,58953,58965,58973,58983,59001,59017,59030,59038,59042,59050,59058,59062],{"__ignoreMap":30},[35,58852,58853,58855,58857,58859],{"class":37,"line":38},[35,58854,51623],{"class":359},[35,58856,51627],{"class":51626},[35,58858,51630],{"class":48},[35,58860,51633],{"class":359},[35,58862,58863,58865,58867,58869,58871,58873],{"class":37,"line":45},[35,58864,1404],{"class":359},[35,58866,50961],{"class":51626},[35,58868,51642],{"class":48},[35,58870,544],{"class":359},[35,58872,51647],{"class":306},[35,58874,51633],{"class":359},[35,58876,58877],{"class":37,"line":55},[35,58878,141],{"emptyLinePlaceholder":140},[35,58880,58881,58883,58885],{"class":37,"line":65},[35,58882,1404],{"class":359},[35,58884,51660],{"class":51626},[35,58886,51633],{"class":359},[35,58888,58889,58891,58893,58895,58897,58899],{"class":37,"line":74},[35,58890,52470],{"class":359},[35,58892,51670],{"class":51626},[35,58894,51673],{"class":48},[35,58896,544],{"class":359},[35,58898,51678],{"class":306},[35,58900,51633],{"class":359},[35,58902,58903,58905,58907,58909,58911,58913,58915,58917,58919],{"class":37,"line":83},[35,58904,52470],{"class":359},[35,58906,51670],{"class":51626},[35,58908,15254],{"class":48},[35,58910,544],{"class":359},[35,58912,51717],{"class":306},[35,58914,51697],{"class":48},[35,58916,544],{"class":359},[35,58918,51724],{"class":306},[35,58920,51633],{"class":359},[35,58922,58923,58925,58927,58929,58931],{"class":37,"line":92},[35,58924,52470],{"class":359},[35,58926,51733],{"class":51626},[35,58928,51736],{"class":359},[35,58930,51733],{"class":51626},[35,58932,51633],{"class":359},[35,58934,58935,58937,58939],{"class":37,"line":101},[35,58936,52111],{"class":359},[35,58938,51660],{"class":51626},[35,58940,51633],{"class":359},[35,58942,58943],{"class":37,"line":110},[35,58944,141],{"emptyLinePlaceholder":140},[35,58946,58947,58949,58951],{"class":37,"line":119},[35,58948,1404],{"class":359},[35,58950,52126],{"class":51626},[35,58952,51633],{"class":359},[35,58954,58955,58957,58959,58961,58963],{"class":37,"line":128},[35,58956,52470],{"class":359},[35,58958,54213],{"class":51626},[35,58960,54219],{"class":359},[35,58962,54213],{"class":51626},[35,58964,51633],{"class":359},[35,58966,58967,58969,58971],{"class":37,"line":137},[35,58968,52470],{"class":359},[35,58970,52139],{"class":51626},[35,58972,51633],{"class":359},[35,58974,58975,58977,58979,58981],{"class":37,"line":144},[35,58976,11555],{"class":495},[35,58978,2581],{"class":58},[35,58980,13898],{"class":495},[35,58982,58754],{"class":58},[35,58984,58985,58987,58989,58991,58993,58995,58997,58999],{"class":37,"line":150},[35,58986,11555],{"class":495},[35,58988,54717],{"class":58},[35,58990,13898],{"class":495},[35,58992,54722],{"class":359},[35,58994,54725],{"class":48},[35,58996,499],{"class":359},[35,58998,58530],{"class":306},[35,59000,505],{"class":359},[35,59002,59003,59005,59007,59009,59011,59013,59015],{"class":37,"line":159},[35,59004,58537],{"class":359},[35,59006,58139],{"class":48},[35,59008,499],{"class":359},[35,59010,58144],{"class":306},[35,59012,12769],{"class":359},[35,59014,54775],{"class":495},[35,59016,54778],{"class":359},[35,59018,59019,59022,59024,59026,59028],{"class":37,"line":168},[35,59020,59021],{"class":359},"      num ",[35,59023,544],{"class":495},[35,59025,58561],{"class":359},[35,59027,58186],{"class":48},[35,59029,2317],{"class":359},[35,59031,59032,59034,59036],{"class":37,"line":177},[35,59033,58570],{"class":359},[35,59035,58573],{"class":48},[35,59037,512],{"class":359},[35,59039,59040],{"class":37,"line":182},[35,59041,33787],{"class":359},[35,59043,59044,59046,59048],{"class":37,"line":188},[35,59045,52743],{"class":359},[35,59047,52139],{"class":51626},[35,59049,51633],{"class":359},[35,59051,59052,59054,59056],{"class":37,"line":197},[35,59053,52111],{"class":359},[35,59055,52126],{"class":51626},[35,59057,51633],{"class":359},[35,59059,59060],{"class":37,"line":206},[35,59061,141],{"emptyLinePlaceholder":140},[35,59063,59064,59066,59068],{"class":37,"line":215},[35,59065,52111],{"class":359},[35,59067,50961],{"class":51626},[35,59069,51633],{"class":359},[21,59071,59072],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[465,59074,59076],{"id":59075},"_324-事件监听版本","3.2.4 事件监听版本",[21,59078,59079],{},[1823,59080],{"alt":30,"src":59081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[21,59083,59084],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[21,59086,59087],{},"这种方式会覆盖前边的事件监听:",[25,59089,59091],{"className":50959,"code":59090,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,59094,59095,59097,59099,59101],{"class":37,"line":38},[35,59096,51623],{"class":359},[35,59098,51627],{"class":51626},[35,59100,51630],{"class":48},[35,59102,51633],{"class":359},[35,59104,59105,59107,59109,59111,59113,59115],{"class":37,"line":45},[35,59106,1404],{"class":359},[35,59108,50961],{"class":51626},[35,59110,51642],{"class":48},[35,59112,544],{"class":359},[35,59114,51647],{"class":306},[35,59116,51633],{"class":359},[35,59118,59119],{"class":37,"line":55},[35,59120,141],{"emptyLinePlaceholder":140},[35,59122,59123,59125,59127],{"class":37,"line":65},[35,59124,1404],{"class":359},[35,59126,51660],{"class":51626},[35,59128,51633],{"class":359},[35,59130,59131,59133,59135,59137,59139,59141],{"class":37,"line":74},[35,59132,52470],{"class":359},[35,59134,51670],{"class":51626},[35,59136,51673],{"class":48},[35,59138,544],{"class":359},[35,59140,51678],{"class":306},[35,59142,51633],{"class":359},[35,59144,59145,59147,59149,59151,59153,59155,59157,59159,59161],{"class":37,"line":83},[35,59146,52470],{"class":359},[35,59148,51670],{"class":51626},[35,59150,15254],{"class":48},[35,59152,544],{"class":359},[35,59154,51717],{"class":306},[35,59156,51697],{"class":48},[35,59158,544],{"class":359},[35,59160,51724],{"class":306},[35,59162,51633],{"class":359},[35,59164,59165,59167,59169,59171,59173],{"class":37,"line":92},[35,59166,52470],{"class":359},[35,59168,51733],{"class":51626},[35,59170,51736],{"class":359},[35,59172,51733],{"class":51626},[35,59174,51633],{"class":359},[35,59176,59177,59179,59181],{"class":37,"line":101},[35,59178,52111],{"class":359},[35,59180,51660],{"class":51626},[35,59182,51633],{"class":359},[35,59184,59185],{"class":37,"line":110},[35,59186,141],{"emptyLinePlaceholder":140},[35,59188,59189,59191,59193],{"class":37,"line":119},[35,59190,1404],{"class":359},[35,59192,52126],{"class":51626},[35,59194,51633],{"class":359},[35,59196,59197,59199,59201,59203,59205],{"class":37,"line":128},[35,59198,52470],{"class":359},[35,59200,54213],{"class":51626},[35,59202,54219],{"class":359},[35,59204,54213],{"class":51626},[35,59206,51633],{"class":359},[35,59208,59209,59211,59213],{"class":37,"line":137},[35,59210,52470],{"class":359},[35,59212,52139],{"class":51626},[35,59214,51633],{"class":359},[35,59216,59217,59219,59221,59223,59225,59227,59229,59231],{"class":37,"line":144},[35,59218,11555],{"class":495},[35,59220,54717],{"class":58},[35,59222,13898],{"class":495},[35,59224,54722],{"class":359},[35,59226,54725],{"class":48},[35,59228,499],{"class":359},[35,59230,58530],{"class":306},[35,59232,505],{"class":359},[35,59234,59235,59237,59240,59242,59245],{"class":37,"line":150},[35,59236,58537],{"class":359},[35,59238,59239],{"class":48},"onclick",[35,59241,13898],{"class":495},[35,59243,59244],{"class":495}," function",[35,59246,54778],{"class":359},[35,59248,59249,59252,59254,59256],{"class":37,"line":159},[35,59250,59251],{"class":48},"      alert",[35,59253,499],{"class":359},[35,59255,966],{"class":58},[35,59257,505],{"class":359},[35,59259,59260],{"class":37,"line":168},[35,59261,2528],{"class":359},[35,59263,59264,59266,59268,59270,59272],{"class":37,"line":177},[35,59265,58537],{"class":359},[35,59267,59239],{"class":48},[35,59269,13898],{"class":495},[35,59271,59244],{"class":495},[35,59273,54778],{"class":359},[35,59275,59276,59278,59280,59282],{"class":37,"line":182},[35,59277,59251],{"class":48},[35,59279,499],{"class":359},[35,59281,1244],{"class":58},[35,59283,505],{"class":359},[35,59285,59286],{"class":37,"line":188},[35,59287,2528],{"class":359},[35,59289,59290,59292,59294],{"class":37,"line":197},[35,59291,52743],{"class":359},[35,59293,52139],{"class":51626},[35,59295,51633],{"class":359},[35,59297,59298,59300,59302],{"class":37,"line":206},[35,59299,52111],{"class":359},[35,59301,52126],{"class":51626},[35,59303,51633],{"class":359},[35,59305,59306],{"class":37,"line":215},[35,59307,141],{"emptyLinePlaceholder":140},[35,59309,59310,59312,59314],{"class":37,"line":224},[35,59311,52111],{"class":359},[35,59313,50961],{"class":51626},[35,59315,51633],{"class":359},[21,59317,59318],{},"只要点击就输出结果为22,前边11被覆盖了",[25,59320,59322],{"className":50959,"code":59321,"language":50961,"meta":30,"style":30},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[32,59323,59324,59329,59334,59338,59343,59348],{"__ignoreMap":30},[35,59325,59326],{"class":37,"line":38},[35,59327,59328],{"class":359},"  btn.addEventListener('click', function () {\n",[35,59330,59331],{"class":37,"line":45},[35,59332,59333],{"class":359},"      alert(11)\n",[35,59335,59336],{"class":37,"line":55},[35,59337,33787],{"class":359},[35,59339,59340],{"class":37,"line":65},[35,59341,59342],{"class":359},"    btn.addEventListener('click', function () {\n",[35,59344,59345],{"class":37,"line":74},[35,59346,59347],{"class":359},"      alert(22)\n",[35,59349,59350],{"class":37,"line":83},[35,59351,33787],{"class":359},[21,59353,59354],{},"点击第一次输出11,第二次点击为22",[465,59356,59358],{"id":59357},"_325-事件类型","3.2.5 事件类型",[21,59360,59361],{},[1823,59362],{"alt":30,"src":59363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22332,59365,59367],{"id":59366},"_3251-鼠标事件","3.2.5.1 鼠标事件",[21,59369,59370],{},"补充知识:",[21,59372,59373],{},"轮播图自动播放模块,可以使用",[21,59375,59376],{},"let timerId = setInterval(function () {",[21,59378,59379],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[21,59381,59382],{},"用js方法模拟进行点击事件,click必须加()",[21,59384,59385],{},"next.click()",[21,59387,59388],{},"}, 1000)",[21,59390,59391],{},[1823,59392],{"alt":30,"src":59393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[25,59395,59397],{"className":53393,"code":59396,"language":53395,"meta":30,"style":30},"\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",[32,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":30},[35,59400,59401],{"class":37,"line":38},[35,59402,141],{"emptyLinePlaceholder":140},[35,59404,59405,59407,59409,59411],{"class":37,"line":45},[35,59406,51623],{"class":359},[35,59408,51627],{"class":495},[35,59410,51630],{"class":58},[35,59412,51633],{"class":359},[35,59414,59415,59417,59419,59421,59423,59425],{"class":37,"line":55},[35,59416,1404],{"class":359},[35,59418,50961],{"class":51626},[35,59420,51642],{"class":48},[35,59422,544],{"class":359},[35,59424,51647],{"class":306},[35,59426,51633],{"class":359},[35,59428,59429],{"class":37,"line":65},[35,59430,141],{"emptyLinePlaceholder":140},[35,59432,59433,59435,59437],{"class":37,"line":74},[35,59434,1404],{"class":359},[35,59436,51660],{"class":51626},[35,59438,51633],{"class":359},[35,59440,59441,59443,59445,59447,59449,59451],{"class":37,"line":83},[35,59442,52470],{"class":359},[35,59444,51670],{"class":51626},[35,59446,51673],{"class":48},[35,59448,544],{"class":359},[35,59450,51678],{"class":306},[35,59452,59453],{"class":359}," \u002F>\n",[35,59455,59456,59458,59460,59462,59464,59466,59468,59470,59472],{"class":37,"line":92},[35,59457,52470],{"class":359},[35,59459,51670],{"class":51626},[35,59461,51689],{"class":48},[35,59463,544],{"class":359},[35,59465,51694],{"class":306},[35,59467,51697],{"class":48},[35,59469,544],{"class":359},[35,59471,51702],{"class":306},[35,59473,59453],{"class":359},[35,59475,59476,59478,59480,59482,59484,59486,59488,59490,59492],{"class":37,"line":101},[35,59477,52470],{"class":359},[35,59479,51670],{"class":51626},[35,59481,15254],{"class":48},[35,59483,544],{"class":359},[35,59485,51717],{"class":306},[35,59487,51697],{"class":48},[35,59489,544],{"class":359},[35,59491,51724],{"class":306},[35,59493,59453],{"class":359},[35,59495,59496,59498,59500,59503,59505],{"class":37,"line":110},[35,59497,52470],{"class":359},[35,59499,51733],{"class":51626},[35,59501,59502],{"class":359},">轮播图点击切换\u003C\u002F",[35,59504,51733],{"class":51626},[35,59506,51633],{"class":359},[35,59508,59509,59511,59513],{"class":37,"line":119},[35,59510,52470],{"class":359},[35,59512,416],{"class":51626},[35,59514,51633],{"class":359},[35,59516,59517],{"class":37,"line":128},[35,59518,59519],{"class":359},"    * {\n",[35,59521,59522],{"class":37,"line":137},[35,59523,59524],{"class":359},"      box-sizing: border-box;\n",[35,59526,59527],{"class":37,"line":144},[35,59528,2528],{"class":359},[35,59530,59531],{"class":37,"line":150},[35,59532,141],{"emptyLinePlaceholder":140},[35,59534,59535],{"class":37,"line":159},[35,59536,59537],{"class":359},"    .slider {\n",[35,59539,59540],{"class":37,"line":168},[35,59541,59542],{"class":359},"      width: 560px;\n",[35,59544,59545],{"class":37,"line":177},[35,59546,59547],{"class":359},"      height: 400px;\n",[35,59549,59550],{"class":37,"line":182},[35,59551,59552],{"class":359},"      overflow: hidden;\n",[35,59554,59555],{"class":37,"line":188},[35,59556,2528],{"class":359},[35,59558,59559],{"class":37,"line":197},[35,59560,141],{"emptyLinePlaceholder":140},[35,59562,59563],{"class":37,"line":206},[35,59564,59565],{"class":359},"    .slider-wrapper {\n",[35,59567,59568],{"class":37,"line":215},[35,59569,59570],{"class":359},"      width: 100%;\n",[35,59572,59573],{"class":37,"line":224},[35,59574,59575],{"class":359},"      height: 320px;\n",[35,59577,59578],{"class":37,"line":233},[35,59579,2528],{"class":359},[35,59581,59582],{"class":37,"line":238},[35,59583,141],{"emptyLinePlaceholder":140},[35,59585,59586],{"class":37,"line":244},[35,59587,59588],{"class":359},"    .slider-wrapper img {\n",[35,59590,59591],{"class":37,"line":253},[35,59592,59570],{"class":359},[35,59594,59595],{"class":37,"line":262},[35,59596,59597],{"class":359},"      height: 100%;\n",[35,59599,59600],{"class":37,"line":271},[35,59601,59602],{"class":359},"      display: block;\n",[35,59604,59605],{"class":37,"line":280},[35,59606,2528],{"class":359},[35,59608,59609],{"class":37,"line":289},[35,59610,141],{"emptyLinePlaceholder":140},[35,59612,59613],{"class":37,"line":294},[35,59614,59615],{"class":359},"    .slider-footer {\n",[35,59617,59618],{"class":37,"line":300},[35,59619,59620],{"class":359},"      height: 80px;\n",[35,59622,59623],{"class":37,"line":313},[35,59624,59625],{"class":359},"      background-color: rgb(100, 67, 68);\n",[35,59627,59628],{"class":37,"line":324},[35,59629,59630],{"class":359},"      padding: 12px 12px 0 12px;\n",[35,59632,59633],{"class":37,"line":2955},[35,59634,59635],{"class":359},"      position: relative;\n",[35,59637,59638],{"class":37,"line":8282},[35,59639,2528],{"class":359},[35,59641,59642],{"class":37,"line":8306},[35,59643,141],{"emptyLinePlaceholder":140},[35,59645,59646],{"class":37,"line":8311},[35,59647,59648],{"class":359},"    .slider-footer .toggle {\n",[35,59650,59651],{"class":37,"line":8317},[35,59652,59653],{"class":359},"      position: absolute;\n",[35,59655,59656],{"class":37,"line":8344},[35,59657,59658],{"class":359},"      right: 0;\n",[35,59660,59661],{"class":37,"line":8349},[35,59662,59663],{"class":359},"      top: 12px;\n",[35,59665,59666],{"class":37,"line":8355},[35,59667,59668],{"class":359},"      display: flex;\n",[35,59670,59671],{"class":37,"line":8367},[35,59672,2528],{"class":359},[35,59674,59675],{"class":37,"line":8379},[35,59676,141],{"emptyLinePlaceholder":140},[35,59678,59679],{"class":37,"line":8391},[35,59680,59681],{"class":359},"    .slider-footer .toggle button {\n",[35,59683,59684],{"class":37,"line":10050},[35,59685,59686],{"class":359},"      margin-right: 12px;\n",[35,59688,59689],{"class":37,"line":10075},[35,59690,59691],{"class":359},"      width: 28px;\n",[35,59693,59694],{"class":37,"line":10098},[35,59695,59696],{"class":359},"      height: 28px;\n",[35,59698,59699],{"class":37,"line":10122},[35,59700,59701],{"class":359},"      appearance: none;\n",[35,59703,59704],{"class":37,"line":10127},[35,59705,59706],{"class":359},"      border: none;\n",[35,59708,59709],{"class":37,"line":10132},[35,59710,59711],{"class":359},"      background: rgba(255, 255, 255, 0.1);\n",[35,59713,59714],{"class":37,"line":10137},[35,59715,59716],{"class":359},"      color: #fff;\n",[35,59718,59719],{"class":37,"line":10146},[35,59720,59721],{"class":359},"      border-radius: 4px;\n",[35,59723,59724],{"class":37,"line":10151},[35,59725,59726],{"class":359},"      cursor: pointer;\n",[35,59728,59729],{"class":37,"line":10157},[35,59730,2528],{"class":359},[35,59732,59733],{"class":37,"line":10178},[35,59734,141],{"emptyLinePlaceholder":140},[35,59736,59737],{"class":37,"line":10184},[35,59738,59739],{"class":359},"    .slider-footer .toggle button:hover {\n",[35,59741,59742],{"class":37,"line":10198},[35,59743,59744],{"class":359},"      background: rgba(255, 255, 255, 0.2);\n",[35,59746,59747],{"class":37,"line":10204},[35,59748,2528],{"class":359},[35,59750,59751],{"class":37,"line":10231},[35,59752,141],{"emptyLinePlaceholder":140},[35,59754,59755],{"class":37,"line":10240},[35,59756,59757],{"class":359},"    .slider-footer p {\n",[35,59759,59760],{"class":37,"line":10246},[35,59761,59762],{"class":359},"      margin: 0;\n",[35,59764,59765],{"class":37,"line":10254},[35,59766,59716],{"class":359},[35,59768,59769],{"class":37,"line":10259},[35,59770,59771],{"class":359},"      font-size: 18px;\n",[35,59773,59774],{"class":37,"line":16938},[35,59775,59776],{"class":359},"      margin-bottom: 10px;\n",[35,59778,59779],{"class":37,"line":16944},[35,59780,2528],{"class":359},[35,59782,59783],{"class":37,"line":16967},[35,59784,141],{"emptyLinePlaceholder":140},[35,59786,59787],{"class":37,"line":16973},[35,59788,59789],{"class":359},"    .slider-indicator {\n",[35,59791,59792],{"class":37,"line":16996},[35,59793,59762],{"class":359},[35,59795,59796],{"class":37,"line":17010},[35,59797,59798],{"class":359},"      padding: 0;\n",[35,59800,59801],{"class":37,"line":17030},[35,59802,59803],{"class":359},"      list-style: none;\n",[35,59805,59806],{"class":37,"line":17036},[35,59807,59668],{"class":359},[35,59809,59810],{"class":37,"line":17047},[35,59811,59812],{"class":359},"      align-items: center;\n",[35,59814,59815],{"class":37,"line":17070},[35,59816,2528],{"class":359},[35,59818,59819],{"class":37,"line":17092},[35,59820,141],{"emptyLinePlaceholder":140},[35,59822,59823],{"class":37,"line":17097},[35,59824,59825],{"class":359},"    .slider-indicator li {\n",[35,59827,59828],{"class":37,"line":17103},[35,59829,59830],{"class":359},"      width: 8px;\n",[35,59832,59833],{"class":37,"line":17117},[35,59834,59835],{"class":359},"      height: 8px;\n",[35,59837,59838],{"class":37,"line":17130},[35,59839,59840],{"class":359},"      margin: 4px;\n",[35,59842,59843],{"class":37,"line":17135},[35,59844,59845],{"class":359},"      border-radius: 50%;\n",[35,59847,59848],{"class":37,"line":17149},[35,59849,59850],{"class":359},"      background: #fff;\n",[35,59852,59853],{"class":37,"line":17154},[35,59854,59855],{"class":359},"      opacity: 0.4;\n",[35,59857,59858],{"class":37,"line":17160},[35,59859,59726],{"class":359},[35,59861,59862],{"class":37,"line":17165},[35,59863,2528],{"class":359},[35,59865,59866],{"class":37,"line":17179},[35,59867,141],{"emptyLinePlaceholder":140},[35,59869,59870],{"class":37,"line":17184},[35,59871,59872],{"class":359},"    .slider-indicator li.active {\n",[35,59874,59875],{"class":37,"line":17189},[35,59876,59877],{"class":359},"      width: 12px;\n",[35,59879,59880],{"class":37,"line":17203},[35,59881,59882],{"class":359},"      height: 12px;\n",[35,59884,59885],{"class":37,"line":17215},[35,59886,59887],{"class":359},"      opacity: 1;\n",[35,59889,59890],{"class":37,"line":17220},[35,59891,2528],{"class":359},[35,59893,59894,59896,59898],{"class":37,"line":17233},[35,59895,52743],{"class":359},[35,59897,416],{"class":51626},[35,59899,51633],{"class":359},[35,59901,59902,59904,59906],{"class":37,"line":17238},[35,59903,52111],{"class":359},[35,59905,51660],{"class":51626},[35,59907,51633],{"class":359},[35,59909,59910],{"class":37,"line":17243},[35,59911,141],{"emptyLinePlaceholder":140},[35,59913,59914,59916,59918],{"class":37,"line":17248},[35,59915,1404],{"class":359},[35,59917,52126],{"class":51626},[35,59919,51633],{"class":359},[35,59921,59922,59924,59926,59928,59930,59933],{"class":37,"line":17261},[35,59923,52470],{"class":359},[35,59925,51937],{"class":51626},[35,59927,53812],{"class":48},[35,59929,544],{"class":359},[35,59931,59932],{"class":306},"\"slider\"",[35,59934,51633],{"class":359},[35,59936,59937,59939,59941,59943,59945,59947],{"class":37,"line":17266},[35,59938,51667],{"class":359},[35,59940,51937],{"class":51626},[35,59942,53812],{"class":48},[35,59944,544],{"class":359},[35,59946,55553],{"class":306},[35,59948,51633],{"class":359},[35,59950,59951,59953,59955,59957,59959,59962,59964,59966,59968],{"class":37,"line":32959},[35,59952,55560],{"class":359},[35,59954,1823],{"class":51626},[35,59956,55565],{"class":48},[35,59958,544],{"class":359},[35,59960,59961],{"class":306},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[35,59963,55573],{"class":48},[35,59965,544],{"class":359},[35,59967,7986],{"class":306},[35,59969,59453],{"class":359},[35,59971,59972,59974,59976],{"class":37,"line":32965},[35,59973,52102],{"class":359},[35,59975,51937],{"class":51626},[35,59977,51633],{"class":359},[35,59979,59980,59982,59984,59986,59988,59990],{"class":37,"line":32971},[35,59981,51667],{"class":359},[35,59983,51937],{"class":51626},[35,59985,53812],{"class":48},[35,59987,544],{"class":359},[35,59989,55600],{"class":306},[35,59991,51633],{"class":359},[35,59993,59994,59996,59998,60001,60003],{"class":37,"line":32977},[35,59995,55560],{"class":359},[35,59997,21],{"class":51626},[35,59999,60000],{"class":359},">对人类来说会不会太超前了？\u003C\u002F",[35,60002,21],{"class":51626},[35,60004,51633],{"class":359},[35,60006,60007,60009,60011,60013,60015,60018],{"class":37,"line":32983},[35,60008,55560],{"class":359},[35,60010,1501],{"class":51626},[35,60012,53812],{"class":48},[35,60014,544],{"class":359},[35,60016,60017],{"class":306},"\"slider-indicator\"",[35,60019,51633],{"class":359},[35,60021,60022,60024,60026,60028,60030,60033,60035,60037],{"class":37,"line":32994},[35,60023,55628],{"class":359},[35,60025,17],{"class":51626},[35,60027,53812],{"class":48},[35,60029,544],{"class":359},[35,60031,60032],{"class":306},"\"active\"",[35,60034,55640],{"class":359},[35,60036,17],{"class":51626},[35,60038,51633],{"class":359},[35,60040,60041,60043,60045,60047,60049],{"class":37,"line":33000},[35,60042,55628],{"class":359},[35,60044,17],{"class":51626},[35,60046,55640],{"class":359},[35,60048,17],{"class":51626},[35,60050,51633],{"class":359},[35,60052,60053,60055,60057,60059,60061],{"class":37,"line":33020},[35,60054,55628],{"class":359},[35,60056,17],{"class":51626},[35,60058,55640],{"class":359},[35,60060,17],{"class":51626},[35,60062,51633],{"class":359},[35,60064,60065,60067,60069,60071,60073],{"class":37,"line":33026},[35,60066,55628],{"class":359},[35,60068,17],{"class":51626},[35,60070,55640],{"class":359},[35,60072,17],{"class":51626},[35,60074,51633],{"class":359},[35,60076,60077,60079,60081,60083,60085],{"class":37,"line":33037},[35,60078,55628],{"class":359},[35,60080,17],{"class":51626},[35,60082,55640],{"class":359},[35,60084,17],{"class":51626},[35,60086,51633],{"class":359},[35,60088,60089,60091,60093,60095,60097],{"class":37,"line":33043},[35,60090,55628],{"class":359},[35,60092,17],{"class":51626},[35,60094,55640],{"class":359},[35,60096,17],{"class":51626},[35,60098,51633],{"class":359},[35,60100,60101,60103,60105,60107,60109],{"class":37,"line":33049},[35,60102,55628],{"class":359},[35,60104,17],{"class":51626},[35,60106,55640],{"class":359},[35,60108,17],{"class":51626},[35,60110,51633],{"class":359},[35,60112,60113,60115,60117,60119,60121],{"class":37,"line":33055},[35,60114,55628],{"class":359},[35,60116,17],{"class":51626},[35,60118,55640],{"class":359},[35,60120,17],{"class":51626},[35,60122,51633],{"class":359},[35,60124,60125,60127,60129],{"class":37,"line":33061},[35,60126,55733],{"class":359},[35,60128,1501],{"class":51626},[35,60130,51633],{"class":359},[35,60132,60133,60135,60137,60139,60141,60144],{"class":37,"line":33067},[35,60134,55560],{"class":359},[35,60136,51937],{"class":51626},[35,60138,53812],{"class":48},[35,60140,544],{"class":359},[35,60142,60143],{"class":306},"\"toggle\"",[35,60145,51633],{"class":359},[35,60147,60148,60150,60152,60154,60156,60159,60161,60164,60166,60168],{"class":37,"line":33073},[35,60149,55628],{"class":359},[35,60151,54213],{"class":51626},[35,60153,53812],{"class":48},[35,60155,544],{"class":359},[35,60157,60158],{"class":306},"\"prev\"",[35,60160,1454],{"class":359},[35,60162,60163],{"class":58},"&lt;",[35,60165,52111],{"class":359},[35,60167,54213],{"class":51626},[35,60169,51633],{"class":359},[35,60171,60172,60174,60176,60178,60180,60183,60185,60188,60190,60192],{"class":37,"line":33079},[35,60173,55628],{"class":359},[35,60175,54213],{"class":51626},[35,60177,53812],{"class":48},[35,60179,544],{"class":359},[35,60181,60182],{"class":306},"\"next\"",[35,60184,1454],{"class":359},[35,60186,60187],{"class":58},"&gt;",[35,60189,52111],{"class":359},[35,60191,54213],{"class":51626},[35,60193,51633],{"class":359},[35,60195,60196,60198,60200],{"class":37,"line":33099},[35,60197,55733],{"class":359},[35,60199,51937],{"class":51626},[35,60201,51633],{"class":359},[35,60203,60204,60206,60208],{"class":37,"line":33105},[35,60205,52102],{"class":359},[35,60207,51937],{"class":51626},[35,60209,51633],{"class":359},[35,60211,60212,60214,60216],{"class":37,"line":33121},[35,60213,52743],{"class":359},[35,60215,51937],{"class":51626},[35,60217,51633],{"class":359},[35,60219,60220,60222,60224],{"class":37,"line":33127},[35,60221,52470],{"class":359},[35,60223,52139],{"class":51626},[35,60225,51633],{"class":359},[35,60227,60228],{"class":37,"line":33141},[35,60229,60230],{"class":359},"    \u002F\u002F 1. 初始数据\n",[35,60232,60233],{"class":37,"line":33147},[35,60234,60235],{"class":359},"    const data = [\n",[35,60237,60238],{"class":37,"line":33162},[35,60239,60240],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[35,60242,60243],{"class":37,"line":33168},[35,60244,60245],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[35,60247,60248],{"class":37,"line":33177},[35,60249,60250],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[35,60252,60253],{"class":37,"line":33183},[35,60254,60255],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[35,60257,60258],{"class":37,"line":33192},[35,60259,60260],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[35,60262,60263],{"class":37,"line":33198},[35,60264,60265],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[35,60267,60268],{"class":37,"line":33204},[35,60269,60270],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[35,60272,60273],{"class":37,"line":33213},[35,60274,60275],{"class":359},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[35,60277,60278],{"class":37,"line":33219},[35,60279,53435],{"class":359},[35,60281,60282],{"class":37,"line":33230},[35,60283,60284],{"class":359},"    \u002F\u002F 获取元素\n",[35,60286,60287],{"class":37,"line":33236},[35,60288,60289],{"class":359},"    const img = document.querySelector('.slider-wrapper img')\n",[35,60291,60292],{"class":37,"line":33255},[35,60293,60294],{"class":359},"    const p = document.querySelector('.slider-footer p')\n",[35,60296,60297],{"class":37,"line":33261},[35,60298,60299],{"class":359},"    const footer = document.querySelector('.slider-footer')\n",[35,60301,60302],{"class":37,"line":33272},[35,60303,60304],{"class":359},"    \u002F\u002F 1. 右按钮业务\n",[35,60306,60307],{"class":37,"line":33278},[35,60308,60309],{"class":359},"    \u002F\u002F 1.1 获取右侧按钮 \n",[35,60311,60312],{"class":37,"line":33298},[35,60313,60314],{"class":359},"    const next = document.querySelector('.next')\n",[35,60316,60317],{"class":37,"line":33314},[35,60318,60319],{"class":359},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[35,60321,60322],{"class":37,"line":33320},[35,60323,60324],{"class":359},"    \u002F\u002F 1.2 注册点击事件\n",[35,60326,60327],{"class":37,"line":33334},[35,60328,141],{"emptyLinePlaceholder":140},[35,60330,60331],{"class":37,"line":33340},[35,60332,60333],{"class":359},"    next.addEventListener('click', function () {\n",[35,60335,60336],{"class":37,"line":33346},[35,60337,60338],{"class":359},"      \u002F\u002F console.log(11)\n",[35,60340,60341],{"class":37,"line":33357},[35,60342,60343],{"class":359},"      i++\n",[35,60345,60346],{"class":37,"line":33363},[35,60347,60348],{"class":359},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[35,60350,60351],{"class":37,"line":33369},[35,60352,60353],{"class":359},"      \u002F\u002F if (i >= 8) {\n",[35,60355,60356],{"class":37,"line":33379},[35,60357,60358],{"class":359},"      \u002F\u002F   i = 0\n",[35,60360,60361],{"class":37,"line":33385},[35,60362,60363],{"class":359},"      \u002F\u002F }\n",[35,60365,60366],{"class":37,"line":33396},[35,60367,60368],{"class":359},"      i = i >= data.length ? 0 : i\n",[35,60370,60371],{"class":37,"line":33402},[35,60372,60373],{"class":359},"      \u002F\u002F 1.3 得到对应的对象\n",[35,60375,60376],{"class":37,"line":33412},[35,60377,60378],{"class":359},"      \u002F\u002F console.log(data[i])\n",[35,60380,60381],{"class":37,"line":33417},[35,60382,60383],{"class":359},"      \u002F\u002F 调用函数\n",[35,60385,60386],{"class":37,"line":33423},[35,60387,60388],{"class":359},"      toggle()\n",[35,60390,60391],{"class":37,"line":33472},[35,60392,33787],{"class":359},[35,60394,60395],{"class":37,"line":33519},[35,60396,141],{"emptyLinePlaceholder":140},[35,60398,60399],{"class":37,"line":33524},[35,60400,60401],{"class":359},"    \u002F\u002F 2. 左侧按钮业务\n",[35,60403,60404],{"class":37,"line":33530},[35,60405,60406],{"class":359},"    \u002F\u002F 2.1 获取左侧按钮 \n",[35,60408,60409],{"class":37,"line":33549},[35,60410,60411],{"class":359},"    const prev = document.querySelector('.prev')\n",[35,60413,60414],{"class":37,"line":33555},[35,60415,60324],{"class":359},[35,60417,60418],{"class":37,"line":33575},[35,60419,60420],{"class":359},"    prev.addEventListener('click', function () {\n",[35,60422,60423],{"class":37,"line":33581},[35,60424,60425],{"class":359},"      i--\n",[35,60427,60428],{"class":37,"line":33587},[35,60429,60430],{"class":359},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[35,60432,60433],{"class":37,"line":33597},[35,60434,60435],{"class":359},"      \u002F\u002F if (i \u003C 0) {\n",[35,60437,60438],{"class":37,"line":33602},[35,60439,60440],{"class":359},"      \u002F\u002F   i = 7\n",[35,60442,60443],{"class":37,"line":33608},[35,60444,60363],{"class":359},[35,60446,60447],{"class":37,"line":33624},[35,60448,60449],{"class":359},"      i = i \u003C 0 ? data.length - 1 : i\n",[35,60451,60452],{"class":37,"line":33669},[35,60453,60373],{"class":359},[35,60455,60456],{"class":37,"line":33675},[35,60457,60378],{"class":359},[35,60459,60460],{"class":37,"line":33681},[35,60461,60383],{"class":359},[35,60463,60464],{"class":37,"line":33687},[35,60465,60388],{"class":359},[35,60467,60468],{"class":37,"line":33698},[35,60469,33787],{"class":359},[35,60471,60472],{"class":37,"line":33704},[35,60473,141],{"emptyLinePlaceholder":140},[35,60475,60476],{"class":37,"line":33710},[35,60477,60478],{"class":359},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[35,60480,60481],{"class":37,"line":33716},[35,60482,60483],{"class":359},"    function toggle() {\n",[35,60485,60486],{"class":37,"line":33734},[35,60487,60488],{"class":359},"      \u002F\u002F 1.4 渲染对应的数据\n",[35,60490,60491],{"class":37,"line":33748},[35,60492,60493],{"class":359},"      img.src = data[i].url\n",[35,60495,60496],{"class":37,"line":33757},[35,60497,60498],{"class":359},"      p.innerHTML = data[i].title\n",[35,60500,60501],{"class":37,"line":33766},[35,60502,60503],{"class":359},"      footer.style.backgroundColor = data[i].color\n",[35,60505,60506],{"class":37,"line":33775},[35,60507,60508],{"class":359},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[35,60510,60511],{"class":37,"line":33784},[35,60512,60513],{"class":359},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[35,60515,60516],{"class":37,"line":33790},[35,60517,60518],{"class":359},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[35,60520,60521],{"class":37,"line":33796},[35,60522,2528],{"class":359},[35,60524,60525],{"class":37,"line":33804},[35,60526,141],{"emptyLinePlaceholder":140},[35,60528,60529],{"class":37,"line":33809},[35,60530,60531],{"class":359},"    \u002F\u002F 3. 自动播放模块\n",[35,60533,60534],{"class":37,"line":33815},[35,60535,60536],{"class":359},"    let timerId = setInterval(function () {\n",[35,60538,60539],{"class":37,"line":33826},[35,60540,60541],{"class":359},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[35,60543,60544],{"class":37,"line":33832},[35,60545,60546],{"class":359},"      next.click()\n",[35,60548,60549],{"class":37,"line":33852},[35,60550,60551],{"class":359},"    }, 1000)\n",[35,60553,60554],{"class":37,"line":33858},[35,60555,141],{"emptyLinePlaceholder":140},[35,60557,60558],{"class":37,"line":33864},[35,60559,60560],{"class":359},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[35,60562,60563],{"class":37,"line":33870},[35,60564,60565],{"class":359},"    const slider = document.querySelector('.slider')\n",[35,60567,60568],{"class":37,"line":33887},[35,60569,60570],{"class":359},"    \u002F\u002F 注册事件\n",[35,60572,60573],{"class":37,"line":33893},[35,60574,60575],{"class":359},"    slider.addEventListener('mouseenter', function () {\n",[35,60577,60578],{"class":37,"line":33899},[35,60579,60580],{"class":359},"      \u002F\u002F 停止定时器\n",[35,60582,60583],{"class":37,"line":33905},[35,60584,60585],{"class":359},"      clearInterval(timerId)\n",[35,60587,60588],{"class":37,"line":33911},[35,60589,33787],{"class":359},[35,60591,60592],{"class":37,"line":33917},[35,60593,141],{"emptyLinePlaceholder":140},[35,60595,60596],{"class":37,"line":33944},[35,60597,60598],{"class":359},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[35,60600,60601],{"class":37,"line":33968},[35,60602,60570],{"class":359},[35,60604,60605],{"class":37,"line":33974},[35,60606,60607],{"class":359},"    slider.addEventListener('mouseleave', function () {\n",[35,60609,60610],{"class":37,"line":33980},[35,60611,60580],{"class":359},[35,60613,60614],{"class":37,"line":33986},[35,60615,60616],{"class":359},"      if (timerId) clearInterval(timerId)\n",[35,60618,60619],{"class":37,"line":33997},[35,60620,60621],{"class":359},"      \u002F\u002F 开启定时器\n",[35,60623,60624],{"class":37,"line":34008},[35,60625,60626],{"class":359},"      timerId = setInterval(function () {\n",[35,60628,60629],{"class":37,"line":34014},[35,60630,60631],{"class":359},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[35,60633,60634],{"class":37,"line":34031},[35,60635,60636],{"class":359},"        next.click()\n",[35,60638,60639],{"class":37,"line":34054},[35,60640,60641],{"class":359},"      }, 1000)\n",[35,60643,60644],{"class":37,"line":34077},[35,60645,33787],{"class":359},[35,60647,60648,60650,60652],{"class":37,"line":34083},[35,60649,52743],{"class":359},[35,60651,52139],{"class":51626},[35,60653,51633],{"class":359},[35,60655,60656,60658,60660],{"class":37,"line":34088},[35,60657,52111],{"class":359},[35,60659,52126],{"class":51626},[35,60661,51633],{"class":359},[35,60663,60664],{"class":37,"line":34097},[35,60665,141],{"emptyLinePlaceholder":140},[35,60667,60668,60670,60672],{"class":37,"line":34107},[35,60669,52111],{"class":359},[35,60671,50961],{"class":51626},[35,60673,51633],{"class":359},[22332,60675,60677],{"id":60676},"_3252-焦点事件","3.2.5.2 焦点事件",[21,60679,60680],{},"小米搜索框案例：",[25,60682,60684],{"className":50959,"code":60683,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,60687,60688,60690,60692,60694],{"class":37,"line":38},[35,60689,51623],{"class":359},[35,60691,51627],{"class":51626},[35,60693,51630],{"class":48},[35,60695,51633],{"class":359},[35,60697,60698,60700,60702,60704,60706,60708],{"class":37,"line":45},[35,60699,1404],{"class":359},[35,60701,50961],{"class":51626},[35,60703,51642],{"class":48},[35,60705,544],{"class":359},[35,60707,51647],{"class":306},[35,60709,51633],{"class":359},[35,60711,60712],{"class":37,"line":55},[35,60713,141],{"emptyLinePlaceholder":140},[35,60715,60716,60718,60720],{"class":37,"line":65},[35,60717,1404],{"class":359},[35,60719,51660],{"class":51626},[35,60721,51633],{"class":359},[35,60723,60724,60726,60728,60730,60732,60734],{"class":37,"line":74},[35,60725,51667],{"class":359},[35,60727,51670],{"class":51626},[35,60729,51673],{"class":48},[35,60731,544],{"class":359},[35,60733,51678],{"class":306},[35,60735,51633],{"class":359},[35,60737,60738,60740,60742,60744,60746,60748,60750,60752,60754],{"class":37,"line":83},[35,60739,51667],{"class":359},[35,60741,51670],{"class":51626},[35,60743,51689],{"class":48},[35,60745,544],{"class":359},[35,60747,51694],{"class":306},[35,60749,51697],{"class":48},[35,60751,544],{"class":359},[35,60753,51702],{"class":306},[35,60755,51633],{"class":359},[35,60757,60758,60760,60762,60764,60766,60768,60770,60772,60774],{"class":37,"line":92},[35,60759,51667],{"class":359},[35,60761,51670],{"class":51626},[35,60763,15254],{"class":48},[35,60765,544],{"class":359},[35,60767,51717],{"class":306},[35,60769,51697],{"class":48},[35,60771,544],{"class":359},[35,60773,51724],{"class":306},[35,60775,51633],{"class":359},[35,60777,60778,60780,60782,60784,60786],{"class":37,"line":101},[35,60779,51667],{"class":359},[35,60781,51733],{"class":51626},[35,60783,51736],{"class":359},[35,60785,51733],{"class":51626},[35,60787,51633],{"class":359},[35,60789,60790,60792,60794],{"class":37,"line":110},[35,60791,51667],{"class":359},[35,60793,416],{"class":51626},[35,60795,51633],{"class":359},[35,60797,60798,60800],{"class":37,"line":119},[35,60799,51753],{"class":51626},[35,60801,15906],{"class":359},[35,60803,60804,60806,60808,60810],{"class":37,"line":128},[35,60805,51760],{"class":58},[35,60807,51763],{"class":359},[35,60809,687],{"class":58},[35,60811,1655],{"class":359},[35,60813,60814,60816,60818,60820],{"class":37,"line":137},[35,60815,51772],{"class":58},[35,60817,51763],{"class":359},[35,60819,687],{"class":58},[35,60821,1655],{"class":359},[35,60823,60824,60827,60829,60832],{"class":37,"line":144},[35,60825,60826],{"class":58},"            box-sizing",[35,60828,51763],{"class":359},[35,60830,60831],{"class":58},"border-box",[35,60833,1655],{"class":359},[35,60835,60836],{"class":37,"line":150},[35,60837,2869],{"class":359},[35,60839,60840],{"class":37,"line":159},[35,60841,141],{"emptyLinePlaceholder":140},[35,60843,60844,60847],{"class":37,"line":168},[35,60845,60846],{"class":51626},"        ul",[35,60848,15906],{"class":359},[35,60850,60851],{"class":37,"line":177},[35,60852,141],{"emptyLinePlaceholder":140},[35,60854,60855,60858,60860,60862],{"class":37,"line":182},[35,60856,60857],{"class":58},"            list-style",[35,60859,51763],{"class":359},[35,60861,55063],{"class":58},[35,60863,1655],{"class":359},[35,60865,60866],{"class":37,"line":188},[35,60867,2869],{"class":359},[35,60869,60870],{"class":37,"line":197},[35,60871,141],{"emptyLinePlaceholder":140},[35,60873,60874,60877],{"class":37,"line":206},[35,60875,60876],{"class":48},"        .mi",[35,60878,15906],{"class":359},[35,60880,60881,60884,60886,60888],{"class":37,"line":215},[35,60882,60883],{"class":58},"            position",[35,60885,51763],{"class":359},[35,60887,55090],{"class":58},[35,60889,1655],{"class":359},[35,60891,60892,60894,60896,60899,60901],{"class":37,"line":224},[35,60893,51810],{"class":58},[35,60895,51763],{"class":359},[35,60897,60898],{"class":58},"223",[35,60900,51818],{"class":495},[35,60902,1655],{"class":359},[35,60904,60905,60907,60909,60911,60913,60915],{"class":37,"line":233},[35,60906,51760],{"class":58},[35,60908,51763],{"class":359},[35,60910,807],{"class":58},[35,60912,51818],{"class":495},[35,60914,51882],{"class":58},[35,60916,1655],{"class":359},[35,60918,60919],{"class":37,"line":238},[35,60920,2869],{"class":359},[35,60922,60923],{"class":37,"line":244},[35,60924,141],{"emptyLinePlaceholder":140},[35,60926,60927,60929,60932],{"class":37,"line":253},[35,60928,60876],{"class":48},[35,60930,60931],{"class":51626}," input",[35,60933,15906],{"class":359},[35,60935,60936,60938,60940,60942,60944],{"class":37,"line":262},[35,60937,51810],{"class":58},[35,60939,51763],{"class":359},[35,60941,60898],{"class":58},[35,60943,51818],{"class":495},[35,60945,1655],{"class":359},[35,60947,60948,60950,60952,60954,60956],{"class":37,"line":271},[35,60949,51825],{"class":58},[35,60951,51763],{"class":359},[35,60953,1101],{"class":58},[35,60955,51818],{"class":495},[35,60957,1655],{"class":359},[35,60959,60960,60962,60964,60966,60968,60970],{"class":37,"line":280},[35,60961,51772],{"class":58},[35,60963,51763],{"class":359},[35,60965,687],{"class":58},[35,60967,2379],{"class":58},[35,60969,51818],{"class":495},[35,60971,1655],{"class":359},[35,60973,60974,60977,60979,60981,60983],{"class":37,"line":289},[35,60975,60976],{"class":58},"            font-size",[35,60978,51763],{"class":359},[35,60980,1043],{"class":58},[35,60982,51818],{"class":495},[35,60984,1655],{"class":359},[35,60986,60987,60990,60992,60994,60996],{"class":37,"line":294},[35,60988,60989],{"class":58},"            line-height",[35,60991,51763],{"class":359},[35,60993,1101],{"class":58},[35,60995,51818],{"class":495},[35,60997,1655],{"class":359},[35,60999,61000,61003,61005,61007,61009,61011,61014],{"class":37,"line":300},[35,61001,61002],{"class":58},"            border",[35,61004,51763],{"class":359},[35,61006,713],{"class":58},[35,61008,51818],{"class":495},[35,61010,51847],{"class":58},[35,61012,61013],{"class":58}," #e0e0e0",[35,61015,1655],{"class":359},[35,61017,61018,61021,61023,61025],{"class":37,"line":313},[35,61019,61020],{"class":58},"            outline",[35,61022,51763],{"class":359},[35,61024,55063],{"class":58},[35,61026,1655],{"class":359},[35,61028,61029],{"class":37,"line":324},[35,61030,2869],{"class":359},[35,61032,61033],{"class":37,"line":2955},[35,61034,141],{"emptyLinePlaceholder":140},[35,61036,61037,61039,61042],{"class":37,"line":8282},[35,61038,60876],{"class":48},[35,61040,61041],{"class":48}," .search",[35,61043,15906],{"class":359},[35,61045,61046,61048,61050,61052,61054,61056,61059],{"class":37,"line":8306},[35,61047,61002],{"class":58},[35,61049,51763],{"class":359},[35,61051,713],{"class":58},[35,61053,51818],{"class":495},[35,61055,51847],{"class":58},[35,61057,61058],{"class":58}," #ff6700",[35,61060,1655],{"class":359},[35,61062,61063],{"class":37,"line":8311},[35,61064,2869],{"class":359},[35,61066,61067],{"class":37,"line":8317},[35,61068,141],{"emptyLinePlaceholder":140},[35,61070,61071,61074],{"class":37,"line":8344},[35,61072,61073],{"class":48},"        .result-list",[35,61075,15906],{"class":359},[35,61077,61078,61080,61082,61084],{"class":37,"line":8349},[35,61079,51798],{"class":58},[35,61081,51763],{"class":359},[35,61083,55063],{"class":58},[35,61085,1655],{"class":359},[35,61087,61088,61090,61092,61094],{"class":37,"line":8355},[35,61089,60883],{"class":58},[35,61091,51763],{"class":359},[35,61093,55157],{"class":58},[35,61095,1655],{"class":359},[35,61097,61098,61101,61103,61105],{"class":37,"line":8367},[35,61099,61100],{"class":58},"            left",[35,61102,51763],{"class":359},[35,61104,687],{"class":58},[35,61106,1655],{"class":359},[35,61108,61109,61112,61114,61116,61118],{"class":37,"line":8379},[35,61110,61111],{"class":58},"            top",[35,61113,51763],{"class":359},[35,61115,1101],{"class":58},[35,61117,51818],{"class":495},[35,61119,1655],{"class":359},[35,61121,61122,61124,61126,61128,61130],{"class":37,"line":8391},[35,61123,51810],{"class":58},[35,61125,51763],{"class":359},[35,61127,60898],{"class":58},[35,61129,51818],{"class":495},[35,61131,1655],{"class":359},[35,61133,61134,61136,61138,61140,61142,61144,61146],{"class":37,"line":10050},[35,61135,61002],{"class":58},[35,61137,51763],{"class":359},[35,61139,713],{"class":58},[35,61141,51818],{"class":495},[35,61143,51847],{"class":58},[35,61145,61058],{"class":58},[35,61147,1655],{"class":359},[35,61149,61150,61153,61155,61157],{"class":37,"line":10075},[35,61151,61152],{"class":58},"            border-top",[35,61154,51763],{"class":359},[35,61156,687],{"class":58},[35,61158,1655],{"class":359},[35,61160,61161,61164,61166,61169],{"class":37,"line":10098},[35,61162,61163],{"class":58},"            background",[35,61165,51763],{"class":359},[35,61167,61168],{"class":58},"#fff",[35,61170,1655],{"class":359},[35,61172,61173],{"class":37,"line":10122},[35,61174,2869],{"class":359},[35,61176,61177],{"class":37,"line":10127},[35,61178,141],{"emptyLinePlaceholder":140},[35,61180,61181,61183,61185],{"class":37,"line":10132},[35,61182,61073],{"class":48},[35,61184,1759],{"class":51626},[35,61186,15906],{"class":359},[35,61188,61189,61191,61193,61196],{"class":37,"line":10137},[35,61190,51798],{"class":58},[35,61192,51763],{"class":359},[35,61194,61195],{"class":58},"block",[35,61197,1655],{"class":359},[35,61199,61200,61202,61204,61206,61208,61211,61213],{"class":37,"line":10146},[35,61201,51772],{"class":58},[35,61203,51763],{"class":359},[35,61205,408],{"class":58},[35,61207,51818],{"class":495},[35,61209,61210],{"class":58}," 15",[35,61212,51818],{"class":495},[35,61214,1655],{"class":359},[35,61216,61217,61219,61221,61223,61225],{"class":37,"line":10151},[35,61218,60976],{"class":58},[35,61220,51763],{"class":359},[35,61222,992],{"class":58},[35,61224,51818],{"class":495},[35,61226,1655],{"class":359},[35,61228,61229,61232,61234,61237],{"class":37,"line":10157},[35,61230,61231],{"class":58},"            color",[35,61233,51763],{"class":359},[35,61235,61236],{"class":58},"#424242",[35,61238,1655],{"class":359},[35,61240,61241,61244,61246,61248],{"class":37,"line":10178},[35,61242,61243],{"class":58},"            text-decoration",[35,61245,51763],{"class":359},[35,61247,55063],{"class":58},[35,61249,1655],{"class":359},[35,61251,61252],{"class":37,"line":10184},[35,61253,2869],{"class":359},[35,61255,61256],{"class":37,"line":10198},[35,61257,141],{"emptyLinePlaceholder":140},[35,61259,61260,61262,61264,61267],{"class":37,"line":10204},[35,61261,61073],{"class":48},[35,61263,1759],{"class":51626},[35,61265,61266],{"class":48},":hover",[35,61268,15906],{"class":359},[35,61270,61271,61273,61275,61278],{"class":37,"line":10231},[35,61272,51966],{"class":58},[35,61274,51763],{"class":359},[35,61276,61277],{"class":58},"#eee",[35,61279,1655],{"class":359},[35,61281,61282],{"class":37,"line":10240},[35,61283,2869],{"class":359},[35,61285,61286,61288,61290],{"class":37,"line":10246},[35,61287,52102],{"class":359},[35,61289,416],{"class":51626},[35,61291,51633],{"class":359},[35,61293,61294],{"class":37,"line":10254},[35,61295,141],{"emptyLinePlaceholder":140},[35,61297,61298,61300,61302],{"class":37,"line":10259},[35,61299,52111],{"class":359},[35,61301,51660],{"class":51626},[35,61303,51633],{"class":359},[35,61305,61306],{"class":37,"line":16938},[35,61307,141],{"emptyLinePlaceholder":140},[35,61309,61310,61312,61314],{"class":37,"line":16944},[35,61311,1404],{"class":359},[35,61313,52126],{"class":51626},[35,61315,51633],{"class":359},[35,61317,61318,61320,61322,61324,61326,61329],{"class":37,"line":16967},[35,61319,51667],{"class":359},[35,61321,51937],{"class":51626},[35,61323,53812],{"class":48},[35,61325,544],{"class":359},[35,61327,61328],{"class":306},"\"mi\"",[35,61330,51633],{"class":359},[35,61332,61333,61335,61337,61339,61341,61344,61347,61349,61352],{"class":37,"line":16973},[35,61334,55628],{"class":359},[35,61336,54147],{"class":51626},[35,61338,54150],{"class":48},[35,61340,544],{"class":359},[35,61342,61343],{"class":306},"\"search\"",[35,61345,61346],{"class":48}," placeholder",[35,61348,544],{"class":359},[35,61350,61351],{"class":306},"\"小米笔记本\"",[35,61353,51633],{"class":359},[35,61355,61356,61358,61360,61362,61364,61367],{"class":37,"line":16996},[35,61357,55628],{"class":359},[35,61359,1501],{"class":51626},[35,61361,53812],{"class":48},[35,61363,544],{"class":359},[35,61365,61366],{"class":306},"\"result-list\"",[35,61368,51633],{"class":359},[35,61370,61371,61374,61376,61379,61381,61384,61386,61389,61392,61394,61396,61398],{"class":37,"line":17010},[35,61372,61373],{"class":359},"            \u003C",[35,61375,17],{"class":51626},[35,61377,61378],{"class":359},">\u003C",[35,61380,734],{"class":51626},[35,61382,61383],{"class":48}," href",[35,61385,544],{"class":359},[35,61387,61388],{"class":306},"\"#\"",[35,61390,61391],{"class":359},">全部商品\u003C\u002F",[35,61393,734],{"class":51626},[35,61395,55640],{"class":359},[35,61397,17],{"class":51626},[35,61399,51633],{"class":359},[35,61401,61402,61404,61406,61408,61410,61412,61414,61416,61419,61421,61423,61425],{"class":37,"line":17030},[35,61403,61373],{"class":359},[35,61405,17],{"class":51626},[35,61407,61378],{"class":359},[35,61409,734],{"class":51626},[35,61411,61383],{"class":48},[35,61413,544],{"class":359},[35,61415,61388],{"class":306},[35,61417,61418],{"class":359},">小米11\u003C\u002F",[35,61420,734],{"class":51626},[35,61422,55640],{"class":359},[35,61424,17],{"class":51626},[35,61426,51633],{"class":359},[35,61428,61429,61431,61433,61435,61437,61439,61441,61443,61446,61448,61450,61452],{"class":37,"line":17036},[35,61430,61373],{"class":359},[35,61432,17],{"class":51626},[35,61434,61378],{"class":359},[35,61436,734],{"class":51626},[35,61438,61383],{"class":48},[35,61440,544],{"class":359},[35,61442,61388],{"class":306},[35,61444,61445],{"class":359},">小米10S\u003C\u002F",[35,61447,734],{"class":51626},[35,61449,55640],{"class":359},[35,61451,17],{"class":51626},[35,61453,51633],{"class":359},[35,61455,61456,61458,61460,61462,61464,61466,61468,61470,61473,61475,61477,61479],{"class":37,"line":17047},[35,61457,61373],{"class":359},[35,61459,17],{"class":51626},[35,61461,61378],{"class":359},[35,61463,734],{"class":51626},[35,61465,61383],{"class":48},[35,61467,544],{"class":359},[35,61469,61388],{"class":306},[35,61471,61472],{"class":359},">小米笔记本\u003C\u002F",[35,61474,734],{"class":51626},[35,61476,55640],{"class":359},[35,61478,17],{"class":51626},[35,61480,51633],{"class":359},[35,61482,61483,61485,61487,61489,61491,61493,61495,61497,61500,61502,61504,61506],{"class":37,"line":17070},[35,61484,61373],{"class":359},[35,61486,17],{"class":51626},[35,61488,61378],{"class":359},[35,61490,734],{"class":51626},[35,61492,61383],{"class":48},[35,61494,544],{"class":359},[35,61496,61388],{"class":306},[35,61498,61499],{"class":359},">小米手机\u003C\u002F",[35,61501,734],{"class":51626},[35,61503,55640],{"class":359},[35,61505,17],{"class":51626},[35,61507,51633],{"class":359},[35,61509,61510,61512,61514,61516,61518,61520,61522,61524,61527,61529,61531,61533],{"class":37,"line":17092},[35,61511,61373],{"class":359},[35,61513,17],{"class":51626},[35,61515,61378],{"class":359},[35,61517,734],{"class":51626},[35,61519,61383],{"class":48},[35,61521,544],{"class":359},[35,61523,61388],{"class":306},[35,61525,61526],{"class":359},">黑鲨4\u003C\u002F",[35,61528,734],{"class":51626},[35,61530,55640],{"class":359},[35,61532,17],{"class":51626},[35,61534,51633],{"class":359},[35,61536,61537,61539,61541,61543,61545,61547,61549,61551,61554,61556,61558,61560],{"class":37,"line":17097},[35,61538,61373],{"class":359},[35,61540,17],{"class":51626},[35,61542,61378],{"class":359},[35,61544,734],{"class":51626},[35,61546,61383],{"class":48},[35,61548,544],{"class":359},[35,61550,61388],{"class":306},[35,61552,61553],{"class":359},">空调\u003C\u002F",[35,61555,734],{"class":51626},[35,61557,55640],{"class":359},[35,61559,17],{"class":51626},[35,61561,51633],{"class":359},[35,61563,61564,61567,61569],{"class":37,"line":17103},[35,61565,61566],{"class":359},"        \u003C\u002F",[35,61568,1501],{"class":51626},[35,61570,51633],{"class":359},[35,61572,61573,61575,61577],{"class":37,"line":17117},[35,61574,52102],{"class":359},[35,61576,51937],{"class":51626},[35,61578,51633],{"class":359},[35,61580,61581,61583,61585],{"class":37,"line":17130},[35,61582,51667],{"class":359},[35,61584,52139],{"class":51626},[35,61586,51633],{"class":359},[35,61588,61589],{"class":37,"line":17135},[35,61590,61591],{"class":41},"        \u002F\u002F 1. 获取元素\n",[35,61593,61594,61597,61599,61601,61603,61605,61607,61610],{"class":37,"line":17149},[35,61595,61596],{"class":495},"        const",[35,61598,60931],{"class":58},[35,61600,13898],{"class":495},[35,61602,54722],{"class":359},[35,61604,54725],{"class":48},[35,61606,499],{"class":359},[35,61608,61609],{"class":306},"'[type=search]'",[35,61611,505],{"class":359},[35,61613,61614,61616,61619,61621,61623,61625,61627,61630],{"class":37,"line":17154},[35,61615,61596],{"class":495},[35,61617,61618],{"class":58}," ul",[35,61620,13898],{"class":495},[35,61622,54722],{"class":359},[35,61624,54725],{"class":48},[35,61626,499],{"class":359},[35,61628,61629],{"class":306},"'.result-list'",[35,61631,505],{"class":359},[35,61633,61634],{"class":37,"line":17160},[35,61635,61636],{"class":41},"        \u002F\u002F console.log(input)\n",[35,61638,61639],{"class":37,"line":17165},[35,61640,61641],{"class":41},"        \u002F\u002F 2. 监听事件 获得焦点\n",[35,61643,61644,61647,61649,61651,61654,61656,61658],{"class":37,"line":17179},[35,61645,61646],{"class":359},"        input.",[35,61648,58139],{"class":48},[35,61650,499],{"class":359},[35,61652,61653],{"class":306},"'focus'",[35,61655,12769],{"class":359},[35,61657,54775],{"class":495},[35,61659,54778],{"class":359},[35,61661,61662],{"class":37,"line":17184},[35,61663,61664],{"class":41},"            \u002F\u002F ul显示\n",[35,61666,61667,61670,61672],{"class":37,"line":17189},[35,61668,61669],{"class":359},"            ul.style.display ",[35,61671,544],{"class":495},[35,61673,61674],{"class":306}," 'block'\n",[35,61676,61677],{"class":37,"line":17203},[35,61678,61679],{"class":41},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[35,61681,61682,61685,61687,61689,61692],{"class":37,"line":17215},[35,61683,61684],{"class":359},"            input.classList.",[35,61686,5668],{"class":48},[35,61688,499],{"class":359},[35,61690,61691],{"class":306},"'search'",[35,61693,505],{"class":359},[35,61695,61696],{"class":37,"line":17220},[35,61697,61698],{"class":359},"        })\n",[35,61700,61701],{"class":37,"line":17233},[35,61702,61703],{"class":41},"        \u002F\u002F 3. 监听事件 失去焦点\n",[35,61705,61706,61708,61710,61712,61715,61717,61719],{"class":37,"line":17238},[35,61707,61646],{"class":359},[35,61709,58139],{"class":48},[35,61711,499],{"class":359},[35,61713,61714],{"class":306},"'blur'",[35,61716,12769],{"class":359},[35,61718,54775],{"class":495},[35,61720,54778],{"class":359},[35,61722,61723,61725,61727],{"class":37,"line":17243},[35,61724,61669],{"class":359},[35,61726,544],{"class":495},[35,61728,61729],{"class":306}," 'none'\n",[35,61731,61732,61734,61736,61738,61740],{"class":37,"line":17248},[35,61733,61684],{"class":359},[35,61735,57332],{"class":48},[35,61737,499],{"class":359},[35,61739,61691],{"class":306},[35,61741,505],{"class":359},[35,61743,61744],{"class":37,"line":17261},[35,61745,61698],{"class":359},[35,61747,61748,61750,61752],{"class":37,"line":17266},[35,61749,52102],{"class":359},[35,61751,52139],{"class":51626},[35,61753,51633],{"class":359},[35,61755,61756,61758,61760],{"class":37,"line":32959},[35,61757,52111],{"class":359},[35,61759,52126],{"class":51626},[35,61761,51633],{"class":359},[35,61763,61764],{"class":37,"line":32965},[35,61765,141],{"emptyLinePlaceholder":140},[35,61767,61768,61770,61772],{"class":37,"line":32971},[35,61769,52111],{"class":359},[35,61771,50961],{"class":51626},[35,61773,51633],{"class":359},[22332,61775,61777],{"id":61776},"_3253-键盘事件","3.2.5.3 键盘事件",[21,61779,61780],{},"评论字数统计案例",[21,61782,61783],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[21,61785,61786],{},"牢记focus伪类选择器",[51670,61788],{"charSet":61789},"UTF-8",[51670,61791],{"name":61792,"content":61793},"viewport","width=device-width, initial-scale=1.0",[51733,61795,61796],{},"Document",[416,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":5521},[1501,61803,61804,61807],{},[17,61805,61806],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[17,61808,61809],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[25,61811,61813],{"className":50959,"code":61812,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,61816,61817,61819,61821,61823],{"class":37,"line":38},[35,61818,51623],{"class":359},[35,61820,51627],{"class":51626},[35,61822,51630],{"class":48},[35,61824,51633],{"class":359},[35,61826,61827,61829,61831,61833,61835,61837],{"class":37,"line":45},[35,61828,1404],{"class":359},[35,61830,50961],{"class":51626},[35,61832,51642],{"class":48},[35,61834,544],{"class":359},[35,61836,51647],{"class":306},[35,61838,51633],{"class":359},[35,61840,61841],{"class":37,"line":55},[35,61842,141],{"emptyLinePlaceholder":140},[35,61844,61845,61847,61849],{"class":37,"line":65},[35,61846,1404],{"class":359},[35,61848,51660],{"class":51626},[35,61850,51633],{"class":359},[35,61852,61853,61855,61857,61859,61861,61863],{"class":37,"line":74},[35,61854,52470],{"class":359},[35,61856,51670],{"class":51626},[35,61858,51673],{"class":48},[35,61860,544],{"class":359},[35,61862,51678],{"class":306},[35,61864,51633],{"class":359},[35,61866,61867,61869,61871,61873,61875,61877,61879,61881,61883],{"class":37,"line":83},[35,61868,52470],{"class":359},[35,61870,51670],{"class":51626},[35,61872,51689],{"class":48},[35,61874,544],{"class":359},[35,61876,51694],{"class":306},[35,61878,51697],{"class":48},[35,61880,544],{"class":359},[35,61882,51702],{"class":306},[35,61884,51633],{"class":359},[35,61886,61887,61889,61891,61893,61895,61897,61899,61901,61903],{"class":37,"line":92},[35,61888,52470],{"class":359},[35,61890,51670],{"class":51626},[35,61892,15254],{"class":48},[35,61894,544],{"class":359},[35,61896,51717],{"class":306},[35,61898,51697],{"class":48},[35,61900,544],{"class":359},[35,61902,51724],{"class":306},[35,61904,51633],{"class":359},[35,61906,61907,61909,61911,61914,61916],{"class":37,"line":101},[35,61908,52470],{"class":359},[35,61910,51733],{"class":51626},[35,61912,61913],{"class":359},">评论回车发布\u003C\u002F",[35,61915,51733],{"class":51626},[35,61917,51633],{"class":359},[35,61919,61920,61922,61924],{"class":37,"line":110},[35,61921,52470],{"class":359},[35,61923,416],{"class":51626},[35,61925,51633],{"class":359},[35,61927,61928,61931],{"class":37,"line":119},[35,61929,61930],{"class":48},"    .wrapper",[35,61932,15906],{"class":359},[35,61934,61935,61938,61940,61942,61944],{"class":37,"line":128},[35,61936,61937],{"class":58},"      min-width",[35,61939,51763],{"class":359},[35,61941,4321],{"class":58},[35,61943,51818],{"class":495},[35,61945,1655],{"class":359},[35,61947,61948,61951,61953,61956,61958],{"class":37,"line":137},[35,61949,61950],{"class":58},"      max-width",[35,61952,51763],{"class":359},[35,61954,61955],{"class":58},"800",[35,61957,51818],{"class":495},[35,61959,1655],{"class":359},[35,61961,61962,61964,61966,61968],{"class":37,"line":144},[35,61963,55335],{"class":58},[35,61965,51763],{"class":359},[35,61967,51803],{"class":58},[35,61969,1655],{"class":359},[35,61971,61972,61974,61976,61978],{"class":37,"line":150},[35,61973,55346],{"class":58},[35,61975,51763],{"class":359},[35,61977,51906],{"class":58},[35,61979,1655],{"class":359},[35,61981,61982],{"class":37,"line":159},[35,61983,2528],{"class":359},[35,61985,61986],{"class":37,"line":168},[35,61987,141],{"emptyLinePlaceholder":140},[35,61989,61990,61993],{"class":37,"line":177},[35,61991,61992],{"class":48},"    .avatar",[35,61994,15906],{"class":359},[35,61996,61997,61999,62001,62003,62005],{"class":37,"line":182},[35,61998,55097],{"class":58},[35,62000,51763],{"class":359},[35,62002,1101],{"class":58},[35,62004,51818],{"class":495},[35,62006,1655],{"class":359},[35,62008,62009,62011,62013,62015,62017],{"class":37,"line":188},[35,62010,55111],{"class":58},[35,62012,51763],{"class":359},[35,62014,1101],{"class":58},[35,62016,51818],{"class":495},[35,62018,1655],{"class":359},[35,62020,62021,62023,62025,62027,62029],{"class":37,"line":197},[35,62022,55460],{"class":58},[35,62024,51763],{"class":359},[35,62026,1150],{"class":58},[35,62028,823],{"class":495},[35,62030,1655],{"class":359},[35,62032,62033,62036,62038,62041],{"class":37,"line":206},[35,62034,62035],{"class":58},"      overflow",[35,62037,51763],{"class":359},[35,62039,62040],{"class":58},"hidden",[35,62042,1655],{"class":359},[35,62044,62045,62048,62050,62053,62055,62058,62060,62063,62065,62067,62070],{"class":37,"line":215},[35,62046,62047],{"class":58},"      background",[35,62049,51763],{"class":359},[35,62051,62052],{"class":58},"url",[35,62054,499],{"class":359},[35,62056,62057],{"class":5550},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[35,62059,14048],{"class":359},[35,62061,62062],{"class":58},"no-repeat",[35,62064,17478],{"class":58},[35,62066,25310],{"class":359},[35,62068,62069],{"class":58},"cover",[35,62071,1655],{"class":359},[35,62073,62074,62077,62079,62081,62083],{"class":37,"line":224},[35,62075,62076],{"class":58},"      margin-right",[35,62078,51763],{"class":359},[35,62080,1194],{"class":58},[35,62082,51818],{"class":495},[35,62084,1655],{"class":359},[35,62086,62087],{"class":37,"line":233},[35,62088,2528],{"class":359},[35,62090,62091],{"class":37,"line":238},[35,62092,141],{"emptyLinePlaceholder":140},[35,62094,62095,62097,62100],{"class":37,"line":244},[35,62096,61930],{"class":48},[35,62098,62099],{"class":51626}," textarea",[35,62101,15906],{"class":359},[35,62103,62104,62107,62109,62111],{"class":37,"line":253},[35,62105,62106],{"class":58},"      outline",[35,62108,51763],{"class":359},[35,62110,55063],{"class":58},[35,62112,1655],{"class":359},[35,62114,62115,62118,62120,62123],{"class":37,"line":262},[35,62116,62117],{"class":58},"      border-color",[35,62119,51763],{"class":359},[35,62121,62122],{"class":58},"transparent",[35,62124,1655],{"class":359},[35,62126,62127,62130,62132,62134],{"class":37,"line":271},[35,62128,62129],{"class":58},"      resize",[35,62131,51763],{"class":359},[35,62133,55063],{"class":58},[35,62135,1655],{"class":359},[35,62137,62138,62140,62142,62145],{"class":37,"line":280},[35,62139,62047],{"class":58},[35,62141,51763],{"class":359},[35,62143,62144],{"class":58},"#f5f5f5",[35,62146,1655],{"class":359},[35,62148,62149,62151,62153,62155,62157],{"class":37,"line":289},[35,62150,55460],{"class":58},[35,62152,51763],{"class":359},[35,62154,789],{"class":58},[35,62156,51818],{"class":495},[35,62158,1655],{"class":359},[35,62160,62161,62164,62166,62168],{"class":37,"line":294},[35,62162,62163],{"class":58},"      flex",[35,62165,51763],{"class":359},[35,62167,713],{"class":58},[35,62169,1655],{"class":359},[35,62171,62172,62174,62176,62178,62180],{"class":37,"line":300},[35,62173,55021],{"class":58},[35,62175,51763],{"class":359},[35,62177,940],{"class":58},[35,62179,51818],{"class":495},[35,62181,1655],{"class":359},[35,62183,62184,62187,62189,62191,62194,62196],{"class":37,"line":313},[35,62185,62186],{"class":58},"      transition",[35,62188,51763],{"class":359},[35,62190,28449],{"class":58},[35,62192,62193],{"class":58}," 0.5",[35,62195,1189],{"class":495},[35,62197,1655],{"class":359},[35,62199,62200,62202,62204,62206,62208],{"class":37,"line":324},[35,62201,55111],{"class":58},[35,62203,51763],{"class":359},[35,62205,1445],{"class":58},[35,62207,51818],{"class":495},[35,62209,1655],{"class":359},[35,62211,62212],{"class":37,"line":2955},[35,62213,2528],{"class":359},[35,62215,62216],{"class":37,"line":8282},[35,62217,141],{"emptyLinePlaceholder":140},[35,62219,62220,62222,62224,62227],{"class":37,"line":8306},[35,62221,61930],{"class":48},[35,62223,62099],{"class":51626},[35,62225,62226],{"class":48},":focus",[35,62228,15906],{"class":359},[35,62230,62231,62233,62235,62238],{"class":37,"line":8311},[35,62232,62117],{"class":58},[35,62234,51763],{"class":359},[35,62236,62237],{"class":58},"#e4e4e4",[35,62239,1655],{"class":359},[35,62241,62242,62244,62246,62248],{"class":37,"line":8317},[35,62243,62047],{"class":58},[35,62245,51763],{"class":359},[35,62247,61168],{"class":58},[35,62249,1655],{"class":359},[35,62251,62252,62254,62256,62258,62260],{"class":37,"line":8344},[35,62253,55111],{"class":58},[35,62255,51763],{"class":359},[35,62257,1150],{"class":58},[35,62259,51818],{"class":495},[35,62261,1655],{"class":359},[35,62263,62264],{"class":37,"line":8349},[35,62265,2528],{"class":359},[35,62267,62268],{"class":37,"line":8355},[35,62269,141],{"emptyLinePlaceholder":140},[35,62271,62272,62274,62276],{"class":37,"line":8367},[35,62273,61930],{"class":48},[35,62275,57793],{"class":51626},[35,62277,15906],{"class":359},[35,62279,62280,62282,62284,62287],{"class":37,"line":8379},[35,62281,62047],{"class":58},[35,62283,51763],{"class":359},[35,62285,62286],{"class":58},"#00aeec",[35,62288,1655],{"class":359},[35,62290,62291,62293,62295,62297],{"class":37,"line":8391},[35,62292,57742],{"class":58},[35,62294,51763],{"class":359},[35,62296,61168],{"class":58},[35,62298,1655],{"class":359},[35,62300,62301,62304,62306,62308],{"class":37,"line":10050},[35,62302,62303],{"class":58},"      border",[35,62305,51763],{"class":359},[35,62307,55063],{"class":58},[35,62309,1655],{"class":359},[35,62311,62312,62314,62316,62318,62320],{"class":37,"line":10075},[35,62313,55460],{"class":58},[35,62315,51763],{"class":359},[35,62317,789],{"class":58},[35,62319,51818],{"class":495},[35,62321,1655],{"class":359},[35,62323,62324,62327,62329,62331,62333],{"class":37,"line":10098},[35,62325,62326],{"class":58},"      margin-left",[35,62328,51763],{"class":359},[35,62330,940],{"class":58},[35,62332,51818],{"class":495},[35,62334,1655],{"class":359},[35,62336,62337,62339,62341,62343,62345],{"class":37,"line":10122},[35,62338,55097],{"class":58},[35,62340,51763],{"class":359},[35,62342,850],{"class":58},[35,62344,51818],{"class":495},[35,62346,1655],{"class":359},[35,62348,62349,62352,62354,62357],{"class":37,"line":10127},[35,62350,62351],{"class":58},"      cursor",[35,62353,51763],{"class":359},[35,62355,62356],{"class":58},"pointer",[35,62358,1655],{"class":359},[35,62360,62361],{"class":37,"line":10132},[35,62362,2528],{"class":359},[35,62364,62365],{"class":37,"line":10137},[35,62366,141],{"emptyLinePlaceholder":140},[35,62368,62369,62371,62374],{"class":37,"line":10146},[35,62370,61930],{"class":48},[35,62372,62373],{"class":48}," .total",[35,62375,15906],{"class":359},[35,62377,62378,62380,62382,62384,62386],{"class":37,"line":10151},[35,62379,62076],{"class":58},[35,62381,51763],{"class":359},[35,62383,1106],{"class":58},[35,62385,51818],{"class":495},[35,62387,1655],{"class":359},[35,62389,62390,62392,62394,62397],{"class":37,"line":10157},[35,62391,57742],{"class":58},[35,62393,51763],{"class":359},[35,62395,62396],{"class":58},"#999",[35,62398,1655],{"class":359},[35,62400,62401,62404,62406,62408,62410],{"class":37,"line":10178},[35,62402,62403],{"class":58},"      margin-top",[35,62405,51763],{"class":359},[35,62407,372],{"class":58},[35,62409,51818],{"class":495},[35,62411,1655],{"class":359},[35,62413,62414,62417,62419,62421],{"class":37,"line":10184},[35,62415,62416],{"class":58},"      opacity",[35,62418,51763],{"class":359},[35,62420,687],{"class":58},[35,62422,1655],{"class":359},[35,62424,62425,62427,62429,62431,62433,62435],{"class":37,"line":10198},[35,62426,62186],{"class":58},[35,62428,51763],{"class":359},[35,62430,28449],{"class":58},[35,62432,62193],{"class":58},[35,62434,1189],{"class":495},[35,62436,1655],{"class":359},[35,62438,62439],{"class":37,"line":10204},[35,62440,2528],{"class":359},[35,62442,62443],{"class":37,"line":10231},[35,62444,141],{"emptyLinePlaceholder":140},[35,62446,62447,62450],{"class":37,"line":10240},[35,62448,62449],{"class":48},"    .list",[35,62451,15906],{"class":359},[35,62453,62454,62456,62458,62460,62462],{"class":37,"line":10246},[35,62455,61937],{"class":58},[35,62457,51763],{"class":359},[35,62459,4321],{"class":58},[35,62461,51818],{"class":495},[35,62463,1655],{"class":359},[35,62465,62466,62468,62470,62472,62474],{"class":37,"line":10254},[35,62467,61950],{"class":58},[35,62469,51763],{"class":359},[35,62471,61955],{"class":58},[35,62473,51818],{"class":495},[35,62475,1655],{"class":359},[35,62477,62478,62480,62482,62484],{"class":37,"line":10259},[35,62479,55335],{"class":58},[35,62481,51763],{"class":359},[35,62483,51803],{"class":58},[35,62485,1655],{"class":359},[35,62487,62488],{"class":37,"line":16938},[35,62489,2528],{"class":359},[35,62491,62492],{"class":37,"line":16944},[35,62493,141],{"emptyLinePlaceholder":140},[35,62495,62496,62498,62501],{"class":37,"line":16967},[35,62497,62449],{"class":48},[35,62499,62500],{"class":48}," .item",[35,62502,15906],{"class":359},[35,62504,62505,62507,62509,62511,62513],{"class":37,"line":16973},[35,62506,55097],{"class":58},[35,62508,51763],{"class":359},[35,62510,807],{"class":58},[35,62512,823],{"class":495},[35,62514,1655],{"class":359},[35,62516,62517,62519,62521,62523],{"class":37,"line":16996},[35,62518,55335],{"class":58},[35,62520,51763],{"class":359},[35,62522,51803],{"class":58},[35,62524,1655],{"class":359},[35,62526,62527],{"class":37,"line":17010},[35,62528,2528],{"class":359},[35,62530,62531],{"class":37,"line":17030},[35,62532,141],{"emptyLinePlaceholder":140},[35,62534,62535,62537,62539,62542],{"class":37,"line":17036},[35,62536,62449],{"class":48},[35,62538,62500],{"class":48},[35,62540,62541],{"class":48}," .info",[35,62543,15906],{"class":359},[35,62545,62546,62548,62550,62552],{"class":37,"line":17047},[35,62547,62163],{"class":58},[35,62549,51763],{"class":359},[35,62551,713],{"class":58},[35,62553,1655],{"class":359},[35,62555,62556,62559,62561,62563,62565,62568,62571],{"class":37,"line":17070},[35,62557,62558],{"class":58},"      border-bottom",[35,62560,51763],{"class":359},[35,62562,713],{"class":58},[35,62564,51818],{"class":495},[35,62566,62567],{"class":58}," dashed",[35,62569,62570],{"class":58}," #e4e4e4",[35,62572,1655],{"class":359},[35,62574,62575,62578,62580,62582,62584],{"class":37,"line":17092},[35,62576,62577],{"class":58},"      padding-bottom",[35,62579,51763],{"class":359},[35,62581,940],{"class":58},[35,62583,51818],{"class":495},[35,62585,1655],{"class":359},[35,62587,62588],{"class":37,"line":17097},[35,62589,2528],{"class":359},[35,62591,62592],{"class":37,"line":17103},[35,62593,141],{"emptyLinePlaceholder":140},[35,62595,62596,62598,62600,62602],{"class":37,"line":17117},[35,62597,62449],{"class":48},[35,62599,62500],{"class":48},[35,62601,7159],{"class":51626},[35,62603,15906],{"class":359},[35,62605,62606,62608,62610,62612],{"class":37,"line":17130},[35,62607,55032],{"class":58},[35,62609,51763],{"class":359},[35,62611,687],{"class":58},[35,62613,1655],{"class":359},[35,62615,62616],{"class":37,"line":17135},[35,62617,2528],{"class":359},[35,62619,62620],{"class":37,"line":17149},[35,62621,141],{"emptyLinePlaceholder":140},[35,62623,62624,62626,62628,62631],{"class":37,"line":17154},[35,62625,62449],{"class":48},[35,62627,62500],{"class":48},[35,62629,62630],{"class":48}," .name",[35,62632,15906],{"class":359},[35,62634,62635,62637,62639,62642],{"class":37,"line":17160},[35,62636,57742],{"class":58},[35,62638,51763],{"class":359},[35,62640,62641],{"class":58},"#FB7299",[35,62643,1655],{"class":359},[35,62645,62646,62648,62650,62652,62654],{"class":37,"line":17165},[35,62647,55248],{"class":58},[35,62649,51763],{"class":359},[35,62651,1043],{"class":58},[35,62653,51818],{"class":495},[35,62655,1655],{"class":359},[35,62657,62658,62661,62663,62666],{"class":37,"line":17179},[35,62659,62660],{"class":58},"      font-weight",[35,62662,51763],{"class":359},[35,62664,62665],{"class":58},"bold",[35,62667,1655],{"class":359},[35,62669,62670],{"class":37,"line":17184},[35,62671,2528],{"class":359},[35,62673,62674],{"class":37,"line":17189},[35,62675,141],{"emptyLinePlaceholder":140},[35,62677,62678,62680,62682,62685],{"class":37,"line":17203},[35,62679,62449],{"class":48},[35,62681,62500],{"class":48},[35,62683,62684],{"class":48}," .text",[35,62686,15906],{"class":359},[35,62688,62689,62691,62693,62696],{"class":37,"line":17215},[35,62690,57742],{"class":58},[35,62692,51763],{"class":359},[35,62694,62695],{"class":58},"#333",[35,62697,1655],{"class":359},[35,62699,62700,62702,62704,62706,62708,62710],{"class":37,"line":17220},[35,62701,55021],{"class":58},[35,62703,51763],{"class":359},[35,62705,940],{"class":58},[35,62707,51818],{"class":495},[35,62709,4427],{"class":58},[35,62711,1655],{"class":359},[35,62713,62714],{"class":37,"line":17233},[35,62715,2528],{"class":359},[35,62717,62718],{"class":37,"line":17238},[35,62719,141],{"emptyLinePlaceholder":140},[35,62721,62722,62724,62726,62729],{"class":37,"line":17243},[35,62723,62449],{"class":48},[35,62725,62500],{"class":48},[35,62727,62728],{"class":48}," .time",[35,62730,15906],{"class":359},[35,62732,62733,62735,62737,62739],{"class":37,"line":17248},[35,62734,57742],{"class":58},[35,62736,51763],{"class":359},[35,62738,62396],{"class":58},[35,62740,1655],{"class":359},[35,62742,62743,62745,62747,62749,62751],{"class":37,"line":17261},[35,62744,55248],{"class":58},[35,62746,51763],{"class":359},[35,62748,992],{"class":58},[35,62750,51818],{"class":495},[35,62752,1655],{"class":359},[35,62754,62755],{"class":37,"line":17266},[35,62756,2528],{"class":359},[35,62758,62759,62761,62763],{"class":37,"line":32959},[35,62760,52743],{"class":359},[35,62762,416],{"class":51626},[35,62764,51633],{"class":359},[35,62766,62767,62769,62771],{"class":37,"line":32965},[35,62768,52111],{"class":359},[35,62770,51660],{"class":51626},[35,62772,51633],{"class":359},[35,62774,62775],{"class":37,"line":32971},[35,62776,141],{"emptyLinePlaceholder":140},[35,62778,62779,62781,62783],{"class":37,"line":32977},[35,62780,1404],{"class":359},[35,62782,52126],{"class":51626},[35,62784,51633],{"class":359},[35,62786,62787,62789,62791,62793,62795,62798],{"class":37,"line":32983},[35,62788,52470],{"class":359},[35,62790,51937],{"class":51626},[35,62792,53812],{"class":48},[35,62794,544],{"class":359},[35,62796,62797],{"class":306},"\"wrapper\"",[35,62799,51633],{"class":359},[35,62801,62802,62804,62806,62808,62810,62813,62815,62817],{"class":37,"line":32994},[35,62803,51667],{"class":359},[35,62805,935],{"class":51626},[35,62807,53812],{"class":48},[35,62809,544],{"class":359},[35,62811,62812],{"class":306},"\"avatar\"",[35,62814,55640],{"class":359},[35,62816,935],{"class":51626},[35,62818,51633],{"class":359},[35,62820,62821,62823,62825,62827,62829,62832,62834,62836,62839,62841,62843,62845,62848,62850,62853,62855,62857],{"class":37,"line":33000},[35,62822,51667],{"class":359},[35,62824,54614],{"class":51626},[35,62826,15293],{"class":48},[35,62828,544],{"class":359},[35,62830,62831],{"class":306},"\"tx\"",[35,62833,61346],{"class":48},[35,62835,544],{"class":359},[35,62837,62838],{"class":306},"\"发一条友善的评论\"",[35,62840,54637],{"class":48},[35,62842,544],{"class":359},[35,62844,4035],{"class":306},[35,62846,62847],{"class":48}," maxlength",[35,62849,544],{"class":359},[35,62851,62852],{"class":306},"\"200\"",[35,62854,55640],{"class":359},[35,62856,54614],{"class":51626},[35,62858,51633],{"class":359},[35,62860,62861,62863,62865,62868,62870],{"class":37,"line":33020},[35,62862,51667],{"class":359},[35,62864,54213],{"class":51626},[35,62866,62867],{"class":359},">发布\u003C\u002F",[35,62869,54213],{"class":51626},[35,62871,51633],{"class":359},[35,62873,62874,62876,62878],{"class":37,"line":33026},[35,62875,52743],{"class":359},[35,62877,51937],{"class":51626},[35,62879,51633],{"class":359},[35,62881,62882,62884,62886,62888,62890,62892],{"class":37,"line":33037},[35,62883,52470],{"class":359},[35,62885,51937],{"class":51626},[35,62887,53812],{"class":48},[35,62889,544],{"class":359},[35,62891,62797],{"class":306},[35,62893,51633],{"class":359},[35,62895,62896,62898,62900,62902,62904,62907,62910,62912],{"class":37,"line":33043},[35,62897,51667],{"class":359},[35,62899,35],{"class":51626},[35,62901,53812],{"class":48},[35,62903,544],{"class":359},[35,62905,62906],{"class":306},"\"total\"",[35,62908,62909],{"class":359},">0\u002F200字\u003C\u002F",[35,62911,35],{"class":51626},[35,62913,51633],{"class":359},[35,62915,62916,62918,62920],{"class":37,"line":33049},[35,62917,52743],{"class":359},[35,62919,51937],{"class":51626},[35,62921,51633],{"class":359},[35,62923,62924,62926,62928,62930,62932,62935],{"class":37,"line":33055},[35,62925,52470],{"class":359},[35,62927,51937],{"class":51626},[35,62929,53812],{"class":48},[35,62931,544],{"class":359},[35,62933,62934],{"class":306},"\"list\"",[35,62936,51633],{"class":359},[35,62938,62939,62941,62943,62945,62947,62950,62953,62955,62958],{"class":37,"line":33061},[35,62940,51667],{"class":359},[35,62942,51937],{"class":51626},[35,62944,53812],{"class":48},[35,62946,544],{"class":359},[35,62948,62949],{"class":306},"\"item\"",[35,62951,62952],{"class":48}," style",[35,62954,544],{"class":359},[35,62956,62957],{"class":306},"\"display: none;\"",[35,62959,51633],{"class":359},[35,62961,62962,62964,62966,62968,62970,62972,62974,62976],{"class":37,"line":33067},[35,62963,55560],{"class":359},[35,62965,935],{"class":51626},[35,62967,53812],{"class":48},[35,62969,544],{"class":359},[35,62971,62812],{"class":306},[35,62973,55640],{"class":359},[35,62975,935],{"class":51626},[35,62977,51633],{"class":359},[35,62979,62980,62982,62984,62986,62988,62991],{"class":37,"line":33073},[35,62981,55560],{"class":359},[35,62983,51937],{"class":51626},[35,62985,53812],{"class":48},[35,62987,544],{"class":359},[35,62989,62990],{"class":306},"\"info\"",[35,62992,51633],{"class":359},[35,62994,62995,62997,62999,63001,63003,63006,63009,63011],{"class":37,"line":33079},[35,62996,55628],{"class":359},[35,62998,21],{"class":51626},[35,63000,53812],{"class":48},[35,63002,544],{"class":359},[35,63004,63005],{"class":306},"\"name\"",[35,63007,63008],{"class":359},">清风徐来\u003C\u002F",[35,63010,21],{"class":51626},[35,63012,51633],{"class":359},[35,63014,63015,63017,63019,63021,63023,63026,63029,63031],{"class":37,"line":33099},[35,63016,55628],{"class":359},[35,63018,21],{"class":51626},[35,63020,53812],{"class":48},[35,63022,544],{"class":359},[35,63024,63025],{"class":306},"\"text\"",[35,63027,63028],{"class":359},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[35,63030,21],{"class":51626},[35,63032,51633],{"class":359},[35,63034,63035,63037,63039,63041,63043,63046,63049,63051],{"class":37,"line":33105},[35,63036,55628],{"class":359},[35,63038,21],{"class":51626},[35,63040,53812],{"class":48},[35,63042,544],{"class":359},[35,63044,63045],{"class":306},"\"time\"",[35,63047,63048],{"class":359},">2022-10-10 20:29:21\u003C\u002F",[35,63050,21],{"class":51626},[35,63052,51633],{"class":359},[35,63054,63055,63057,63059],{"class":37,"line":33121},[35,63056,55733],{"class":359},[35,63058,51937],{"class":51626},[35,63060,51633],{"class":359},[35,63062,63063,63065,63067],{"class":37,"line":33127},[35,63064,52102],{"class":359},[35,63066,51937],{"class":51626},[35,63068,51633],{"class":359},[35,63070,63071,63073,63075],{"class":37,"line":33141},[35,63072,52743],{"class":359},[35,63074,51937],{"class":51626},[35,63076,51633],{"class":359},[35,63078,63079,63081,63083],{"class":37,"line":33147},[35,63080,52470],{"class":359},[35,63082,52139],{"class":51626},[35,63084,51633],{"class":359},[35,63086,63087,63089,63092,63094,63096,63098,63100,63103],{"class":37,"line":33162},[35,63088,11555],{"class":495},[35,63090,63091],{"class":58}," tx",[35,63093,13898],{"class":495},[35,63095,54722],{"class":359},[35,63097,54725],{"class":48},[35,63099,499],{"class":359},[35,63101,63102],{"class":306},"'#tx'",[35,63104,505],{"class":359},[35,63106,63107,63109,63112,63114,63116,63118,63120,63123],{"class":37,"line":33168},[35,63108,11555],{"class":495},[35,63110,63111],{"class":58}," total",[35,63113,13898],{"class":495},[35,63115,54722],{"class":359},[35,63117,54725],{"class":48},[35,63119,499],{"class":359},[35,63121,63122],{"class":306},"'.total'",[35,63124,505],{"class":359},[35,63126,63127],{"class":37,"line":33177},[35,63128,63129],{"class":41},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[35,63131,63132,63135,63137,63139,63141,63143,63145],{"class":37,"line":33183},[35,63133,63134],{"class":359},"    tx.",[35,63136,58139],{"class":48},[35,63138,499],{"class":359},[35,63140,61653],{"class":306},[35,63142,12769],{"class":359},[35,63144,54775],{"class":495},[35,63146,54778],{"class":359},[35,63148,63149,63152,63154],{"class":37,"line":33192},[35,63150,63151],{"class":359},"      total.style.opacity ",[35,63153,544],{"class":495},[35,63155,56025],{"class":58},[35,63157,63158],{"class":37,"line":33198},[35,63159,33787],{"class":359},[35,63161,63162],{"class":37,"line":33204},[35,63163,63164],{"class":41},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[35,63166,63167,63169,63171,63173,63175,63177,63179],{"class":37,"line":33213},[35,63168,63134],{"class":359},[35,63170,58139],{"class":48},[35,63172,499],{"class":359},[35,63174,61714],{"class":306},[35,63176,12769],{"class":359},[35,63178,54775],{"class":495},[35,63180,54778],{"class":359},[35,63182,63183,63185,63187],{"class":37,"line":33219},[35,63184,63151],{"class":359},[35,63186,544],{"class":495},[35,63188,47659],{"class":58},[35,63190,63191],{"class":37,"line":33230},[35,63192,33787],{"class":359},[35,63194,63195],{"class":37,"line":33236},[35,63196,63197],{"class":41},"    \u002F\u002F 3. 检测用户输入\n",[35,63199,63200,63202,63204,63206,63209,63211,63213],{"class":37,"line":33255},[35,63201,63134],{"class":359},[35,63203,58139],{"class":48},[35,63205,499],{"class":359},[35,63207,63208],{"class":306},"'input'",[35,63210,12769],{"class":359},[35,63212,54775],{"class":495},[35,63214,54778],{"class":359},[35,63216,63217],{"class":37,"line":33261},[35,63218,63219],{"class":41},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[35,63221,63222,63225,63227,63230,63233,63235,63238,63240,63242],{"class":37,"line":33272},[35,63223,63224],{"class":359},"      total.innerHTML ",[35,63226,544],{"class":495},[35,63228,63229],{"class":306}," `${",[35,63231,63232],{"class":359},"tx",[35,63234,1052],{"class":306},[35,63236,63237],{"class":359},"value",[35,63239,1052],{"class":306},[35,63241,52294],{"class":58},[35,63243,63244],{"class":306},"}\u002F200字`\n",[35,63246,63247],{"class":37,"line":33278},[35,63248,33787],{"class":359},[35,63250,63251],{"class":37,"line":33298},[35,63252,141],{"emptyLinePlaceholder":140},[35,63254,63255],{"class":37,"line":33314},[35,63256,63257],{"class":41},"    \u002F\u002F const str = 'andy'\n",[35,63259,63260],{"class":37,"line":33320},[35,63261,63262],{"class":41},"    \u002F\u002F console.log(str.length)\n",[35,63264,63265,63267,63269],{"class":37,"line":33334},[35,63266,52743],{"class":359},[35,63268,52139],{"class":51626},[35,63270,51633],{"class":359},[35,63272,63273,63275,63277],{"class":37,"line":33340},[35,63274,52111],{"class":359},[35,63276,52126],{"class":51626},[35,63278,51633],{"class":359},[35,63280,63281],{"class":37,"line":33346},[35,63282,141],{"emptyLinePlaceholder":140},[35,63284,63285,63287,63289],{"class":37,"line":33357},[35,63286,52111],{"class":359},[35,63288,50961],{"class":51626},[35,63290,51633],{"class":359},[22332,63292,63294],{"id":63293},"_3254-change事件","3.2.5.4 change事件",[21,63296,63297],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[21,63299,63300],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[21,63302,63303],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[25,63305,63307],{"className":50959,"code":63306,"language":50961,"meta":30,"style":30},"\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",[32,63308,63309,63319,63333,63337,63345,63359,63379,63391,63399,63403,63411,63425,63433,63451,63469,63481,63485,63493,63501,63505],{"__ignoreMap":30},[35,63310,63311,63313,63315,63317],{"class":37,"line":38},[35,63312,51623],{"class":359},[35,63314,51627],{"class":51626},[35,63316,51630],{"class":48},[35,63318,51633],{"class":359},[35,63320,63321,63323,63325,63327,63329,63331],{"class":37,"line":45},[35,63322,1404],{"class":359},[35,63324,50961],{"class":51626},[35,63326,51642],{"class":48},[35,63328,544],{"class":359},[35,63330,51647],{"class":306},[35,63332,51633],{"class":359},[35,63334,63335],{"class":37,"line":55},[35,63336,141],{"emptyLinePlaceholder":140},[35,63338,63339,63341,63343],{"class":37,"line":65},[35,63340,1404],{"class":359},[35,63342,51660],{"class":51626},[35,63344,51633],{"class":359},[35,63346,63347,63349,63351,63353,63355,63357],{"class":37,"line":74},[35,63348,52470],{"class":359},[35,63350,51670],{"class":51626},[35,63352,51673],{"class":48},[35,63354,544],{"class":359},[35,63356,51678],{"class":306},[35,63358,51633],{"class":359},[35,63360,63361,63363,63365,63367,63369,63371,63373,63375,63377],{"class":37,"line":83},[35,63362,52470],{"class":359},[35,63364,51670],{"class":51626},[35,63366,15254],{"class":48},[35,63368,544],{"class":359},[35,63370,51717],{"class":306},[35,63372,51697],{"class":48},[35,63374,544],{"class":359},[35,63376,51724],{"class":306},[35,63378,51633],{"class":359},[35,63380,63381,63383,63385,63387,63389],{"class":37,"line":92},[35,63382,52470],{"class":359},[35,63384,51733],{"class":51626},[35,63386,51736],{"class":359},[35,63388,51733],{"class":51626},[35,63390,51633],{"class":359},[35,63392,63393,63395,63397],{"class":37,"line":101},[35,63394,52111],{"class":359},[35,63396,51660],{"class":51626},[35,63398,51633],{"class":359},[35,63400,63401],{"class":37,"line":110},[35,63402,141],{"emptyLinePlaceholder":140},[35,63404,63405,63407,63409],{"class":37,"line":119},[35,63406,1404],{"class":359},[35,63408,52126],{"class":51626},[35,63410,51633],{"class":359},[35,63412,63413,63415,63417,63419,63421,63423],{"class":37,"line":128},[35,63414,52470],{"class":359},[35,63416,54147],{"class":51626},[35,63418,54150],{"class":48},[35,63420,544],{"class":359},[35,63422,63025],{"class":306},[35,63424,51633],{"class":359},[35,63426,63427,63429,63431],{"class":37,"line":137},[35,63428,52470],{"class":359},[35,63430,52139],{"class":51626},[35,63432,51633],{"class":359},[35,63434,63435,63437,63439,63441,63443,63445,63447,63449],{"class":37,"line":144},[35,63436,11555],{"class":495},[35,63438,60931],{"class":58},[35,63440,13898],{"class":495},[35,63442,54722],{"class":359},[35,63444,54725],{"class":48},[35,63446,499],{"class":359},[35,63448,63208],{"class":306},[35,63450,505],{"class":359},[35,63452,63453,63456,63458,63460,63463,63465,63467],{"class":37,"line":150},[35,63454,63455],{"class":359},"    input.",[35,63457,58139],{"class":48},[35,63459,499],{"class":359},[35,63461,63462],{"class":306},"'change'",[35,63464,12769],{"class":359},[35,63466,54775],{"class":495},[35,63468,54778],{"class":359},[35,63470,63471,63473,63475,63477,63479],{"class":37,"line":159},[35,63472,58570],{"class":359},[35,63474,58573],{"class":48},[35,63476,499],{"class":359},[35,63478,1087],{"class":58},[35,63480,505],{"class":359},[35,63482,63483],{"class":37,"line":168},[35,63484,33787],{"class":359},[35,63486,63487,63489,63491],{"class":37,"line":177},[35,63488,52743],{"class":359},[35,63490,52139],{"class":51626},[35,63492,51633],{"class":359},[35,63494,63495,63497,63499],{"class":37,"line":182},[35,63496,52111],{"class":359},[35,63498,52126],{"class":51626},[35,63500,51633],{"class":359},[35,63502,63503],{"class":37,"line":188},[35,63504,141],{"emptyLinePlaceholder":140},[35,63506,63507,63509,63511],{"class":37,"line":197},[35,63508,52111],{"class":359},[35,63510,50961],{"class":51626},[35,63512,51633],{"class":359},[21,63514,63515],{},"总结：内容发生改变才回去触发",[465,63517,63519],{"id":63518},"_326-事件对象","3.2.6 事件对象",[22332,63521,63523],{"id":63522},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[21,63525,63526],{},[1823,63527],{"alt":30,"src":63528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[21,63530,63531],{},[1823,63532],{"alt":30,"src":63533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[21,63535,63536],{},"点击一次，就输出了事件对象，它是个对象",[21,63538,63539],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[21,63541,63542],{},[1823,63543],{"alt":30,"src":63544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22332,63546,63548],{"id":63547},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[21,63550,63551],{},[1823,63552],{"alt":30,"src":63553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[21,63555,63556],{},"实现按特殊字符才是实现打印输出效果：",[25,63558,63560],{"className":53393,"code":63559,"language":53395,"meta":30,"style":30},"\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",[32,63561,63562,63570,63575,63589,63597,63602,63607,63612,63617,63622,63627,63632,63637,63642,63646,63650,63658],{"__ignoreMap":30},[35,63563,63564,63566,63568],{"class":37,"line":38},[35,63565,1404],{"class":359},[35,63567,52126],{"class":51626},[35,63569,51633],{"class":359},[35,63571,63572],{"class":37,"line":45},[35,63573,63574],{"class":41},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[35,63576,63577,63579,63581,63583,63585,63587],{"class":37,"line":55},[35,63578,52470],{"class":359},[35,63580,54147],{"class":51626},[35,63582,54150],{"class":48},[35,63584,544],{"class":359},[35,63586,63025],{"class":306},[35,63588,51633],{"class":359},[35,63590,63591,63593,63595],{"class":37,"line":65},[35,63592,52470],{"class":359},[35,63594,52139],{"class":51626},[35,63596,51633],{"class":359},[35,63598,63599],{"class":37,"line":74},[35,63600,63601],{"class":359},"    \u002F\u002F const btn = document.querySelector('button')\n",[35,63603,63604],{"class":37,"line":83},[35,63605,63606],{"class":359},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[35,63608,63609],{"class":37,"line":92},[35,63610,63611],{"class":359},"    \u002F\u002F   console.log(e);\n",[35,63613,63614],{"class":37,"line":101},[35,63615,63616],{"class":359},"    \u002F\u002F })\n",[35,63618,63619],{"class":37,"line":110},[35,63620,63621],{"class":359},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[35,63623,63624],{"class":37,"line":119},[35,63625,63626],{"class":359},"    const input = document.querySelector('input')\n",[35,63628,63629],{"class":37,"line":128},[35,63630,63631],{"class":359},"    input.addEventListener('keyup', function (e) {\n",[35,63633,63634],{"class":37,"line":137},[35,63635,63636],{"class":359},"      if (e.key === 'Enter') {\n",[35,63638,63639],{"class":37,"line":144},[35,63640,63641],{"class":359},"        console.log('我按下了回车键')\n",[35,63643,63644],{"class":37,"line":150},[35,63645,52724],{"class":359},[35,63647,63648],{"class":37,"line":159},[35,63649,33787],{"class":359},[35,63651,63652,63654,63656],{"class":37,"line":168},[35,63653,52743],{"class":359},[35,63655,52139],{"class":51626},[35,63657,51633],{"class":359},[35,63659,63660,63662,63664],{"class":37,"line":177},[35,63661,52111],{"class":359},[35,63663,52126],{"class":51626},[35,63665,51633],{"class":359},[22332,63667,63669],{"id":63668},"_3263-trim方法","3.2.6.3 trim方法",[21,63671,63672],{},[1823,63673],{"alt":30,"src":63674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[21,63676,63677],{},[1823,63678],{"alt":30,"src":63679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[21,63681,63682],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[21,63684,63685],{},"str.trim()",[465,63687,63689],{"id":63688},"_327-环境对象","3.2.7 环境对象",[21,63691,63692],{},[1823,63693],{"alt":30,"src":63694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[21,63696,63697],{},[1823,63698],{"alt":30,"src":63699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[21,63701,63702],{},[1823,63703],{"alt":30,"src":63704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[21,63706,63707],{},"实际函数调用是window.fn()",[21,63709,63710],{},"普通函数里面this指向的是window",[1501,63712,63713,63716,63719],{},[17,63714,63715],{},"在普通函数下，this指向的是window",[17,63717,63718],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[17,63720,63721],{},"箭头函数没有this",[21,63723,63724],{},"粗略记法就是：谁调用，this就指向谁",[21,63726,63727],{},[1823,63728],{"alt":30,"src":63729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[21,63731,63732],{},[1823,63733],{"alt":30,"src":63734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[21,63736,63737],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[21,63739,63740],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[25,63742,63744],{"className":53393,"code":63743,"language":53395,"meta":30,"style":30},"\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",[32,63745,63746,63754,63766,63774,63779,63784,63789,63794,63798,63806],{"__ignoreMap":30},[35,63747,63748,63750,63752],{"class":37,"line":38},[35,63749,1404],{"class":359},[35,63751,52126],{"class":51626},[35,63753,51633],{"class":359},[35,63755,63756,63758,63760,63762,63764],{"class":37,"line":45},[35,63757,52470],{"class":359},[35,63759,54213],{"class":51626},[35,63761,54219],{"class":359},[35,63763,54213],{"class":51626},[35,63765,51633],{"class":359},[35,63767,63768,63770,63772],{"class":37,"line":55},[35,63769,52470],{"class":359},[35,63771,52139],{"class":51626},[35,63773,51633],{"class":359},[35,63775,63776],{"class":37,"line":65},[35,63777,63778],{"class":359},"    const button = document.querySelector('button')\n",[35,63780,63781],{"class":37,"line":74},[35,63782,63783],{"class":359},"    button.addEventListener('click', function () {\n",[35,63785,63786],{"class":37,"line":83},[35,63787,63788],{"class":359},"      \u002F\u002F console.log(this);\n",[35,63790,63791],{"class":37,"line":92},[35,63792,63793],{"class":359},"      this.style.color = 'pink'\n",[35,63795,63796],{"class":37,"line":101},[35,63797,33787],{"class":359},[35,63799,63800,63802,63804],{"class":37,"line":110},[35,63801,52743],{"class":359},[35,63803,52139],{"class":51626},[35,63805,51633],{"class":359},[35,63807,63808,63810,63812],{"class":37,"line":119},[35,63809,52111],{"class":359},[35,63811,52126],{"class":51626},[35,63813,51633],{"class":359},[465,63815,63817],{"id":63816},"_328-回调函数","3.2.8 回调函数",[21,63819,63820],{},[1823,63821],{"alt":30,"src":63822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[21,63824,63825],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[21,63827,11666],{},[1501,63829,63830,63833,63836],{},[17,63831,63832],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[17,63834,63835],{},"回调函数本质还是函数，只不过把它当成参数使用",[17,63837,63838],{},"使用匿名函数做为回调函数比较常见",[465,63840,63842],{"id":63841},"_329-tab栏切换","3.2.9 tab栏切换",[21,63844,63845],{},[1823,63846],{"alt":30,"src":63847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[25,63849,63851],{"className":50959,"code":63850,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,63854,63855,63857,63859,63861],{"class":37,"line":38},[35,63856,51623],{"class":359},[35,63858,51627],{"class":51626},[35,63860,51630],{"class":48},[35,63862,51633],{"class":359},[35,63864,63865,63867,63869,63871,63873,63875],{"class":37,"line":45},[35,63866,1404],{"class":359},[35,63868,50961],{"class":51626},[35,63870,51642],{"class":48},[35,63872,544],{"class":359},[35,63874,51647],{"class":306},[35,63876,51633],{"class":359},[35,63878,63879],{"class":37,"line":55},[35,63880,141],{"emptyLinePlaceholder":140},[35,63882,63883,63885,63887],{"class":37,"line":65},[35,63884,1404],{"class":359},[35,63886,51660],{"class":51626},[35,63888,51633],{"class":359},[35,63890,63891,63893,63895,63897,63899,63901],{"class":37,"line":74},[35,63892,52470],{"class":359},[35,63894,51670],{"class":51626},[35,63896,51673],{"class":48},[35,63898,544],{"class":359},[35,63900,51678],{"class":306},[35,63902,59453],{"class":359},[35,63904,63905,63907,63909,63911,63913,63915,63917,63919,63921],{"class":37,"line":83},[35,63906,52470],{"class":359},[35,63908,51670],{"class":51626},[35,63910,51689],{"class":48},[35,63912,544],{"class":359},[35,63914,51694],{"class":306},[35,63916,51697],{"class":48},[35,63918,544],{"class":359},[35,63920,51702],{"class":306},[35,63922,59453],{"class":359},[35,63924,63925,63927,63929,63931,63933,63935,63937,63939,63941],{"class":37,"line":92},[35,63926,52470],{"class":359},[35,63928,51670],{"class":51626},[35,63930,15254],{"class":48},[35,63932,544],{"class":359},[35,63934,51717],{"class":306},[35,63936,51697],{"class":48},[35,63938,544],{"class":359},[35,63940,51724],{"class":306},[35,63942,59453],{"class":359},[35,63944,63945,63947,63949,63952,63954],{"class":37,"line":101},[35,63946,52470],{"class":359},[35,63948,51733],{"class":51626},[35,63950,63951],{"class":359},">tab栏切换\u003C\u002F",[35,63953,51733],{"class":51626},[35,63955,51633],{"class":359},[35,63957,63958,63960,63962],{"class":37,"line":110},[35,63959,52470],{"class":359},[35,63961,416],{"class":51626},[35,63963,51633],{"class":359},[35,63965,63966,63968],{"class":37,"line":119},[35,63967,6737],{"class":51626},[35,63969,15906],{"class":359},[35,63971,63972,63974,63976,63978],{"class":37,"line":128},[35,63973,55032],{"class":58},[35,63975,51763],{"class":359},[35,63977,687],{"class":58},[35,63979,1655],{"class":359},[35,63981,63982,63984,63986,63988],{"class":37,"line":137},[35,63983,55021],{"class":58},[35,63985,51763],{"class":359},[35,63987,687],{"class":58},[35,63989,1655],{"class":359},[35,63991,63992],{"class":37,"line":144},[35,63993,2528],{"class":359},[35,63995,63996],{"class":37,"line":150},[35,63997,141],{"emptyLinePlaceholder":140},[35,63999,64000,64003],{"class":37,"line":159},[35,64001,64002],{"class":48},"    .tab",[35,64004,15906],{"class":359},[35,64006,64007,64009,64011,64014,64016],{"class":37,"line":168},[35,64008,55097],{"class":58},[35,64010,51763],{"class":359},[35,64012,64013],{"class":58},"590",[35,64015,51818],{"class":495},[35,64017,1655],{"class":359},[35,64019,64020,64022,64024,64027,64029],{"class":37,"line":177},[35,64021,55111],{"class":58},[35,64023,51763],{"class":359},[35,64025,64026],{"class":58},"340",[35,64028,51818],{"class":495},[35,64030,1655],{"class":359},[35,64032,64033,64035,64037,64039,64041],{"class":37,"line":182},[35,64034,55032],{"class":58},[35,64036,51763],{"class":359},[35,64038,1194],{"class":58},[35,64040,51818],{"class":495},[35,64042,1655],{"class":359},[35,64044,64045,64047,64049,64051,64053,64055,64057],{"class":37,"line":188},[35,64046,62303],{"class":58},[35,64048,51763],{"class":359},[35,64050,713],{"class":58},[35,64052,51818],{"class":495},[35,64054,51847],{"class":58},[35,64056,62570],{"class":58},[35,64058,1655],{"class":359},[35,64060,64061],{"class":37,"line":197},[35,64062,2528],{"class":359},[35,64064,64065],{"class":37,"line":206},[35,64066,141],{"emptyLinePlaceholder":140},[35,64068,64069,64072],{"class":37,"line":215},[35,64070,64071],{"class":48},"    .tab-nav",[35,64073,15906],{"class":359},[35,64075,64076,64078,64080,64082,64084],{"class":37,"line":224},[35,64077,55097],{"class":58},[35,64079,51763],{"class":359},[35,64081,807],{"class":58},[35,64083,823],{"class":495},[35,64085,1655],{"class":359},[35,64087,64088,64090,64092,64094,64096],{"class":37,"line":233},[35,64089,55111],{"class":58},[35,64091,51763],{"class":359},[35,64093,1401],{"class":58},[35,64095,51818],{"class":495},[35,64097,1655],{"class":359},[35,64099,64100,64102,64104,64106,64108],{"class":37,"line":238},[35,64101,57685],{"class":58},[35,64103,51763],{"class":359},[35,64105,1401],{"class":58},[35,64107,51818],{"class":495},[35,64109,1655],{"class":359},[35,64111,64112,64114,64116,64118],{"class":37,"line":244},[35,64113,55335],{"class":58},[35,64115,51763],{"class":359},[35,64117,51803],{"class":58},[35,64119,1655],{"class":359},[35,64121,64122,64124,64126,64128],{"class":37,"line":253},[35,64123,55346],{"class":58},[35,64125,51763],{"class":359},[35,64127,51994],{"class":58},[35,64129,1655],{"class":359},[35,64131,64132],{"class":37,"line":262},[35,64133,2528],{"class":359},[35,64135,64136],{"class":37,"line":271},[35,64137,141],{"emptyLinePlaceholder":140},[35,64139,64140,64142,64145],{"class":37,"line":280},[35,64141,64071],{"class":48},[35,64143,64144],{"class":51626}," h3",[35,64146,15906],{"class":359},[35,64148,64149,64151,64153,64155,64157],{"class":37,"line":289},[35,64150,55248],{"class":58},[35,64152,51763],{"class":359},[35,64154,1294],{"class":58},[35,64156,51818],{"class":495},[35,64158,1655],{"class":359},[35,64160,64161,64163,64165,64168],{"class":37,"line":294},[35,64162,62660],{"class":58},[35,64164,51763],{"class":359},[35,64166,64167],{"class":58},"normal",[35,64169,1655],{"class":359},[35,64171,64172,64174,64176,64178,64180],{"class":37,"line":300},[35,64173,62326],{"class":58},[35,64175,51763],{"class":359},[35,64177,1194],{"class":58},[35,64179,51818],{"class":495},[35,64181,1655],{"class":359},[35,64183,64184],{"class":37,"line":313},[35,64185,2528],{"class":359},[35,64187,64188],{"class":37,"line":324},[35,64189,141],{"emptyLinePlaceholder":140},[35,64191,64192,64194,64196],{"class":37,"line":2955},[35,64193,64071],{"class":48},[35,64195,61618],{"class":51626},[35,64197,15906],{"class":359},[35,64199,64200,64202,64204,64206],{"class":37,"line":8282},[35,64201,55058],{"class":58},[35,64203,51763],{"class":359},[35,64205,55063],{"class":58},[35,64207,1655],{"class":359},[35,64209,64210,64212,64214,64216],{"class":37,"line":8306},[35,64211,55335],{"class":58},[35,64213,51763],{"class":359},[35,64215,51803],{"class":58},[35,64217,1655],{"class":359},[35,64219,64220,64222,64224,64226],{"class":37,"line":8311},[35,64221,55346],{"class":58},[35,64223,51763],{"class":359},[35,64225,51906],{"class":58},[35,64227,1655],{"class":359},[35,64229,64230],{"class":37,"line":8317},[35,64231,2528],{"class":359},[35,64233,64234],{"class":37,"line":8344},[35,64235,141],{"emptyLinePlaceholder":140},[35,64237,64238,64240,64242,64244],{"class":37,"line":8349},[35,64239,64071],{"class":48},[35,64241,61618],{"class":51626},[35,64243,55401],{"class":51626},[35,64245,15906],{"class":359},[35,64247,64248,64250,64252,64254,64256,64258],{"class":37,"line":8355},[35,64249,55032],{"class":58},[35,64251,51763],{"class":359},[35,64253,687],{"class":58},[35,64255,9284],{"class":58},[35,64257,51818],{"class":495},[35,64259,1655],{"class":359},[35,64261,64262,64264,64266,64268,64270],{"class":37,"line":8367},[35,64263,55248],{"class":58},[35,64265,51763],{"class":359},[35,64267,1043],{"class":58},[35,64269,51818],{"class":495},[35,64271,1655],{"class":359},[35,64273,64274],{"class":37,"line":8379},[35,64275,2528],{"class":359},[35,64277,64278],{"class":37,"line":8391},[35,64279,141],{"emptyLinePlaceholder":140},[35,64281,64282,64284,64286,64288,64290],{"class":37,"line":10050},[35,64283,64071],{"class":48},[35,64285,61618],{"class":51626},[35,64287,55401],{"class":51626},[35,64289,1759],{"class":51626},[35,64291,15906],{"class":359},[35,64293,64294,64297,64299,64301],{"class":37,"line":10075},[35,64295,64296],{"class":58},"      text-decoration",[35,64298,51763],{"class":359},[35,64300,55063],{"class":58},[35,64302,1655],{"class":359},[35,64304,64305,64307,64309,64311,64313,64315,64318],{"class":37,"line":10098},[35,64306,62558],{"class":58},[35,64308,51763],{"class":359},[35,64310,574],{"class":58},[35,64312,51818],{"class":495},[35,64314,51847],{"class":58},[35,64316,64317],{"class":58}," transparent",[35,64319,1655],{"class":359},[35,64321,64322,64324,64326,64328],{"class":37,"line":10122},[35,64323,57742],{"class":58},[35,64325,51763],{"class":359},[35,64327,62695],{"class":58},[35,64329,1655],{"class":359},[35,64331,64332],{"class":37,"line":10127},[35,64333,2528],{"class":359},[35,64335,64336],{"class":37,"line":10132},[35,64337,141],{"emptyLinePlaceholder":140},[35,64339,64340,64342,64344,64346,64348,64351],{"class":37,"line":10137},[35,64341,64071],{"class":48},[35,64343,61618],{"class":51626},[35,64345,55401],{"class":51626},[35,64347,1759],{"class":51626},[35,64349,64350],{"class":48},".active",[35,64352,15906],{"class":359},[35,64354,64355,64357,64359,64362],{"class":37,"line":10146},[35,64356,62117],{"class":58},[35,64358,51763],{"class":359},[35,64360,64361],{"class":58},"#e1251b",[35,64363,1655],{"class":359},[35,64365,64366,64368,64370,64372],{"class":37,"line":10151},[35,64367,57742],{"class":58},[35,64369,51763],{"class":359},[35,64371,64361],{"class":58},[35,64373,1655],{"class":359},[35,64375,64376],{"class":37,"line":10157},[35,64377,2528],{"class":359},[35,64379,64380],{"class":37,"line":10178},[35,64381,141],{"emptyLinePlaceholder":140},[35,64383,64384,64387],{"class":37,"line":10184},[35,64385,64386],{"class":48},"    .tab-content",[35,64388,15906],{"class":359},[35,64390,64391,64393,64395,64397,64400,64402],{"class":37,"line":10198},[35,64392,55021],{"class":58},[35,64394,51763],{"class":359},[35,64396,687],{"class":58},[35,64398,64399],{"class":58}," 16",[35,64401,51818],{"class":495},[35,64403,1655],{"class":359},[35,64405,64406],{"class":37,"line":10204},[35,64407,2528],{"class":359},[35,64409,64410],{"class":37,"line":10231},[35,64411,141],{"emptyLinePlaceholder":140},[35,64413,64414,64416,64418],{"class":37,"line":10240},[35,64415,64386],{"class":48},[35,64417,62500],{"class":48},[35,64419,15906],{"class":359},[35,64421,64422,64424,64426,64428],{"class":37,"line":10246},[35,64423,55335],{"class":58},[35,64425,51763],{"class":359},[35,64427,55063],{"class":58},[35,64429,1655],{"class":359},[35,64431,64432],{"class":37,"line":10254},[35,64433,2528],{"class":359},[35,64435,64436],{"class":37,"line":10259},[35,64437,141],{"emptyLinePlaceholder":140},[35,64439,64440,64442,64445],{"class":37,"line":16938},[35,64441,64386],{"class":48},[35,64443,64444],{"class":48}," .item.active",[35,64446,15906],{"class":359},[35,64448,64449,64451,64453,64455],{"class":37,"line":16944},[35,64450,55335],{"class":58},[35,64452,51763],{"class":359},[35,64454,61195],{"class":58},[35,64456,1655],{"class":359},[35,64458,64459],{"class":37,"line":16967},[35,64460,2528],{"class":359},[35,64462,64463,64465,64467],{"class":37,"line":16973},[35,64464,52743],{"class":359},[35,64466,416],{"class":51626},[35,64468,51633],{"class":359},[35,64470,64471,64473,64475],{"class":37,"line":16996},[35,64472,52111],{"class":359},[35,64474,51660],{"class":51626},[35,64476,51633],{"class":359},[35,64478,64479],{"class":37,"line":17010},[35,64480,141],{"emptyLinePlaceholder":140},[35,64482,64483,64485,64487],{"class":37,"line":17030},[35,64484,1404],{"class":359},[35,64486,52126],{"class":51626},[35,64488,51633],{"class":359},[35,64490,64491,64493,64495,64497,64499,64502],{"class":37,"line":17036},[35,64492,52470],{"class":359},[35,64494,51937],{"class":51626},[35,64496,53812],{"class":48},[35,64498,544],{"class":359},[35,64500,64501],{"class":306},"\"tab\"",[35,64503,51633],{"class":359},[35,64505,64506,64508,64510,64512,64514,64517],{"class":37,"line":17047},[35,64507,51667],{"class":359},[35,64509,51937],{"class":51626},[35,64511,53812],{"class":48},[35,64513,544],{"class":359},[35,64515,64516],{"class":306},"\"tab-nav\"",[35,64518,51633],{"class":359},[35,64520,64521,64523,64525,64528,64530],{"class":37,"line":17070},[35,64522,55560],{"class":359},[35,64524,465],{"class":51626},[35,64526,64527],{"class":359},">每日特价\u003C\u002F",[35,64529,465],{"class":51626},[35,64531,51633],{"class":359},[35,64533,64534,64536,64538],{"class":37,"line":17092},[35,64535,55560],{"class":359},[35,64537,1501],{"class":51626},[35,64539,51633],{"class":359},[35,64541,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64563,64566,64568,64570,64572],{"class":37,"line":17097},[35,64543,55628],{"class":359},[35,64545,17],{"class":51626},[35,64547,61378],{"class":359},[35,64549,734],{"class":51626},[35,64551,53812],{"class":48},[35,64553,544],{"class":359},[35,64555,60032],{"class":306},[35,64557,61383],{"class":48},[35,64559,544],{"class":359},[35,64561,64562],{"class":306},"\"javascript:;\"",[35,64564,64565],{"class":359},">精选\u003C\u002F",[35,64567,734],{"class":51626},[35,64569,55640],{"class":359},[35,64571,17],{"class":51626},[35,64573,51633],{"class":359},[35,64575,64576,64578,64580,64582,64584,64586,64588,64590,64593,64595,64597,64599],{"class":37,"line":17103},[35,64577,55628],{"class":359},[35,64579,17],{"class":51626},[35,64581,61378],{"class":359},[35,64583,734],{"class":51626},[35,64585,61383],{"class":48},[35,64587,544],{"class":359},[35,64589,64562],{"class":306},[35,64591,64592],{"class":359},">美食\u003C\u002F",[35,64594,734],{"class":51626},[35,64596,55640],{"class":359},[35,64598,17],{"class":51626},[35,64600,51633],{"class":359},[35,64602,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626],{"class":37,"line":17117},[35,64604,55628],{"class":359},[35,64606,17],{"class":51626},[35,64608,61378],{"class":359},[35,64610,734],{"class":51626},[35,64612,61383],{"class":48},[35,64614,544],{"class":359},[35,64616,64562],{"class":306},[35,64618,64619],{"class":359},">百货\u003C\u002F",[35,64621,734],{"class":51626},[35,64623,55640],{"class":359},[35,64625,17],{"class":51626},[35,64627,51633],{"class":359},[35,64629,64630,64632,64634,64636,64638,64640,64642,64644,64647,64649,64651,64653],{"class":37,"line":17130},[35,64631,55628],{"class":359},[35,64633,17],{"class":51626},[35,64635,61378],{"class":359},[35,64637,734],{"class":51626},[35,64639,61383],{"class":48},[35,64641,544],{"class":359},[35,64643,64562],{"class":306},[35,64645,64646],{"class":359},">个护\u003C\u002F",[35,64648,734],{"class":51626},[35,64650,55640],{"class":359},[35,64652,17],{"class":51626},[35,64654,51633],{"class":359},[35,64656,64657,64659,64661,64663,64665,64667,64669,64671,64674,64676,64678,64680],{"class":37,"line":17135},[35,64658,55628],{"class":359},[35,64660,17],{"class":51626},[35,64662,61378],{"class":359},[35,64664,734],{"class":51626},[35,64666,61383],{"class":48},[35,64668,544],{"class":359},[35,64670,64562],{"class":306},[35,64672,64673],{"class":359},">预告\u003C\u002F",[35,64675,734],{"class":51626},[35,64677,55640],{"class":359},[35,64679,17],{"class":51626},[35,64681,51633],{"class":359},[35,64683,64684,64686,64688],{"class":37,"line":17149},[35,64685,55733],{"class":359},[35,64687,1501],{"class":51626},[35,64689,51633],{"class":359},[35,64691,64692,64694,64696],{"class":37,"line":17154},[35,64693,52102],{"class":359},[35,64695,51937],{"class":51626},[35,64697,51633],{"class":359},[35,64699,64700,64702,64704,64706,64708,64711],{"class":37,"line":17160},[35,64701,51667],{"class":359},[35,64703,51937],{"class":51626},[35,64705,53812],{"class":48},[35,64707,544],{"class":359},[35,64709,64710],{"class":306},"\"tab-content\"",[35,64712,51633],{"class":359},[35,64714,64715,64717,64719,64721,64723,64726,64728,64730,64732,64734,64737,64739,64741,64743,64746,64748],{"class":37,"line":17165},[35,64716,55560],{"class":359},[35,64718,51937],{"class":51626},[35,64720,53812],{"class":48},[35,64722,544],{"class":359},[35,64724,64725],{"class":306},"\"item active\"",[35,64727,61378],{"class":359},[35,64729,1823],{"class":51626},[35,64731,55565],{"class":48},[35,64733,544],{"class":359},[35,64735,64736],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[35,64738,55573],{"class":48},[35,64740,544],{"class":359},[35,64742,7986],{"class":306},[35,64744,64745],{"class":359}," \u002F>\u003C\u002F",[35,64747,51937],{"class":51626},[35,64749,51633],{"class":359},[35,64751,64752,64754,64756,64758,64760,64762,64764,64766,64768,64770,64773,64775,64777,64779,64781,64783],{"class":37,"line":17179},[35,64753,55560],{"class":359},[35,64755,51937],{"class":51626},[35,64757,53812],{"class":48},[35,64759,544],{"class":359},[35,64761,62949],{"class":306},[35,64763,61378],{"class":359},[35,64765,1823],{"class":51626},[35,64767,55565],{"class":48},[35,64769,544],{"class":359},[35,64771,64772],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[35,64774,55573],{"class":48},[35,64776,544],{"class":359},[35,64778,7986],{"class":306},[35,64780,64745],{"class":359},[35,64782,51937],{"class":51626},[35,64784,51633],{"class":359},[35,64786,64787,64789,64791,64793,64795,64797,64799,64801,64803,64805,64808,64810,64812,64814,64816,64818],{"class":37,"line":17184},[35,64788,55560],{"class":359},[35,64790,51937],{"class":51626},[35,64792,53812],{"class":48},[35,64794,544],{"class":359},[35,64796,62949],{"class":306},[35,64798,61378],{"class":359},[35,64800,1823],{"class":51626},[35,64802,55565],{"class":48},[35,64804,544],{"class":359},[35,64806,64807],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[35,64809,55573],{"class":48},[35,64811,544],{"class":359},[35,64813,7986],{"class":306},[35,64815,64745],{"class":359},[35,64817,51937],{"class":51626},[35,64819,51633],{"class":359},[35,64821,64822,64824,64826,64828,64830,64832,64834,64836,64838,64840,64843,64845,64847,64849,64851,64853],{"class":37,"line":17189},[35,64823,55560],{"class":359},[35,64825,51937],{"class":51626},[35,64827,53812],{"class":48},[35,64829,544],{"class":359},[35,64831,62949],{"class":306},[35,64833,61378],{"class":359},[35,64835,1823],{"class":51626},[35,64837,55565],{"class":48},[35,64839,544],{"class":359},[35,64841,64842],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[35,64844,55573],{"class":48},[35,64846,544],{"class":359},[35,64848,7986],{"class":306},[35,64850,64745],{"class":359},[35,64852,51937],{"class":51626},[35,64854,51633],{"class":359},[35,64856,64857,64859,64861,64863,64865,64867,64869,64871,64873,64875,64878,64880,64882,64884,64886,64888],{"class":37,"line":17203},[35,64858,55560],{"class":359},[35,64860,51937],{"class":51626},[35,64862,53812],{"class":48},[35,64864,544],{"class":359},[35,64866,62949],{"class":306},[35,64868,61378],{"class":359},[35,64870,1823],{"class":51626},[35,64872,55565],{"class":48},[35,64874,544],{"class":359},[35,64876,64877],{"class":306},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[35,64879,55573],{"class":48},[35,64881,544],{"class":359},[35,64883,7986],{"class":306},[35,64885,64745],{"class":359},[35,64887,51937],{"class":51626},[35,64889,51633],{"class":359},[35,64891,64892,64894,64896],{"class":37,"line":17215},[35,64893,52102],{"class":359},[35,64895,51937],{"class":51626},[35,64897,51633],{"class":359},[35,64899,64900,64902,64904],{"class":37,"line":17220},[35,64901,52743],{"class":359},[35,64903,51937],{"class":51626},[35,64905,51633],{"class":359},[35,64907,64908,64910,64912],{"class":37,"line":17233},[35,64909,52470],{"class":359},[35,64911,52139],{"class":51626},[35,64913,51633],{"class":359},[35,64915,64916],{"class":37,"line":17238},[35,64917,64918],{"class":41},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[35,64920,64921],{"class":37,"line":17243},[35,64922,64923],{"class":41},"    \u002F\u002F 1.1 获取 a 元素 \n",[35,64925,64926,64928,64931,64933,64935,64937,64939,64942],{"class":37,"line":17248},[35,64927,11555],{"class":495},[35,64929,64930],{"class":58}," as",[35,64932,13898],{"class":495},[35,64934,54722],{"class":359},[35,64936,56007],{"class":48},[35,64938,499],{"class":359},[35,64940,64941],{"class":306},"'.tab-nav a'",[35,64943,505],{"class":359},[35,64945,64946],{"class":37,"line":17261},[35,64947,64948],{"class":41},"    \u002F\u002F console.log(as) \n",[35,64950,64951,64953,64955,64957,64959,64961,64963,64965,64967,64970,64972,64974,64976],{"class":37,"line":17266},[35,64952,3535],{"class":495},[35,64954,2012],{"class":359},[35,64956,52173],{"class":495},[35,64958,9772],{"class":359},[35,64960,544],{"class":495},[35,64962,4427],{"class":58},[35,64964,9779],{"class":359},[35,64966,1404],{"class":495},[35,64968,64969],{"class":359}," as.",[35,64971,52294],{"class":58},[35,64973,3548],{"class":359},[35,64975,2633],{"class":495},[35,64977,12776],{"class":359},[35,64979,64980],{"class":37,"line":32959},[35,64981,64982],{"class":41},"      \u002F\u002F console.log(as[i])\n",[35,64984,64985],{"class":37,"line":32965},[35,64986,64987],{"class":41},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[35,64989,64990,64993,64995,64997,65000,65002,65004],{"class":37,"line":32971},[35,64991,64992],{"class":359},"      as[i].",[35,64994,58139],{"class":48},[35,64996,499],{"class":359},[35,64998,64999],{"class":306},"'mouseenter'",[35,65001,12769],{"class":359},[35,65003,54775],{"class":495},[35,65005,54778],{"class":359},[35,65007,65008],{"class":37,"line":32977},[35,65009,65010],{"class":41},"        \u002F\u002F console.log('鼠标经过')\n",[35,65012,65013],{"class":37,"line":32983},[35,65014,65015],{"class":41},"        \u002F\u002F 排他思想  \n",[35,65017,65018],{"class":37,"line":32994},[35,65019,65020],{"class":41},"        \u002F\u002F 干掉别人 移除类active\n",[35,65022,65023,65025,65027,65029,65032,65034,65036,65038,65041],{"class":37,"line":33000},[35,65024,52251],{"class":359},[35,65026,54725],{"class":48},[35,65028,499],{"class":359},[35,65030,65031],{"class":306},"'.tab-nav .active'",[35,65033,57329],{"class":359},[35,65035,57332],{"class":48},[35,65037,499],{"class":359},[35,65039,65040],{"class":306},"'active'",[35,65042,505],{"class":359},[35,65044,65045],{"class":37,"line":33020},[35,65046,65047],{"class":41},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[35,65049,65050,65053,65056,65058,65060,65062],{"class":37,"line":33026},[35,65051,65052],{"class":58},"        this",[35,65054,65055],{"class":359},".classList.",[35,65057,5668],{"class":48},[35,65059,499],{"class":359},[35,65061,65040],{"class":306},[35,65063,505],{"class":359},[35,65065,65066],{"class":37,"line":33037},[35,65067,141],{"emptyLinePlaceholder":140},[35,65069,65070],{"class":37,"line":33043},[35,65071,65072],{"class":41},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[35,65074,65075],{"class":37,"line":33049},[35,65076,65077],{"class":41},"        \u002F\u002F 干掉别人\n",[35,65079,65080,65082,65084,65086,65089,65091,65093,65095,65097],{"class":37,"line":33055},[35,65081,52251],{"class":359},[35,65083,54725],{"class":48},[35,65085,499],{"class":359},[35,65087,65088],{"class":306},"'.tab-content .active'",[35,65090,57329],{"class":359},[35,65092,57332],{"class":48},[35,65094,499],{"class":359},[35,65096,65040],{"class":306},[35,65098,505],{"class":359},[35,65100,65101],{"class":37,"line":33061},[35,65102,65103],{"class":41},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[35,65105,65106,65108,65110,65112,65115,65117,65119,65121,65123,65125,65127,65129,65131],{"class":37,"line":33067},[35,65107,52251],{"class":359},[35,65109,54725],{"class":48},[35,65111,499],{"class":359},[35,65113,65114],{"class":306},"`.tab-content .item:nth-child(${",[35,65116,935],{"class":359},[35,65118,45892],{"class":495},[35,65120,25450],{"class":58},[35,65122,57358],{"class":306},[35,65124,57329],{"class":359},[35,65126,5668],{"class":48},[35,65128,499],{"class":359},[35,65130,65040],{"class":306},[35,65132,505],{"class":359},[35,65134,65135],{"class":37,"line":33073},[35,65136,141],{"emptyLinePlaceholder":140},[35,65138,65139],{"class":37,"line":33079},[35,65140,65141],{"class":359},"      })\n",[35,65143,65144],{"class":37,"line":33099},[35,65145,2528],{"class":359},[35,65147,65148,65150,65152],{"class":37,"line":33105},[35,65149,52743],{"class":359},[35,65151,52139],{"class":51626},[35,65153,51633],{"class":359},[35,65155,65156,65158,65160],{"class":37,"line":33121},[35,65157,52111],{"class":359},[35,65159,52126],{"class":51626},[35,65161,51633],{"class":359},[35,65163,65164],{"class":37,"line":33127},[35,65165,141],{"emptyLinePlaceholder":140},[35,65167,65168,65170,65172],{"class":37,"line":33141},[35,65169,52111],{"class":359},[35,65171,50961],{"class":51626},[35,65173,51633],{"class":359},[21,65175,65176],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[21,65178,65179],{},"在监听事件中，this指向的就是他的调用者",[21,65181,65182],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[21,65184,54046],{},[21,65186,65187],{},"(function () {",[21,65189,65190],{},"const list = document.querySelector('.xtx-elevator-list')",[21,65192,65193],{},"list.addEventListener('click', function (e) {",[21,65195,65196],{},"if (e.target.tagName === 'A') {",[21,65198,65199],{},"\u002F\u002F 排他思想",[21,65201,65202],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[21,65204,65205],{},"const old = document.querySelector('.xtx-elevator-list .active')",[21,65207,65208],{},"\u002F\u002F console.log(old);",[21,65210,65211],{},"\u002F\u002F 判断",[21,65213,65214],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[21,65216,65217],{},"if (old) old.classList.remove('active')",[21,65219,65220],{},"e.target.classList.add('active')",[21,65222,1440],{},[21,65224,52790],{},[21,65226,65227],{},"})();",[465,65229,65231],{"id":65230},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[25,65233,65235],{"className":50959,"code":65234,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,65238,65239,65241,65243,65245],{"class":37,"line":38},[35,65240,51623],{"class":359},[35,65242,51627],{"class":51626},[35,65244,51630],{"class":48},[35,65246,51633],{"class":359},[35,65248,65249],{"class":37,"line":45},[35,65250,141],{"emptyLinePlaceholder":140},[35,65252,65253,65255,65257],{"class":37,"line":55},[35,65254,1404],{"class":359},[35,65256,50961],{"class":51626},[35,65258,51633],{"class":359},[35,65260,65261],{"class":37,"line":65},[35,65262,141],{"emptyLinePlaceholder":140},[35,65264,65265,65267,65269,65271,65273,65275],{"class":37,"line":74},[35,65266,1404],{"class":359},[35,65268,51660],{"class":51626},[35,65270,51642],{"class":48},[35,65272,544],{"class":359},[35,65274,51647],{"class":306},[35,65276,51633],{"class":359},[35,65278,65279,65281,65283,65285,65287,65289],{"class":37,"line":83},[35,65280,52470],{"class":359},[35,65282,51670],{"class":51626},[35,65284,51673],{"class":48},[35,65286,544],{"class":359},[35,65288,51678],{"class":306},[35,65290,51633],{"class":359},[35,65292,65293,65295,65297,65299,65301],{"class":37,"line":92},[35,65294,52470],{"class":359},[35,65296,51733],{"class":51626},[35,65298,55640],{"class":359},[35,65300,51733],{"class":51626},[35,65302,51633],{"class":359},[35,65304,65305,65307,65309],{"class":37,"line":101},[35,65306,52470],{"class":359},[35,65308,416],{"class":51626},[35,65310,51633],{"class":359},[35,65312,65313,65315],{"class":37,"line":110},[35,65314,6737],{"class":51626},[35,65316,15906],{"class":359},[35,65318,65319,65321,65323,65325],{"class":37,"line":119},[35,65320,55032],{"class":58},[35,65322,51763],{"class":359},[35,65324,687],{"class":58},[35,65326,1655],{"class":359},[35,65328,65329,65331,65333,65335],{"class":37,"line":128},[35,65330,55021],{"class":58},[35,65332,51763],{"class":359},[35,65334,687],{"class":58},[35,65336,1655],{"class":359},[35,65338,65339],{"class":37,"line":137},[35,65340,2528],{"class":359},[35,65342,65343],{"class":37,"line":144},[35,65344,141],{"emptyLinePlaceholder":140},[35,65346,65347,65350],{"class":37,"line":150},[35,65348,65349],{"class":51626},"    table",[35,65351,15906],{"class":359},[35,65353,65354,65357,65359,65362],{"class":37,"line":159},[35,65355,65356],{"class":58},"      border-collapse",[35,65358,51763],{"class":359},[35,65360,65361],{"class":58},"collapse",[35,65363,1655],{"class":359},[35,65365,65366,65369,65371,65373],{"class":37,"line":168},[35,65367,65368],{"class":58},"      border-spacing",[35,65370,51763],{"class":359},[35,65372,687],{"class":58},[35,65374,1655],{"class":359},[35,65376,65377,65379,65381,65383,65385,65387,65390],{"class":37,"line":177},[35,65378,62303],{"class":58},[35,65380,51763],{"class":359},[35,65382,713],{"class":58},[35,65384,51818],{"class":495},[35,65386,51847],{"class":58},[35,65388,65389],{"class":58}," #c0c0c0",[35,65391,1655],{"class":359},[35,65393,65394,65396,65398,65401,65403],{"class":37,"line":182},[35,65395,55097],{"class":58},[35,65397,51763],{"class":359},[35,65399,65400],{"class":58},"500",[35,65402,51818],{"class":495},[35,65404,1655],{"class":359},[35,65406,65407,65409,65411,65413,65415,65417],{"class":37,"line":188},[35,65408,55032],{"class":58},[35,65410,51763],{"class":359},[35,65412,807],{"class":58},[35,65414,51818],{"class":495},[35,65416,51882],{"class":58},[35,65418,1655],{"class":359},[35,65420,65421,65423,65425,65427],{"class":37,"line":197},[35,65422,57612],{"class":58},[35,65424,51763],{"class":359},[35,65426,51918],{"class":58},[35,65428,1655],{"class":359},[35,65430,65431],{"class":37,"line":206},[35,65432,2528],{"class":359},[35,65434,65435],{"class":37,"line":215},[35,65436,141],{"emptyLinePlaceholder":140},[35,65438,65439,65442],{"class":37,"line":224},[35,65440,65441],{"class":51626},"    th",[35,65443,15906],{"class":359},[35,65445,65446,65448,65450,65453],{"class":37,"line":233},[35,65447,55210],{"class":58},[35,65449,51763],{"class":359},[35,65451,65452],{"class":58},"#09c",[35,65454,1655],{"class":359},[35,65456,65457,65460,65462,65464,65466,65468,65471],{"class":37,"line":238},[35,65458,65459],{"class":58},"      font",[35,65461,51763],{"class":359},[35,65463,62665],{"class":58},[35,65465,64399],{"class":58},[35,65467,51818],{"class":495},[35,65469,65470],{"class":306}," \"微软雅黑\"",[35,65472,1655],{"class":359},[35,65474,65475,65477,65479,65481],{"class":37,"line":244},[35,65476,57742],{"class":58},[35,65478,51763],{"class":359},[35,65480,61168],{"class":58},[35,65482,1655],{"class":359},[35,65484,65485,65487,65489,65491,65493],{"class":37,"line":253},[35,65486,55111],{"class":58},[35,65488,51763],{"class":359},[35,65490,1294],{"class":58},[35,65492,51818],{"class":495},[35,65494,1655],{"class":359},[35,65496,65497],{"class":37,"line":262},[35,65498,2528],{"class":359},[35,65500,65501],{"class":37,"line":271},[35,65502,141],{"emptyLinePlaceholder":140},[35,65504,65505,65508],{"class":37,"line":280},[35,65506,65507],{"class":51626},"    td",[35,65509,15906],{"class":359},[35,65511,65512,65514,65516,65518,65520,65522,65525],{"class":37,"line":289},[35,65513,62303],{"class":58},[35,65515,51763],{"class":359},[35,65517,713],{"class":58},[35,65519,51818],{"class":495},[35,65521,51847],{"class":58},[35,65523,65524],{"class":58}," #d0d0d0",[35,65526,1655],{"class":359},[35,65528,65529,65531,65533,65536],{"class":37,"line":294},[35,65530,57742],{"class":58},[35,65532,51763],{"class":359},[35,65534,65535],{"class":58},"#404060",[35,65537,1655],{"class":359},[35,65539,65540,65542,65544,65546,65548],{"class":37,"line":300},[35,65541,55021],{"class":58},[35,65543,51763],{"class":359},[35,65545,940],{"class":58},[35,65547,51818],{"class":495},[35,65549,1655],{"class":359},[35,65551,65552],{"class":37,"line":313},[35,65553,2528],{"class":359},[35,65555,65556],{"class":37,"line":324},[35,65557,141],{"emptyLinePlaceholder":140},[35,65559,65560,65563],{"class":37,"line":2955},[35,65561,65562],{"class":48},"    .allCheck",[35,65564,15906],{"class":359},[35,65566,65567,65569,65571,65573,65575],{"class":37,"line":8282},[35,65568,55097],{"class":58},[35,65570,51763],{"class":359},[35,65572,1106],{"class":58},[35,65574,51818],{"class":495},[35,65576,1655],{"class":359},[35,65578,65579],{"class":37,"line":8306},[35,65580,2528],{"class":359},[35,65582,65583,65585,65587],{"class":37,"line":8311},[35,65584,52743],{"class":359},[35,65586,416],{"class":51626},[35,65588,51633],{"class":359},[35,65590,65591,65593,65595],{"class":37,"line":8317},[35,65592,52111],{"class":359},[35,65594,51660],{"class":51626},[35,65596,51633],{"class":359},[35,65598,65599],{"class":37,"line":8344},[35,65600,141],{"emptyLinePlaceholder":140},[35,65602,65603,65605,65607],{"class":37,"line":8349},[35,65604,1404],{"class":359},[35,65606,52126],{"class":51626},[35,65608,51633],{"class":359},[35,65610,65611,65613,65615],{"class":37,"line":8355},[35,65612,52470],{"class":359},[35,65614,633],{"class":51626},[35,65616,51633],{"class":359},[35,65618,65619,65621,65623],{"class":37,"line":8367},[35,65620,51667],{"class":359},[35,65622,639],{"class":51626},[35,65624,51633],{"class":359},[35,65626,65627,65629,65631,65633,65635,65638],{"class":37,"line":8379},[35,65628,55560],{"class":359},[35,65630,642],{"class":51626},[35,65632,53812],{"class":48},[35,65634,544],{"class":359},[35,65636,65637],{"class":306},"\"allCheck\"",[35,65639,51633],{"class":359},[35,65641,65642,65644,65646,65648,65650,65652,65654,65656,65658,65660,65662,65665,65668,65670,65672,65674,65677,65680,65682],{"class":37,"line":8391},[35,65643,55628],{"class":359},[35,65645,54147],{"class":51626},[35,65647,54150],{"class":48},[35,65649,544],{"class":359},[35,65651,54155],{"class":306},[35,65653,15254],{"class":48},[35,65655,544],{"class":359},[35,65657,7986],{"class":306},[35,65659,15293],{"class":48},[35,65661,544],{"class":359},[35,65663,65664],{"class":306},"\"checkAll\"",[35,65666,65667],{"class":359},"> \u003C",[35,65669,35],{"class":51626},[35,65671,53812],{"class":48},[35,65673,544],{"class":359},[35,65675,65676],{"class":306},"\"all\"",[35,65678,65679],{"class":359},">全选\u003C\u002F",[35,65681,35],{"class":51626},[35,65683,51633],{"class":359},[35,65685,65686,65688,65690],{"class":37,"line":10050},[35,65687,55733],{"class":359},[35,65689,642],{"class":51626},[35,65691,51633],{"class":359},[35,65693,65694,65696,65698,65701,65703],{"class":37,"line":10075},[35,65695,55560],{"class":359},[35,65697,642],{"class":51626},[35,65699,65700],{"class":359},">商品\u003C\u002F",[35,65702,642],{"class":51626},[35,65704,51633],{"class":359},[35,65706,65707,65709,65711,65714,65716],{"class":37,"line":10098},[35,65708,55560],{"class":359},[35,65710,642],{"class":51626},[35,65712,65713],{"class":359},">商家\u003C\u002F",[35,65715,642],{"class":51626},[35,65717,51633],{"class":359},[35,65719,65720,65722,65724,65727,65729],{"class":37,"line":10122},[35,65721,55560],{"class":359},[35,65723,642],{"class":51626},[35,65725,65726],{"class":359},">价格\u003C\u002F",[35,65728,642],{"class":51626},[35,65730,51633],{"class":359},[35,65732,65733,65735,65737],{"class":37,"line":10127},[35,65734,52102],{"class":359},[35,65736,639],{"class":51626},[35,65738,51633],{"class":359},[35,65740,65741,65743,65745],{"class":37,"line":10132},[35,65742,51667],{"class":359},[35,65744,639],{"class":51626},[35,65746,51633],{"class":359},[35,65748,65749,65751,65753],{"class":37,"line":10137},[35,65750,55560],{"class":359},[35,65752,685],{"class":51626},[35,65754,51633],{"class":359},[35,65756,65757,65759,65761,65763,65765,65767,65769,65771,65774,65776,65778,65781],{"class":37,"line":10146},[35,65758,55628],{"class":359},[35,65760,54147],{"class":51626},[35,65762,54150],{"class":48},[35,65764,544],{"class":359},[35,65766,54155],{"class":306},[35,65768,15254],{"class":48},[35,65770,544],{"class":359},[35,65772,65773],{"class":306},"\"check\"",[35,65775,53812],{"class":48},[35,65777,544],{"class":359},[35,65779,65780],{"class":306},"\"ck\"",[35,65782,51633],{"class":359},[35,65784,65785,65787,65789],{"class":37,"line":10151},[35,65786,55733],{"class":359},[35,65788,685],{"class":51626},[35,65790,51633],{"class":359},[35,65792,65793,65795,65797,65799,65801],{"class":37,"line":10157},[35,65794,55560],{"class":359},[35,65796,685],{"class":51626},[35,65798,61499],{"class":359},[35,65800,685],{"class":51626},[35,65802,51633],{"class":359},[35,65804,65805,65807,65809,65812,65814],{"class":37,"line":10178},[35,65806,55560],{"class":359},[35,65808,685],{"class":51626},[35,65810,65811],{"class":359},">小米\u003C\u002F",[35,65813,685],{"class":51626},[35,65815,51633],{"class":359},[35,65817,65818,65820,65822,65825,65827],{"class":37,"line":10184},[35,65819,55560],{"class":359},[35,65821,685],{"class":51626},[35,65823,65824],{"class":359},">￥1999\u003C\u002F",[35,65826,685],{"class":51626},[35,65828,51633],{"class":359},[35,65830,65831,65833,65835],{"class":37,"line":10198},[35,65832,52102],{"class":359},[35,65834,639],{"class":51626},[35,65836,51633],{"class":359},[35,65838,65839,65841,65843],{"class":37,"line":10204},[35,65840,51667],{"class":359},[35,65842,639],{"class":51626},[35,65844,51633],{"class":359},[35,65846,65847,65849,65851],{"class":37,"line":10231},[35,65848,55560],{"class":359},[35,65850,685],{"class":51626},[35,65852,51633],{"class":359},[35,65854,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65875,65877],{"class":37,"line":10240},[35,65856,55628],{"class":359},[35,65858,54147],{"class":51626},[35,65860,54150],{"class":48},[35,65862,544],{"class":359},[35,65864,54155],{"class":306},[35,65866,15254],{"class":48},[35,65868,544],{"class":359},[35,65870,65773],{"class":306},[35,65872,53812],{"class":48},[35,65874,544],{"class":359},[35,65876,65780],{"class":306},[35,65878,51633],{"class":359},[35,65880,65881,65883,65885],{"class":37,"line":10246},[35,65882,55733],{"class":359},[35,65884,685],{"class":51626},[35,65886,51633],{"class":359},[35,65888,65889,65891,65893,65896,65898],{"class":37,"line":10254},[35,65890,55560],{"class":359},[35,65892,685],{"class":51626},[35,65894,65895],{"class":359},">小米净水器\u003C\u002F",[35,65897,685],{"class":51626},[35,65899,51633],{"class":359},[35,65901,65902,65904,65906,65908,65910],{"class":37,"line":10259},[35,65903,55560],{"class":359},[35,65905,685],{"class":51626},[35,65907,65811],{"class":359},[35,65909,685],{"class":51626},[35,65911,51633],{"class":359},[35,65913,65914,65916,65918,65921,65923],{"class":37,"line":16938},[35,65915,55560],{"class":359},[35,65917,685],{"class":51626},[35,65919,65920],{"class":359},">￥4999\u003C\u002F",[35,65922,685],{"class":51626},[35,65924,51633],{"class":359},[35,65926,65927,65929,65931],{"class":37,"line":16944},[35,65928,52102],{"class":359},[35,65930,639],{"class":51626},[35,65932,51633],{"class":359},[35,65934,65935,65937,65939],{"class":37,"line":16967},[35,65936,51667],{"class":359},[35,65938,639],{"class":51626},[35,65940,51633],{"class":359},[35,65942,65943,65945,65947],{"class":37,"line":16973},[35,65944,55560],{"class":359},[35,65946,685],{"class":51626},[35,65948,51633],{"class":359},[35,65950,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969,65971,65973],{"class":37,"line":16996},[35,65952,55628],{"class":359},[35,65954,54147],{"class":51626},[35,65956,54150],{"class":48},[35,65958,544],{"class":359},[35,65960,54155],{"class":306},[35,65962,15254],{"class":48},[35,65964,544],{"class":359},[35,65966,65773],{"class":306},[35,65968,53812],{"class":48},[35,65970,544],{"class":359},[35,65972,65780],{"class":306},[35,65974,51633],{"class":359},[35,65976,65977,65979,65981],{"class":37,"line":17010},[35,65978,55733],{"class":359},[35,65980,685],{"class":51626},[35,65982,51633],{"class":359},[35,65984,65985,65987,65989,65992,65994],{"class":37,"line":17030},[35,65986,55560],{"class":359},[35,65988,685],{"class":51626},[35,65990,65991],{"class":359},">小米电视\u003C\u002F",[35,65993,685],{"class":51626},[35,65995,51633],{"class":359},[35,65997,65998,66000,66002,66004,66006],{"class":37,"line":17036},[35,65999,55560],{"class":359},[35,66001,685],{"class":51626},[35,66003,65811],{"class":359},[35,66005,685],{"class":51626},[35,66007,51633],{"class":359},[35,66009,66010,66012,66014,66017,66019],{"class":37,"line":17047},[35,66011,55560],{"class":359},[35,66013,685],{"class":51626},[35,66015,66016],{"class":359},">￥5999\u003C\u002F",[35,66018,685],{"class":51626},[35,66020,51633],{"class":359},[35,66022,66023,66025,66027],{"class":37,"line":17070},[35,66024,52102],{"class":359},[35,66026,639],{"class":51626},[35,66028,51633],{"class":359},[35,66030,66031,66033,66035],{"class":37,"line":17092},[35,66032,52743],{"class":359},[35,66034,633],{"class":51626},[35,66036,51633],{"class":359},[35,66038,66039,66041,66043],{"class":37,"line":17097},[35,66040,52470],{"class":359},[35,66042,52139],{"class":51626},[35,66044,51633],{"class":359},[35,66046,66047],{"class":37,"line":17103},[35,66048,66049],{"class":41},"    \u002F\u002F 1. 获取大复选框\n",[35,66051,66052,66054,66057,66059,66061,66063,66065,66068],{"class":37,"line":17117},[35,66053,11555],{"class":495},[35,66055,66056],{"class":58}," checkAll",[35,66058,13898],{"class":495},[35,66060,54722],{"class":359},[35,66062,54725],{"class":48},[35,66064,499],{"class":359},[35,66066,66067],{"class":306},"'#checkAll'",[35,66069,505],{"class":359},[35,66071,66072],{"class":37,"line":17130},[35,66073,66074],{"class":41},"    \u002F\u002F 2. 获取所有的小复选框\n",[35,66076,66077,66079,66082,66084,66086,66088,66090,66093],{"class":37,"line":17135},[35,66078,11555],{"class":495},[35,66080,66081],{"class":58}," cks",[35,66083,13898],{"class":495},[35,66085,54722],{"class":359},[35,66087,56007],{"class":48},[35,66089,499],{"class":359},[35,66091,66092],{"class":306},"'.ck'",[35,66094,505],{"class":359},[35,66096,66097],{"class":37,"line":17149},[35,66098,66099],{"class":41},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[35,66101,66102,66105,66107,66109,66111,66113,66115],{"class":37,"line":17154},[35,66103,66104],{"class":359},"    checkAll.",[35,66106,58139],{"class":48},[35,66108,499],{"class":359},[35,66110,58144],{"class":306},[35,66112,12769],{"class":359},[35,66114,54775],{"class":495},[35,66116,54778],{"class":359},[35,66118,66119],{"class":37,"line":17160},[35,66120,66121],{"class":41},"      \u002F\u002F 得到当前大复选框的选中状态\n",[35,66123,66124,66127],{"class":37,"line":17165},[35,66125,66126],{"class":41},"      \u002F\u002F console.log(checkAll.checked)",[35,66128,66129],{"class":41},"  \u002F\u002F 得到 是 true 或者是 false\n",[35,66131,66132],{"class":37,"line":17179},[35,66133,66134],{"class":41},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[35,66136,66137,66139,66141,66143,66145,66147,66149,66151,66153,66156,66158,66160,66162],{"class":37,"line":17184},[35,66138,52610],{"class":495},[35,66140,2012],{"class":359},[35,66142,52173],{"class":495},[35,66144,9772],{"class":359},[35,66146,544],{"class":495},[35,66148,4427],{"class":58},[35,66150,9779],{"class":359},[35,66152,1404],{"class":495},[35,66154,66155],{"class":359}," cks.",[35,66157,52294],{"class":58},[35,66159,3548],{"class":359},[35,66161,2633],{"class":495},[35,66163,12776],{"class":359},[35,66165,66166,66169,66171,66174],{"class":37,"line":17189},[35,66167,66168],{"class":359},"        cks[i].checked ",[35,66170,544],{"class":495},[35,66172,66173],{"class":58}," this",[35,66175,66176],{"class":359},".checked\n",[35,66178,66179],{"class":37,"line":17203},[35,66180,52724],{"class":359},[35,66182,66183],{"class":37,"line":17215},[35,66184,33787],{"class":359},[35,66186,66187],{"class":37,"line":17220},[35,66188,66189],{"class":41},"    \u002F\u002F 5. 小复选框控制大复选框\n",[35,66191,66192],{"class":37,"line":17233},[35,66193,141],{"emptyLinePlaceholder":140},[35,66195,66196,66198,66200,66202,66204,66206,66208,66210,66212,66214,66216,66218,66220],{"class":37,"line":17238},[35,66197,3535],{"class":495},[35,66199,2012],{"class":359},[35,66201,52173],{"class":495},[35,66203,9772],{"class":359},[35,66205,544],{"class":495},[35,66207,4427],{"class":58},[35,66209,9779],{"class":359},[35,66211,1404],{"class":495},[35,66213,66155],{"class":359},[35,66215,52294],{"class":58},[35,66217,3548],{"class":359},[35,66219,2633],{"class":495},[35,66221,12776],{"class":359},[35,66223,66224],{"class":37,"line":17243},[35,66225,66226],{"class":41},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[35,66228,66229,66232,66234,66236,66238,66240,66242],{"class":37,"line":17248},[35,66230,66231],{"class":359},"      cks[i].",[35,66233,58139],{"class":48},[35,66235,499],{"class":359},[35,66237,58144],{"class":306},[35,66239,12769],{"class":359},[35,66241,54775],{"class":495},[35,66243,54778],{"class":359},[35,66245,66246],{"class":37,"line":17261},[35,66247,66248],{"class":41},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[35,66250,66251],{"class":37,"line":17266},[35,66252,66253],{"class":41},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[35,66255,66256],{"class":37,"line":32959},[35,66257,66258],{"class":41},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[35,66260,66261],{"class":37,"line":32965},[35,66262,66263],{"class":41},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[35,66265,66266,66269,66271,66273,66275,66277,66280,66282,66284,66286,66288],{"class":37,"line":32971},[35,66267,66268],{"class":359},"        checkAll.checked ",[35,66270,544],{"class":495},[35,66272,54722],{"class":359},[35,66274,56007],{"class":48},[35,66276,499],{"class":359},[35,66278,66279],{"class":306},"'.ck:checked'",[35,66281,31152],{"class":359},[35,66283,52294],{"class":58},[35,66285,58232],{"class":495},[35,66287,66155],{"class":359},[35,66289,56157],{"class":58},[35,66291,66292],{"class":37,"line":32977},[35,66293,65141],{"class":359},[35,66295,66296],{"class":37,"line":32983},[35,66297,2528],{"class":359},[35,66299,66300,66302,66304],{"class":37,"line":32994},[35,66301,52743],{"class":359},[35,66303,52139],{"class":51626},[35,66305,51633],{"class":359},[35,66307,66308,66310,66312],{"class":37,"line":33000},[35,66309,52111],{"class":359},[35,66311,52126],{"class":51626},[35,66313,51633],{"class":359},[35,66315,66316],{"class":37,"line":33020},[35,66317,141],{"emptyLinePlaceholder":140},[35,66319,66320,66322,66324],{"class":37,"line":33026},[35,66321,52111],{"class":359},[35,66323,50961],{"class":51626},[35,66325,51633],{"class":359},[21,66327,66328],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[21,66330,66331],{},"用好之间比较得到的布尔值！！！",[21,66333,66334,66335,66338,66339,2012,66342,1078,66344,66347],{},"在 JS 里访问的时候，",[32,66336,66337],{},"checkbox.checked"," 是一个 ",[645,66340,66341],{},"布尔值",[32,66343,378],{},[32,66345,66346],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[21,66349,66350,66351,66354,66355],{},"HTML 的 ",[32,66352,66353],{},"checked=\"checked\""," 只是 ",[645,66356,66357,66358,66361],{},"初始值；JS 的 ",[32,66359,66360],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[21,66363,66364],{},"：checked是一个伪类选择器",[21,66366,66367],{},[1823,66368],{"alt":30,"src":66369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[21,66371,66372,66375],{},[66373,66374],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[21,66377,66378],{},[1823,66379],{"alt":30,"src":66380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[438,66382,66384],{"id":66383},"_33-dom事件进阶","3.3 DOM事件进阶",[465,66386,66388],{"id":66387},"_331-事件流","3.3.1 事件流",[21,66390,66391],{},[1823,66392],{"alt":30,"src":66393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22332,66395,66397],{"id":66396},"_3311-事件捕获","3.3.1.1 事件捕获",[21,66399,66400],{},[1823,66401],{"alt":30,"src":66402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[25,66404,66406],{"className":50959,"code":66405,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,66409,66410,66412,66414,66416],{"class":37,"line":38},[35,66411,51623],{"class":359},[35,66413,51627],{"class":51626},[35,66415,51630],{"class":48},[35,66417,51633],{"class":359},[35,66419,66420,66422,66424,66426,66428,66430],{"class":37,"line":45},[35,66421,1404],{"class":359},[35,66423,50961],{"class":51626},[35,66425,51642],{"class":48},[35,66427,544],{"class":359},[35,66429,51647],{"class":306},[35,66431,51633],{"class":359},[35,66433,66434],{"class":37,"line":55},[35,66435,141],{"emptyLinePlaceholder":140},[35,66437,66438,66440,66442],{"class":37,"line":65},[35,66439,1404],{"class":359},[35,66441,51660],{"class":51626},[35,66443,51633],{"class":359},[35,66445,66446,66448,66450,66452,66454,66456],{"class":37,"line":74},[35,66447,52470],{"class":359},[35,66449,51670],{"class":51626},[35,66451,51673],{"class":48},[35,66453,544],{"class":359},[35,66455,51678],{"class":306},[35,66457,51633],{"class":359},[35,66459,66460,66462,66464,66466,66468,66470,66472,66474,66476],{"class":37,"line":83},[35,66461,52470],{"class":359},[35,66463,51670],{"class":51626},[35,66465,15254],{"class":48},[35,66467,544],{"class":359},[35,66469,51717],{"class":306},[35,66471,51697],{"class":48},[35,66473,544],{"class":359},[35,66475,51724],{"class":306},[35,66477,51633],{"class":359},[35,66479,66480,66482,66484,66486,66488],{"class":37,"line":92},[35,66481,52470],{"class":359},[35,66483,51733],{"class":51626},[35,66485,51736],{"class":359},[35,66487,51733],{"class":51626},[35,66489,51633],{"class":359},[35,66491,66492,66494,66496],{"class":37,"line":101},[35,66493,52470],{"class":359},[35,66495,416],{"class":51626},[35,66497,51633],{"class":359},[35,66499,66500,66503],{"class":37,"line":110},[35,66501,66502],{"class":48},"    .father",[35,66504,15906],{"class":359},[35,66506,66507,66509,66511,66513,66515],{"class":37,"line":119},[35,66508,55097],{"class":58},[35,66510,51763],{"class":359},[35,66512,65400],{"class":58},[35,66514,51818],{"class":495},[35,66516,1655],{"class":359},[35,66518,66519,66521,66523,66525,66527],{"class":37,"line":128},[35,66520,55111],{"class":58},[35,66522,51763],{"class":359},[35,66524,65400],{"class":58},[35,66526,51818],{"class":495},[35,66528,1655],{"class":359},[35,66530,66531,66533,66535,66537],{"class":37,"line":137},[35,66532,55210],{"class":58},[35,66534,51763],{"class":359},[35,66536,51971],{"class":58},[35,66538,1655],{"class":359},[35,66540,66541],{"class":37,"line":144},[35,66542,2528],{"class":359},[35,66544,66545],{"class":37,"line":150},[35,66546,141],{"emptyLinePlaceholder":140},[35,66548,66549,66552],{"class":37,"line":159},[35,66550,66551],{"class":48},"    .son",[35,66553,15906],{"class":359},[35,66555,66556,66558,66560,66562,66564],{"class":37,"line":168},[35,66557,55097],{"class":58},[35,66559,51763],{"class":359},[35,66561,2072],{"class":58},[35,66563,51818],{"class":495},[35,66565,1655],{"class":359},[35,66567,66568,66570,66572,66574,66576],{"class":37,"line":177},[35,66569,55111],{"class":58},[35,66571,51763],{"class":359},[35,66573,2072],{"class":58},[35,66575,51818],{"class":495},[35,66577,1655],{"class":359},[35,66579,66580,66582,66584,66586],{"class":37,"line":182},[35,66581,55210],{"class":58},[35,66583,51763],{"class":359},[35,66585,55215],{"class":58},[35,66587,1655],{"class":359},[35,66589,66590],{"class":37,"line":188},[35,66591,2528],{"class":359},[35,66593,66594,66596,66598],{"class":37,"line":197},[35,66595,52743],{"class":359},[35,66597,416],{"class":51626},[35,66599,51633],{"class":359},[35,66601,66602,66604,66606],{"class":37,"line":206},[35,66603,52111],{"class":359},[35,66605,51660],{"class":51626},[35,66607,51633],{"class":359},[35,66609,66610],{"class":37,"line":215},[35,66611,141],{"emptyLinePlaceholder":140},[35,66613,66614,66616,66618],{"class":37,"line":224},[35,66615,1404],{"class":359},[35,66617,52126],{"class":51626},[35,66619,51633],{"class":359},[35,66621,66622,66624,66626,66628,66630,66633],{"class":37,"line":233},[35,66623,52470],{"class":359},[35,66625,51937],{"class":51626},[35,66627,53812],{"class":48},[35,66629,544],{"class":359},[35,66631,66632],{"class":306},"\"father\"",[35,66634,51633],{"class":359},[35,66636,66637,66639,66641,66643,66645,66648,66650,66652],{"class":37,"line":238},[35,66638,51667],{"class":359},[35,66640,51937],{"class":51626},[35,66642,53812],{"class":48},[35,66644,544],{"class":359},[35,66646,66647],{"class":306},"\"son\"",[35,66649,55640],{"class":359},[35,66651,51937],{"class":51626},[35,66653,51633],{"class":359},[35,66655,66656,66658,66660],{"class":37,"line":244},[35,66657,52743],{"class":359},[35,66659,51937],{"class":51626},[35,66661,51633],{"class":359},[35,66663,66664,66666,66668],{"class":37,"line":253},[35,66665,52470],{"class":359},[35,66667,52139],{"class":51626},[35,66669,51633],{"class":359},[35,66671,66672,66674,66677,66679,66681,66683,66685,66688],{"class":37,"line":262},[35,66673,11555],{"class":495},[35,66675,66676],{"class":58}," fa",[35,66678,13898],{"class":495},[35,66680,54722],{"class":359},[35,66682,54725],{"class":48},[35,66684,499],{"class":359},[35,66686,66687],{"class":306},"'.father'",[35,66689,505],{"class":359},[35,66691,66692,66694,66697,66699,66701,66703,66705,66708],{"class":37,"line":271},[35,66693,11555],{"class":495},[35,66695,66696],{"class":58}," son",[35,66698,13898],{"class":495},[35,66700,54722],{"class":359},[35,66702,54725],{"class":48},[35,66704,499],{"class":359},[35,66706,66707],{"class":306},"'.son'",[35,66709,505],{"class":359},[35,66711,66712,66714,66716,66718,66720,66722,66724],{"class":37,"line":280},[35,66713,52733],{"class":359},[35,66715,58139],{"class":48},[35,66717,499],{"class":359},[35,66719,58144],{"class":306},[35,66721,12769],{"class":359},[35,66723,54775],{"class":495},[35,66725,54778],{"class":359},[35,66727,66728,66730,66732,66735],{"class":37,"line":289},[35,66729,59251],{"class":48},[35,66731,499],{"class":359},[35,66733,66734],{"class":306},"'woshiu1'",[35,66736,505],{"class":359},[35,66738,66739,66741,66743],{"class":37,"line":294},[35,66740,54861],{"class":359},[35,66742,378],{"class":58},[35,66744,505],{"class":359},[35,66746,66747,66750,66752,66754,66756,66758,66760],{"class":37,"line":300},[35,66748,66749],{"class":359},"    fa.",[35,66751,58139],{"class":48},[35,66753,499],{"class":359},[35,66755,58144],{"class":306},[35,66757,12769],{"class":359},[35,66759,54775],{"class":495},[35,66761,54778],{"class":359},[35,66763,66764,66766,66768,66771],{"class":37,"line":313},[35,66765,59251],{"class":48},[35,66767,499],{"class":359},[35,66769,66770],{"class":306},"'1'",[35,66772,505],{"class":359},[35,66774,66775,66777,66779],{"class":37,"line":324},[35,66776,54861],{"class":359},[35,66778,378],{"class":58},[35,66780,505],{"class":359},[35,66782,66783,66786,66788,66790,66792,66794,66796],{"class":37,"line":2955},[35,66784,66785],{"class":359},"    son.",[35,66787,58139],{"class":48},[35,66789,499],{"class":359},[35,66791,58144],{"class":306},[35,66793,12769],{"class":359},[35,66795,54775],{"class":495},[35,66797,54778],{"class":359},[35,66799,66800,66802,66804,66807],{"class":37,"line":8282},[35,66801,59251],{"class":48},[35,66803,499],{"class":359},[35,66805,66806],{"class":306},"'2'",[35,66808,505],{"class":359},[35,66810,66811,66813,66815],{"class":37,"line":8306},[35,66812,54861],{"class":359},[35,66814,378],{"class":58},[35,66816,505],{"class":359},[35,66818,66819,66821,66823],{"class":37,"line":8311},[35,66820,52743],{"class":359},[35,66822,52139],{"class":51626},[35,66824,51633],{"class":359},[35,66826,66827,66829,66831],{"class":37,"line":8317},[35,66828,52111],{"class":359},[35,66830,52126],{"class":51626},[35,66832,51633],{"class":359},[35,66834,66835],{"class":37,"line":8344},[35,66836,141],{"emptyLinePlaceholder":140},[35,66838,66839,66841,66843],{"class":37,"line":8349},[35,66840,52111],{"class":359},[35,66842,50961],{"class":51626},[35,66844,51633],{"class":359},[21,66846,66847],{},[1823,66848],{"alt":30,"src":66849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[21,66851,66852],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22332,66854,66856],{"id":66855},"_3312-事件冒泡","3.3.1.2 事件冒泡",[21,66858,66859],{},[1823,66860],{"alt":30,"src":66861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[21,66863,66864],{},"反着来",[21,66866,66867],{},"注意是同名事件，比如都是‘click’",[22332,66869,66871],{"id":66870},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[21,66873,66874],{},[1823,66875],{"alt":30,"src":66876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22332,66878,66880],{"id":66879},"_3314-解绑事件","3.3.1.4 解绑事件",[21,66882,66883],{},[1823,66884],{"alt":30,"src":66885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[21,66887,66888],{},[1823,66889],{"alt":30,"src":66890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22332,66892,66894],{"id":66893},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[14,66896,66897],{},[17,66898,66899],{},"事件类型的区别",[21,66901,66902],{},[1823,66903],{"alt":30,"src":66904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[21,66906,66907],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[14,66909,66910],{"start":45},[17,66911,66912],{},"注册事件的区别",[21,66914,66915],{},[1823,66916],{"alt":30,"src":66917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22332,66919,66921],{"id":66920},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[21,66923,66924],{},[1823,66925],{"alt":30,"src":66926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[21,66928,66929],{},[1823,66930],{"alt":30,"src":66931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[25,66933,66935],{"className":53393,"code":66934,"language":53395,"meta":30,"style":30},"\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",[32,66936,66937,66945,66962,66985,66993,66998,67003,67008,67012,67020,67028],{"__ignoreMap":30},[35,66938,66939,66941,66943],{"class":37,"line":38},[35,66940,1404],{"class":359},[35,66942,52126],{"class":51626},[35,66944,51633],{"class":359},[35,66946,66947,66949,66952,66955,66957,66960],{"class":37,"line":45},[35,66948,52470],{"class":359},[35,66950,66951],{"class":51626},"form",[35,66953,66954],{"class":48}," action",[35,66956,544],{"class":359},[35,66958,66959],{"class":306},"\"http:\u002F\u002Fwww.itcast.cn\"",[35,66961,51633],{"class":359},[35,66963,66964,66966,66968,66970,66972,66975,66978,66980,66983],{"class":37,"line":55},[35,66965,51667],{"class":359},[35,66967,54147],{"class":51626},[35,66969,54150],{"class":48},[35,66971,544],{"class":359},[35,66973,66974],{"class":306},"\"submit\"",[35,66976,66977],{"class":48}," value",[35,66979,544],{"class":359},[35,66981,66982],{"class":306},"\"免费注册\"",[35,66984,51633],{"class":359},[35,66986,66987,66989,66991],{"class":37,"line":65},[35,66988,51667],{"class":359},[35,66990,52139],{"class":51626},[35,66992,51633],{"class":359},[35,66994,66995],{"class":37,"line":74},[35,66996,66997],{"class":359},"      const form = document.querySelector('form')\n",[35,66999,67000],{"class":37,"line":83},[35,67001,67002],{"class":359},"      form.addEventListener('submit', function (e) {\n",[35,67004,67005],{"class":37,"line":92},[35,67006,67007],{"class":359},"        e.preventDefault()\n",[35,67009,67010],{"class":37,"line":101},[35,67011,65141],{"class":359},[35,67013,67014,67016,67018],{"class":37,"line":110},[35,67015,52102],{"class":359},[35,67017,52139],{"class":51626},[35,67019,51633],{"class":359},[35,67021,67022,67024,67026],{"class":37,"line":119},[35,67023,52743],{"class":359},[35,67025,66951],{"class":51626},[35,67027,51633],{"class":359},[35,67029,67030,67032,67034],{"class":37,"line":128},[35,67031,52111],{"class":359},[35,67033,52126],{"class":51626},[35,67035,51633],{"class":359},[21,67037,67038],{},"点击不在跳转！！！",[465,67040,67042],{"id":67041},"_332-事件委托","3.3.2 事件委托",[21,67044,67045],{},[1823,67046],{"alt":30,"src":67047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[25,67049,67051],{"className":50959,"code":67050,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,67054,67055,67057,67059,67061],{"class":37,"line":38},[35,67056,51623],{"class":359},[35,67058,51627],{"class":51626},[35,67060,51630],{"class":48},[35,67062,51633],{"class":359},[35,67064,67065,67067,67069,67071,67073,67075],{"class":37,"line":45},[35,67066,1404],{"class":359},[35,67068,50961],{"class":51626},[35,67070,51642],{"class":48},[35,67072,544],{"class":359},[35,67074,51647],{"class":306},[35,67076,51633],{"class":359},[35,67078,67079],{"class":37,"line":55},[35,67080,141],{"emptyLinePlaceholder":140},[35,67082,67083,67085,67087],{"class":37,"line":65},[35,67084,1404],{"class":359},[35,67086,51660],{"class":51626},[35,67088,51633],{"class":359},[35,67090,67091,67093,67095,67097,67099,67101],{"class":37,"line":74},[35,67092,52470],{"class":359},[35,67094,51670],{"class":51626},[35,67096,51673],{"class":48},[35,67098,544],{"class":359},[35,67100,51678],{"class":306},[35,67102,51633],{"class":359},[35,67104,67105,67107,67109,67111,67113,67115,67117,67119,67121],{"class":37,"line":83},[35,67106,52470],{"class":359},[35,67108,51670],{"class":51626},[35,67110,15254],{"class":48},[35,67112,544],{"class":359},[35,67114,51717],{"class":306},[35,67116,51697],{"class":48},[35,67118,544],{"class":359},[35,67120,51724],{"class":306},[35,67122,51633],{"class":359},[35,67124,67125,67127,67129,67131,67133],{"class":37,"line":92},[35,67126,52470],{"class":359},[35,67128,51733],{"class":51626},[35,67130,51736],{"class":359},[35,67132,51733],{"class":51626},[35,67134,51633],{"class":359},[35,67136,67137,67139,67141],{"class":37,"line":101},[35,67138,52111],{"class":359},[35,67140,51660],{"class":51626},[35,67142,51633],{"class":359},[35,67144,67145],{"class":37,"line":110},[35,67146,141],{"emptyLinePlaceholder":140},[35,67148,67149,67151,67153],{"class":37,"line":119},[35,67150,1404],{"class":359},[35,67152,52126],{"class":51626},[35,67154,51633],{"class":359},[35,67156,67157,67159,67161],{"class":37,"line":128},[35,67158,52470],{"class":359},[35,67160,1501],{"class":51626},[35,67162,51633],{"class":359},[35,67164,67165,67167,67169,67171,67173],{"class":37,"line":137},[35,67166,51667],{"class":359},[35,67168,17],{"class":51626},[35,67170,54292],{"class":359},[35,67172,17],{"class":51626},[35,67174,51633],{"class":359},[35,67176,67177,67179,67181,67183,67185],{"class":37,"line":144},[35,67178,51667],{"class":359},[35,67180,17],{"class":51626},[35,67182,54311],{"class":359},[35,67184,17],{"class":51626},[35,67186,51633],{"class":359},[35,67188,67189,67191,67193,67195,67197],{"class":37,"line":150},[35,67190,51667],{"class":359},[35,67192,17],{"class":51626},[35,67194,54330],{"class":359},[35,67196,17],{"class":51626},[35,67198,51633],{"class":359},[35,67200,67201,67203,67205,67207,67209],{"class":37,"line":159},[35,67202,51667],{"class":359},[35,67204,17],{"class":51626},[35,67206,54349],{"class":359},[35,67208,17],{"class":51626},[35,67210,51633],{"class":359},[35,67212,67213,67215,67217,67219,67221],{"class":37,"line":168},[35,67214,51667],{"class":359},[35,67216,17],{"class":51626},[35,67218,54368],{"class":359},[35,67220,17],{"class":51626},[35,67222,51633],{"class":359},[35,67224,67225,67227,67229,67232,67234],{"class":37,"line":177},[35,67226,51667],{"class":359},[35,67228,21],{"class":51626},[35,67230,67231],{"class":359},">我不需要变色\u003C\u002F",[35,67233,21],{"class":51626},[35,67235,51633],{"class":359},[35,67237,67238,67240,67242],{"class":37,"line":182},[35,67239,52743],{"class":359},[35,67241,1501],{"class":51626},[35,67243,51633],{"class":359},[35,67245,67246,67248,67250],{"class":37,"line":188},[35,67247,52470],{"class":359},[35,67249,52139],{"class":51626},[35,67251,51633],{"class":359},[35,67253,67254],{"class":37,"line":197},[35,67255,67256],{"class":41},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[35,67258,67259,67261,67263,67265,67267,67269,67271,67274],{"class":37,"line":206},[35,67260,11555],{"class":495},[35,67262,61618],{"class":58},[35,67264,13898],{"class":495},[35,67266,54722],{"class":359},[35,67268,54725],{"class":48},[35,67270,499],{"class":359},[35,67272,67273],{"class":306},"'ul'",[35,67275,505],{"class":359},[35,67277,67278,67281,67283,67285,67287,67289,67291,67293,67295],{"class":37,"line":215},[35,67279,67280],{"class":359},"    ul.",[35,67282,58139],{"class":48},[35,67284,499],{"class":359},[35,67286,58144],{"class":306},[35,67288,12769],{"class":359},[35,67290,54775],{"class":495},[35,67292,2012],{"class":359},[35,67294,571],{"class":5550},[35,67296,12776],{"class":359},[35,67298,67299],{"class":37,"line":224},[35,67300,67301],{"class":41},"      \u002F\u002F alert(1)\n",[35,67303,67304],{"class":37,"line":233},[35,67305,67306],{"class":41},"      \u002F\u002F e.target就是我们点击的对象\n",[35,67308,67309],{"class":37,"line":238},[35,67310,67311],{"class":41},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[35,67313,67314],{"class":37,"line":244},[35,67315,67316],{"class":41},"      \u002F\u002F e.target.style.color = 'red'\n",[35,67318,67319,67321,67323],{"class":37,"line":253},[35,67320,58570],{"class":359},[35,67322,58573],{"class":48},[35,67324,67325],{"class":359},"(e)\n",[35,67327,67328],{"class":37,"line":262},[35,67329,141],{"emptyLinePlaceholder":140},[35,67331,67332,67334,67337],{"class":37,"line":271},[35,67333,58570],{"class":359},[35,67335,67336],{"class":48},"dir",[35,67338,67339],{"class":359},"(e.target)\n",[35,67341,67342],{"class":37,"line":280},[35,67343,141],{"emptyLinePlaceholder":140},[35,67345,67346],{"class":37,"line":289},[35,67347,67348],{"class":41},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[35,67350,67351],{"class":37,"line":294},[35,67352,67353],{"class":41},"      \u002F\u002F 通过tagName来进行判断\n",[35,67355,67356,67358,67361,67363,67366],{"class":37,"line":300},[35,67357,54806],{"class":495},[35,67359,67360],{"class":359}," (e.target.tagName ",[35,67362,54812],{"class":495},[35,67364,67365],{"class":306}," 'LI'",[35,67367,12776],{"class":359},[35,67369,67370,67373,67375],{"class":37,"line":313},[35,67371,67372],{"class":359},"        e.target.style.color ",[35,67374,544],{"class":495},[35,67376,67377],{"class":306}," 'red'\n",[35,67379,67380],{"class":37,"line":324},[35,67381,52724],{"class":359},[35,67383,67384],{"class":37,"line":2955},[35,67385,33787],{"class":359},[35,67387,67388,67390,67392],{"class":37,"line":8282},[35,67389,52743],{"class":359},[35,67391,52139],{"class":51626},[35,67393,51633],{"class":359},[35,67395,67396,67398,67400],{"class":37,"line":8306},[35,67397,52111],{"class":359},[35,67399,52126],{"class":51626},[35,67401,51633],{"class":359},[35,67403,67404],{"class":37,"line":8311},[35,67405,141],{"emptyLinePlaceholder":140},[35,67407,67408,67410,67412],{"class":37,"line":8317},[35,67409,52111],{"class":359},[35,67411,50961],{"class":51626},[35,67413,51633],{"class":359},[21,67415,67416],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[21,67418,67419],{},"if(e.target.ragName==='P') {}",[21,67421,67422],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[21,67424,67425],{},"通过事件委托的方式实现tab栏切换改造：",[21,67427,67428],{},"一定要记住自定义属性！！！！！！",[21,67430,67431],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[21,67433,67434],{},"id是自定义的属性名",[21,67436,67437],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[25,67439,67441],{"className":50959,"code":67440,"language":50961,"meta":30,"style":30},"\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",[32,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":30},[35,67444,67445,67447,67449,67451],{"class":37,"line":38},[35,67446,51623],{"class":359},[35,67448,51627],{"class":51626},[35,67450,51630],{"class":48},[35,67452,51633],{"class":359},[35,67454,67455,67457,67459,67461,67463,67465],{"class":37,"line":45},[35,67456,1404],{"class":359},[35,67458,50961],{"class":51626},[35,67460,51642],{"class":48},[35,67462,544],{"class":359},[35,67464,51647],{"class":306},[35,67466,51633],{"class":359},[35,67468,67469],{"class":37,"line":55},[35,67470,141],{"emptyLinePlaceholder":140},[35,67472,67473,67475,67477],{"class":37,"line":65},[35,67474,1404],{"class":359},[35,67476,51660],{"class":51626},[35,67478,51633],{"class":359},[35,67480,67481,67483,67485,67487,67489,67491],{"class":37,"line":74},[35,67482,52470],{"class":359},[35,67484,51670],{"class":51626},[35,67486,51673],{"class":48},[35,67488,544],{"class":359},[35,67490,51678],{"class":306},[35,67492,59453],{"class":359},[35,67494,67495,67497,67499,67501,67503,67505,67507,67509,67511],{"class":37,"line":83},[35,67496,52470],{"class":359},[35,67498,51670],{"class":51626},[35,67500,51689],{"class":48},[35,67502,544],{"class":359},[35,67504,51694],{"class":306},[35,67506,51697],{"class":48},[35,67508,544],{"class":359},[35,67510,51702],{"class":306},[35,67512,59453],{"class":359},[35,67514,67515,67517,67519,67521,67523,67525,67527,67529,67531],{"class":37,"line":92},[35,67516,52470],{"class":359},[35,67518,51670],{"class":51626},[35,67520,15254],{"class":48},[35,67522,544],{"class":359},[35,67524,51717],{"class":306},[35,67526,51697],{"class":48},[35,67528,544],{"class":359},[35,67530,51724],{"class":306},[35,67532,59453],{"class":359},[35,67534,67535,67537,67539,67541,67543],{"class":37,"line":101},[35,67536,52470],{"class":359},[35,67538,51733],{"class":51626},[35,67540,63951],{"class":359},[35,67542,51733],{"class":51626},[35,67544,51633],{"class":359},[35,67546,67547,67549,67551],{"class":37,"line":110},[35,67548,52470],{"class":359},[35,67550,416],{"class":51626},[35,67552,51633],{"class":359},[35,67554,67555,67557],{"class":37,"line":119},[35,67556,6737],{"class":51626},[35,67558,15906],{"class":359},[35,67560,67561,67563,67565,67567],{"class":37,"line":128},[35,67562,55032],{"class":58},[35,67564,51763],{"class":359},[35,67566,687],{"class":58},[35,67568,1655],{"class":359},[35,67570,67571,67573,67575,67577],{"class":37,"line":137},[35,67572,55021],{"class":58},[35,67574,51763],{"class":359},[35,67576,687],{"class":58},[35,67578,1655],{"class":359},[35,67580,67581],{"class":37,"line":144},[35,67582,2528],{"class":359},[35,67584,67585],{"class":37,"line":150},[35,67586,141],{"emptyLinePlaceholder":140},[35,67588,67589,67591],{"class":37,"line":159},[35,67590,64002],{"class":48},[35,67592,15906],{"class":359},[35,67594,67595,67597,67599,67601,67603],{"class":37,"line":168},[35,67596,55097],{"class":58},[35,67598,51763],{"class":359},[35,67600,64013],{"class":58},[35,67602,51818],{"class":495},[35,67604,1655],{"class":359},[35,67606,67607,67609,67611,67613,67615],{"class":37,"line":177},[35,67608,55111],{"class":58},[35,67610,51763],{"class":359},[35,67612,64026],{"class":58},[35,67614,51818],{"class":495},[35,67616,1655],{"class":359},[35,67618,67619,67621,67623,67625,67627],{"class":37,"line":182},[35,67620,55032],{"class":58},[35,67622,51763],{"class":359},[35,67624,1194],{"class":58},[35,67626,51818],{"class":495},[35,67628,1655],{"class":359},[35,67630,67631,67633,67635,67637,67639,67641,67643],{"class":37,"line":188},[35,67632,62303],{"class":58},[35,67634,51763],{"class":359},[35,67636,713],{"class":58},[35,67638,51818],{"class":495},[35,67640,51847],{"class":58},[35,67642,62570],{"class":58},[35,67644,1655],{"class":359},[35,67646,67647],{"class":37,"line":197},[35,67648,2528],{"class":359},[35,67650,67651],{"class":37,"line":206},[35,67652,141],{"emptyLinePlaceholder":140},[35,67654,67655,67657],{"class":37,"line":215},[35,67656,64071],{"class":48},[35,67658,15906],{"class":359},[35,67660,67661,67663,67665,67667,67669],{"class":37,"line":224},[35,67662,55097],{"class":58},[35,67664,51763],{"class":359},[35,67666,807],{"class":58},[35,67668,823],{"class":495},[35,67670,1655],{"class":359},[35,67672,67673,67675,67677,67679,67681],{"class":37,"line":233},[35,67674,55111],{"class":58},[35,67676,51763],{"class":359},[35,67678,1401],{"class":58},[35,67680,51818],{"class":495},[35,67682,1655],{"class":359},[35,67684,67685,67687,67689,67691,67693],{"class":37,"line":238},[35,67686,57685],{"class":58},[35,67688,51763],{"class":359},[35,67690,1401],{"class":58},[35,67692,51818],{"class":495},[35,67694,1655],{"class":359},[35,67696,67697,67699,67701,67703],{"class":37,"line":244},[35,67698,55335],{"class":58},[35,67700,51763],{"class":359},[35,67702,51803],{"class":58},[35,67704,1655],{"class":359},[35,67706,67707,67709,67711,67713],{"class":37,"line":253},[35,67708,55346],{"class":58},[35,67710,51763],{"class":359},[35,67712,51994],{"class":58},[35,67714,1655],{"class":359},[35,67716,67717],{"class":37,"line":262},[35,67718,2528],{"class":359},[35,67720,67721],{"class":37,"line":271},[35,67722,141],{"emptyLinePlaceholder":140},[35,67724,67725,67727,67729],{"class":37,"line":280},[35,67726,64071],{"class":48},[35,67728,64144],{"class":51626},[35,67730,15906],{"class":359},[35,67732,67733,67735,67737,67739,67741],{"class":37,"line":289},[35,67734,55248],{"class":58},[35,67736,51763],{"class":359},[35,67738,1294],{"class":58},[35,67740,51818],{"class":495},[35,67742,1655],{"class":359},[35,67744,67745,67747,67749,67751],{"class":37,"line":294},[35,67746,62660],{"class":58},[35,67748,51763],{"class":359},[35,67750,64167],{"class":58},[35,67752,1655],{"class":359},[35,67754,67755,67757,67759,67761,67763],{"class":37,"line":300},[35,67756,62326],{"class":58},[35,67758,51763],{"class":359},[35,67760,1194],{"class":58},[35,67762,51818],{"class":495},[35,67764,1655],{"class":359},[35,67766,67767],{"class":37,"line":313},[35,67768,2528],{"class":359},[35,67770,67771],{"class":37,"line":324},[35,67772,141],{"emptyLinePlaceholder":140},[35,67774,67775,67777,67779],{"class":37,"line":2955},[35,67776,64071],{"class":48},[35,67778,61618],{"class":51626},[35,67780,15906],{"class":359},[35,67782,67783,67785,67787,67789],{"class":37,"line":8282},[35,67784,55058],{"class":58},[35,67786,51763],{"class":359},[35,67788,55063],{"class":58},[35,67790,1655],{"class":359},[35,67792,67793,67795,67797,67799],{"class":37,"line":8306},[35,67794,55335],{"class":58},[35,67796,51763],{"class":359},[35,67798,51803],{"class":58},[35,67800,1655],{"class":359},[35,67802,67803,67805,67807,67809],{"class":37,"line":8311},[35,67804,55346],{"class":58},[35,67806,51763],{"class":359},[35,67808,51906],{"class":58},[35,67810,1655],{"class":359},[35,67812,67813],{"class":37,"line":8317},[35,67814,2528],{"class":359},[35,67816,67817],{"class":37,"line":8344},[35,67818,141],{"emptyLinePlaceholder":140},[35,67820,67821,67823,67825,67827],{"class":37,"line":8349},[35,67822,64071],{"class":48},[35,67824,61618],{"class":51626},[35,67826,55401],{"class":51626},[35,67828,15906],{"class":359},[35,67830,67831,67833,67835,67837,67839,67841],{"class":37,"line":8355},[35,67832,55032],{"class":58},[35,67834,51763],{"class":359},[35,67836,687],{"class":58},[35,67838,9284],{"class":58},[35,67840,51818],{"class":495},[35,67842,1655],{"class":359},[35,67844,67845,67847,67849,67851,67853],{"class":37,"line":8367},[35,67846,55248],{"class":58},[35,67848,51763],{"class":359},[35,67850,1043],{"class":58},[35,67852,51818],{"class":495},[35,67854,1655],{"class":359},[35,67856,67857],{"class":37,"line":8379},[35,67858,2528],{"class":359},[35,67860,67861],{"class":37,"line":8391},[35,67862,141],{"emptyLinePlaceholder":140},[35,67864,67865,67867,67869,67871,67873],{"class":37,"line":10050},[35,67866,64071],{"class":48},[35,67868,61618],{"class":51626},[35,67870,55401],{"class":51626},[35,67872,1759],{"class":51626},[35,67874,15906],{"class":359},[35,67876,67877,67879,67881,67883],{"class":37,"line":10075},[35,67878,64296],{"class":58},[35,67880,51763],{"class":359},[35,67882,55063],{"class":58},[35,67884,1655],{"class":359},[35,67886,67887,67889,67891,67893,67895,67897,67899],{"class":37,"line":10098},[35,67888,62558],{"class":58},[35,67890,51763],{"class":359},[35,67892,574],{"class":58},[35,67894,51818],{"class":495},[35,67896,51847],{"class":58},[35,67898,64317],{"class":58},[35,67900,1655],{"class":359},[35,67902,67903,67905,67907,67909],{"class":37,"line":10122},[35,67904,57742],{"class":58},[35,67906,51763],{"class":359},[35,67908,62695],{"class":58},[35,67910,1655],{"class":359},[35,67912,67913],{"class":37,"line":10127},[35,67914,2528],{"class":359},[35,67916,67917],{"class":37,"line":10132},[35,67918,141],{"emptyLinePlaceholder":140},[35,67920,67921,67923,67925,67927,67929,67931],{"class":37,"line":10137},[35,67922,64071],{"class":48},[35,67924,61618],{"class":51626},[35,67926,55401],{"class":51626},[35,67928,1759],{"class":51626},[35,67930,64350],{"class":48},[35,67932,15906],{"class":359},[35,67934,67935,67937,67939,67941],{"class":37,"line":10146},[35,67936,62117],{"class":58},[35,67938,51763],{"class":359},[35,67940,64361],{"class":58},[35,67942,1655],{"class":359},[35,67944,67945,67947,67949,67951],{"class":37,"line":10151},[35,67946,57742],{"class":58},[35,67948,51763],{"class":359},[35,67950,64361],{"class":58},[35,67952,1655],{"class":359},[35,67954,67955],{"class":37,"line":10157},[35,67956,2528],{"class":359},[35,67958,67959],{"class":37,"line":10178},[35,67960,141],{"emptyLinePlaceholder":140},[35,67962,67963,67965],{"class":37,"line":10184},[35,67964,64386],{"class":48},[35,67966,15906],{"class":359},[35,67968,67969,67971,67973,67975,67977,67979],{"class":37,"line":10198},[35,67970,55021],{"class":58},[35,67972,51763],{"class":359},[35,67974,687],{"class":58},[35,67976,64399],{"class":58},[35,67978,51818],{"class":495},[35,67980,1655],{"class":359},[35,67982,67983],{"class":37,"line":10204},[35,67984,2528],{"class":359},[35,67986,67987],{"class":37,"line":10231},[35,67988,141],{"emptyLinePlaceholder":140},[35,67990,67991,67993,67995],{"class":37,"line":10240},[35,67992,64386],{"class":48},[35,67994,62500],{"class":48},[35,67996,15906],{"class":359},[35,67998,67999,68001,68003,68005],{"class":37,"line":10246},[35,68000,55335],{"class":58},[35,68002,51763],{"class":359},[35,68004,55063],{"class":58},[35,68006,1655],{"class":359},[35,68008,68009],{"class":37,"line":10254},[35,68010,2528],{"class":359},[35,68012,68013],{"class":37,"line":10259},[35,68014,141],{"emptyLinePlaceholder":140},[35,68016,68017,68019,68022],{"class":37,"line":16938},[35,68018,64386],{"class":48},[35,68020,68021],{"class":48}," .active",[35,68023,15906],{"class":359},[35,68025,68026,68028,68030,68032],{"class":37,"line":16944},[35,68027,55335],{"class":58},[35,68029,51763],{"class":359},[35,68031,61195],{"class":58},[35,68033,1655],{"class":359},[35,68035,68036],{"class":37,"line":16967},[35,68037,2528],{"class":359},[35,68039,68040,68042,68044],{"class":37,"line":16973},[35,68041,52743],{"class":359},[35,68043,416],{"class":51626},[35,68045,51633],{"class":359},[35,68047,68048,68050,68052],{"class":37,"line":16996},[35,68049,52111],{"class":359},[35,68051,51660],{"class":51626},[35,68053,51633],{"class":359},[35,68055,68056],{"class":37,"line":17010},[35,68057,141],{"emptyLinePlaceholder":140},[35,68059,68060,68062,68064],{"class":37,"line":17030},[35,68061,1404],{"class":359},[35,68063,52126],{"class":51626},[35,68065,51633],{"class":359},[35,68067,68068,68070,68072,68074,68076,68078],{"class":37,"line":17036},[35,68069,52470],{"class":359},[35,68071,51937],{"class":51626},[35,68073,53812],{"class":48},[35,68075,544],{"class":359},[35,68077,64501],{"class":306},[35,68079,51633],{"class":359},[35,68081,68082,68084,68086,68088,68090,68092],{"class":37,"line":17047},[35,68083,51667],{"class":359},[35,68085,51937],{"class":51626},[35,68087,53812],{"class":48},[35,68089,544],{"class":359},[35,68091,64516],{"class":306},[35,68093,51633],{"class":359},[35,68095,68096,68098,68100,68102,68104],{"class":37,"line":17070},[35,68097,55560],{"class":359},[35,68099,465],{"class":51626},[35,68101,64527],{"class":359},[35,68103,465],{"class":51626},[35,68105,51633],{"class":359},[35,68107,68108,68110,68112],{"class":37,"line":17092},[35,68109,55560],{"class":359},[35,68111,1501],{"class":51626},[35,68113,51633],{"class":359},[35,68115,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68143,68145,68147,68149,68151],{"class":37,"line":17097},[35,68117,55628],{"class":359},[35,68119,17],{"class":51626},[35,68121,61378],{"class":359},[35,68123,734],{"class":51626},[35,68125,53812],{"class":48},[35,68127,544],{"class":359},[35,68129,60032],{"class":306},[35,68131,61383],{"class":48},[35,68133,544],{"class":359},[35,68135,64562],{"class":306},[35,68137,54277],{"class":48},[35,68139,544],{"class":359},[35,68141,68142],{"class":306},"\"0\"",[35,68144,64565],{"class":359},[35,68146,734],{"class":51626},[35,68148,55640],{"class":359},[35,68150,17],{"class":51626},[35,68152,51633],{"class":359},[35,68154,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183],{"class":37,"line":17103},[35,68156,55628],{"class":359},[35,68158,17],{"class":51626},[35,68160,61378],{"class":359},[35,68162,734],{"class":51626},[35,68164,61383],{"class":48},[35,68166,544],{"class":359},[35,68168,64562],{"class":306},[35,68170,54277],{"class":48},[35,68172,544],{"class":359},[35,68174,4012],{"class":306},[35,68176,64592],{"class":359},[35,68178,734],{"class":51626},[35,68180,55640],{"class":359},[35,68182,17],{"class":51626},[35,68184,51633],{"class":359},[35,68186,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215],{"class":37,"line":17117},[35,68188,55628],{"class":359},[35,68190,17],{"class":51626},[35,68192,61378],{"class":359},[35,68194,734],{"class":51626},[35,68196,61383],{"class":48},[35,68198,544],{"class":359},[35,68200,64562],{"class":306},[35,68202,54277],{"class":48},[35,68204,544],{"class":359},[35,68206,4035],{"class":306},[35,68208,64619],{"class":359},[35,68210,734],{"class":51626},[35,68212,55640],{"class":359},[35,68214,17],{"class":51626},[35,68216,51633],{"class":359},[35,68218,68219,68221,68223,68225,68227,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247],{"class":37,"line":17130},[35,68220,55628],{"class":359},[35,68222,17],{"class":51626},[35,68224,61378],{"class":359},[35,68226,734],{"class":51626},[35,68228,61383],{"class":48},[35,68230,544],{"class":359},[35,68232,64562],{"class":306},[35,68234,54277],{"class":48},[35,68236,544],{"class":359},[35,68238,4048],{"class":306},[35,68240,64646],{"class":359},[35,68242,734],{"class":51626},[35,68244,55640],{"class":359},[35,68246,17],{"class":51626},[35,68248,51633],{"class":359},[35,68250,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269,68271,68273,68275,68277,68279],{"class":37,"line":17135},[35,68252,55628],{"class":359},[35,68254,17],{"class":51626},[35,68256,61378],{"class":359},[35,68258,734],{"class":51626},[35,68260,61383],{"class":48},[35,68262,544],{"class":359},[35,68264,64562],{"class":306},[35,68266,54277],{"class":48},[35,68268,544],{"class":359},[35,68270,4061],{"class":306},[35,68272,64673],{"class":359},[35,68274,734],{"class":51626},[35,68276,55640],{"class":359},[35,68278,17],{"class":51626},[35,68280,51633],{"class":359},[35,68282,68283,68285,68287],{"class":37,"line":17149},[35,68284,55733],{"class":359},[35,68286,1501],{"class":51626},[35,68288,51633],{"class":359},[35,68290,68291,68293,68295],{"class":37,"line":17154},[35,68292,52102],{"class":359},[35,68294,51937],{"class":51626},[35,68296,51633],{"class":359},[35,68298,68299,68301,68303,68305,68307,68309],{"class":37,"line":17160},[35,68300,51667],{"class":359},[35,68302,51937],{"class":51626},[35,68304,53812],{"class":48},[35,68306,544],{"class":359},[35,68308,64710],{"class":306},[35,68310,51633],{"class":359},[35,68312,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343],{"class":37,"line":17165},[35,68314,55560],{"class":359},[35,68316,51937],{"class":51626},[35,68318,53812],{"class":48},[35,68320,544],{"class":359},[35,68322,64725],{"class":306},[35,68324,61378],{"class":359},[35,68326,1823],{"class":51626},[35,68328,55565],{"class":48},[35,68330,544],{"class":359},[35,68332,64736],{"class":306},[35,68334,55573],{"class":48},[35,68336,544],{"class":359},[35,68338,7986],{"class":306},[35,68340,64745],{"class":359},[35,68342,51937],{"class":51626},[35,68344,51633],{"class":359},[35,68346,68347,68349,68351,68353,68355,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377],{"class":37,"line":17179},[35,68348,55560],{"class":359},[35,68350,51937],{"class":51626},[35,68352,53812],{"class":48},[35,68354,544],{"class":359},[35,68356,62949],{"class":306},[35,68358,61378],{"class":359},[35,68360,1823],{"class":51626},[35,68362,55565],{"class":48},[35,68364,544],{"class":359},[35,68366,64772],{"class":306},[35,68368,55573],{"class":48},[35,68370,544],{"class":359},[35,68372,7986],{"class":306},[35,68374,64745],{"class":359},[35,68376,51937],{"class":51626},[35,68378,51633],{"class":359},[35,68380,68381,68383,68385,68387,68389,68391,68393,68395,68397,68399,68401,68403,68405,68407,68409,68411],{"class":37,"line":17184},[35,68382,55560],{"class":359},[35,68384,51937],{"class":51626},[35,68386,53812],{"class":48},[35,68388,544],{"class":359},[35,68390,62949],{"class":306},[35,68392,61378],{"class":359},[35,68394,1823],{"class":51626},[35,68396,55565],{"class":48},[35,68398,544],{"class":359},[35,68400,64807],{"class":306},[35,68402,55573],{"class":48},[35,68404,544],{"class":359},[35,68406,7986],{"class":306},[35,68408,64745],{"class":359},[35,68410,51937],{"class":51626},[35,68412,51633],{"class":359},[35,68414,68415,68417,68419,68421,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445],{"class":37,"line":17189},[35,68416,55560],{"class":359},[35,68418,51937],{"class":51626},[35,68420,53812],{"class":48},[35,68422,544],{"class":359},[35,68424,62949],{"class":306},[35,68426,61378],{"class":359},[35,68428,1823],{"class":51626},[35,68430,55565],{"class":48},[35,68432,544],{"class":359},[35,68434,64842],{"class":306},[35,68436,55573],{"class":48},[35,68438,544],{"class":359},[35,68440,7986],{"class":306},[35,68442,64745],{"class":359},[35,68444,51937],{"class":51626},[35,68446,51633],{"class":359},[35,68448,68449,68451,68453,68455,68457,68459,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479],{"class":37,"line":17203},[35,68450,55560],{"class":359},[35,68452,51937],{"class":51626},[35,68454,53812],{"class":48},[35,68456,544],{"class":359},[35,68458,62949],{"class":306},[35,68460,61378],{"class":359},[35,68462,1823],{"class":51626},[35,68464,55565],{"class":48},[35,68466,544],{"class":359},[35,68468,64877],{"class":306},[35,68470,55573],{"class":48},[35,68472,544],{"class":359},[35,68474,7986],{"class":306},[35,68476,64745],{"class":359},[35,68478,51937],{"class":51626},[35,68480,51633],{"class":359},[35,68482,68483,68485,68487],{"class":37,"line":17215},[35,68484,52102],{"class":359},[35,68486,51937],{"class":51626},[35,68488,51633],{"class":359},[35,68490,68491,68493,68495],{"class":37,"line":17220},[35,68492,52743],{"class":359},[35,68494,51937],{"class":51626},[35,68496,51633],{"class":359},[35,68498,68499,68501,68503],{"class":37,"line":17233},[35,68500,52470],{"class":359},[35,68502,52139],{"class":51626},[35,68504,51633],{"class":359},[35,68506,68507],{"class":37,"line":17238},[35,68508,68509],{"class":41},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[35,68511,68512],{"class":37,"line":17243},[35,68513,68514],{"class":41},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[35,68516,68517,68519,68521,68523,68525,68527,68529,68532],{"class":37,"line":17248},[35,68518,11555],{"class":495},[35,68520,61618],{"class":58},[35,68522,13898],{"class":495},[35,68524,54722],{"class":359},[35,68526,54725],{"class":48},[35,68528,499],{"class":359},[35,68530,68531],{"class":306},"'.tab-nav ul'",[35,68533,505],{"class":359},[35,68535,68536],{"class":37,"line":17261},[35,68537,68538],{"class":41},"    \u002F\u002F 2.添加事件\n",[35,68540,68541,68543,68545,68547,68549,68551,68553,68555,68557],{"class":37,"line":17266},[35,68542,67280],{"class":359},[35,68544,58139],{"class":48},[35,68546,499],{"class":359},[35,68548,58144],{"class":306},[35,68550,12769],{"class":359},[35,68552,54775],{"class":495},[35,68554,2012],{"class":359},[35,68556,571],{"class":5550},[35,68558,12776],{"class":359},[35,68560,68561,68563,68565],{"class":37,"line":32959},[35,68562,58570],{"class":359},[35,68564,67336],{"class":48},[35,68566,67339],{"class":359},[35,68568,68569],{"class":37,"line":32965},[35,68570,68571],{"class":41},"      \u002F\u002Fe.targer是我们点击的对象\n",[35,68573,68574,68576,68578,68580,68583],{"class":37,"line":32971},[35,68575,54806],{"class":495},[35,68577,67360],{"class":359},[35,68579,54812],{"class":495},[35,68581,68582],{"class":306}," 'A'",[35,68584,12776],{"class":359},[35,68586,68587,68589,68591,68593,68596,68598,68600,68602,68604],{"class":37,"line":32977},[35,68588,52251],{"class":359},[35,68590,54725],{"class":48},[35,68592,499],{"class":359},[35,68594,68595],{"class":306},"'.active'",[35,68597,57329],{"class":359},[35,68599,57332],{"class":48},[35,68601,499],{"class":359},[35,68603,65040],{"class":306},[35,68605,505],{"class":359},[35,68607,68608,68611,68613,68615,68617],{"class":37,"line":32983},[35,68609,68610],{"class":359},"        e.target.classList.",[35,68612,5668],{"class":48},[35,68614,499],{"class":359},[35,68616,65040],{"class":306},[35,68618,505],{"class":359},[35,68620,68621],{"class":37,"line":32994},[35,68622,141],{"emptyLinePlaceholder":140},[35,68624,68625],{"class":37,"line":33000},[35,68626,68627],{"class":41},"        \u002F\u002F 下面大盒子模块\n",[35,68629,68630],{"class":37,"line":33020},[35,68631,68632],{"class":41},"        \u002F\u002F console.log(e.target.dataset.id)\n",[35,68634,68635,68637,68639,68641,68643],{"class":37,"line":33026},[35,68636,61596],{"class":495},[35,68638,3366],{"class":58},[35,68640,13898],{"class":495},[35,68642,45892],{"class":495},[35,68644,68645],{"class":359},"e.target.dataset.id\n",[35,68647,68648,68650,68652,68654,68656,68658,68660,68662,68664],{"class":37,"line":33037},[35,68649,52251],{"class":359},[35,68651,54725],{"class":48},[35,68653,499],{"class":359},[35,68655,65088],{"class":306},[35,68657,57329],{"class":359},[35,68659,57332],{"class":48},[35,68661,499],{"class":359},[35,68663,65040],{"class":306},[35,68665,505],{"class":359},[35,68667,68668,68670,68672,68674,68676,68678,68680,68682,68684,68686,68688,68690,68692],{"class":37,"line":33043},[35,68669,52251],{"class":359},[35,68671,54725],{"class":48},[35,68673,499],{"class":359},[35,68675,65114],{"class":306},[35,68677,935],{"class":359},[35,68679,45892],{"class":495},[35,68681,25450],{"class":58},[35,68683,57358],{"class":306},[35,68685,57329],{"class":359},[35,68687,5668],{"class":48},[35,68689,499],{"class":359},[35,68691,65040],{"class":306},[35,68693,505],{"class":359},[35,68695,68696],{"class":37,"line":33049},[35,68697,141],{"emptyLinePlaceholder":140},[35,68699,68700],{"class":37,"line":33055},[35,68701,52724],{"class":359},[35,68703,68704],{"class":37,"line":33061},[35,68705,33787],{"class":359},[35,68707,68708,68710,68712],{"class":37,"line":33067},[35,68709,52743],{"class":359},[35,68711,52139],{"class":51626},[35,68713,51633],{"class":359},[35,68715,68716,68718,68720],{"class":37,"line":33073},[35,68717,52111],{"class":359},[35,68719,52126],{"class":51626},[35,68721,51633],{"class":359},[35,68723,68724],{"class":37,"line":33079},[35,68725,141],{"emptyLinePlaceholder":140},[35,68727,68728,68730,68732],{"class":37,"line":33099},[35,68729,52111],{"class":359},[35,68731,50961],{"class":51626},[35,68733,51633],{"class":359},[465,68735,68737],{"id":68736},"_333-页面加载事件","3.3.3 页面加载事件",[14,68739,68740],{},[17,68741,68742],{},"load",[21,68744,68745],{},[1823,68746],{"alt":30,"src":68747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[21,68749,68750],{},"window代表整个窗口，比document还要大",[21,68752,68753],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[21,68755,68756],{},"img.addEventListener('load', function () {",[21,68758,68759],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[21,68761,52790],{},[14,68763,68764],{"start":45},[17,68765,68766],{},"DOMContentLoaded",[21,68768,68769],{},[1823,68770],{"alt":30,"src":68771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[21,68773,68774],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[465,68776,68778],{"id":68777},"_334-元素滚动事件","3.3.4 元素滚动事件",[21,68780,68781],{},[1823,68782],{"alt":30,"src":68783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[21,68785,68786],{},[1823,68787],{"alt":30,"src":68788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[21,68790,68791],{},[1823,68792],{"alt":30,"src":68793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[21,68795,68796],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[21,68798,68799],{},"获得的是数字型数据，不带单位",[21,68801,68802],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[21,68804,68805],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[21,68807,68808],{},"它是通过document.documentElement来获取",[21,68810,68811],{},[1823,68812],{"alt":30,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[21,68815,68816],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[465,68818,68820],{"id":68819},"_335-页面缩放事件","3.3.5 页面缩放事件",[21,68822,68823],{},[1823,68824],{"alt":30,"src":68825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[21,68827,68828],{},[1823,68829],{"alt":30,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[465,68832,68834],{"id":68833},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[21,68836,68837],{},[1823,68838],{"alt":30,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[21,68841,68842],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[21,68844,68845],{},[1823,68846],{"alt":30,"src":68847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[21,68849,68850],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[21,68852,68853],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[21,68855,68856],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[21,68858,68859],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[21,68861,68862],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[21,68864,68865],{},[1823,68866],{"alt":30,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[21,68869,68870],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[21,68872,68873],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[21,68875,68876],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[21,68878,68879],{},"e.pageX-box.getBoundingClientRect()",[465,68881,68883],{"id":68882},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[21,68885,68886],{},[1823,68887],{"alt":30,"src":68888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[21,68890,68891],{},"这个是相对于视口来说的，它是个方法，不是属性值",[465,68893,68895],{"id":68894},"_338-总结","3.3.8 总结",[21,68897,68898],{},[1823,68899],{"alt":30,"src":68900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[21,68902,68903],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[21,68905,68906],{},"修改盒子的宽高只能通过width和height来实现",[465,68908,68910],{"id":68909},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[25,68912,68914],{"className":50959,"code":68913,"language":50961,"meta":30,"style":30},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[32,68915,68916,68921,68926,68931,68936],{"__ignoreMap":30},[35,68917,68918],{"class":37,"line":38},[35,68919,68920],{"class":359},"\u002F* 页面滑动 *\u002F\n",[35,68922,68923],{"class":37,"line":45},[35,68924,68925],{"class":359},"html {\n",[35,68927,68928],{"class":37,"line":55},[35,68929,68930],{"class":359},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[35,68932,68933],{"class":37,"line":65},[35,68934,68935],{"class":359},"  scroll-behavior: smooth;\n",[35,68937,68938],{"class":37,"line":74},[35,68939,1926],{"class":359},[21,68941,68942],{},"默认是auto",[465,68944,68946],{"id":68945},"_3310-日期对象","3.3.10 日期对象",[22332,68948,68950],{"id":68949},"_33101-实例化","3.3.10.1 实例化",[21,68952,68953],{},[1823,68954],{"alt":30,"src":68955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22332,68957,68959],{"id":68958},"_33102-时期对象方法","3.3.10.2 时期对象方法",[21,68961,68962],{},[1823,68963],{"alt":30,"src":68964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[21,68966,68967],{},"月份+1",[21,68969,68970],{},"老外认为第一天为0，星期天",[21,68972,68973],{},"方法使用的时候必须要跟括号",[21,68975,68976],{},"快速获得日期",[21,68978,68979],{},"\u002F\u002F 得到年月日",[21,68981,68982],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[21,68984,68985],{},"\u002F\u002F 得到当地日期",[21,68987,68988],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[21,68990,68991],{},"\u002F\u002F 得到当地时间",[21,68993,68994],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[21,68996,68997],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[21,68999,69000],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52139,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",[21,69005,69006],{},"学会去封装函数！",[22332,69008,69010],{"id":69009},"_33103-时间戳","3.3.10.3 时间戳",[21,69012,69013],{},[1823,69014],{"alt":30,"src":69015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[21,69017,69018],{},[1823,69019],{"alt":30,"src":69020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[21,69022,69023],{},"三种方法记住一个就可以",[465,69025,69027],{"id":69026},"_3311-节点操作","3.3.11 节点操作",[22332,69029,69031],{"id":69030},"_33111-dom节点","3.3.11.1 DOM节点",[21,69033,69034],{},[1823,69035],{"alt":30,"src":69036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[21,69038,69039],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22332,69041,69043],{"id":69042},"_33112-查找节点","3.3.11.2 查找节点",[21,69045,69046],{},"前边的document.querySelector()是获取的元素",[21,69048,69049],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[21,69051,69052],{},[1823,69053],{"alt":30,"src":69054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[14,69056,69057],{},[17,69058,69059],{},"父节点",[21,69061,69062],{},[1823,69063],{"alt":30,"src":69064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[14,69066,69067],{"start":45},[17,69068,69069],{},"子节点",[21,69071,69072],{},[1823,69073],{"alt":30,"src":69074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[21,69076,69077],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[21,69079,69080],{},"children获得的是伪数组，是亲儿子",[14,69082,69083],{"start":55},[17,69084,69085],{},"兄弟节点",[21,69087,69088],{},[1823,69089],{"alt":30,"src":69090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22332,69092,69094],{"id":69093},"_33113-增加节点","3.3.11.3 增加节点",[21,69096,69097],{},[1823,69098],{"alt":30,"src":69099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[21,69101,69102],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[21,69104,69105],{},[1823,69106],{"alt":30,"src":69107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[21,69109,69110],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[21,69112,69113],{},"下面是写法的部分展示，就按照下边的格式来写",[21,69115,69116],{},"例：",[52139,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",[21,69121,69122],{},[1823,69123],{"alt":30,"src":69124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[21,69126,69127],{},"false只克隆标签，里边的内容不会克隆过来",[25,69129,69131],{"className":50959,"code":69130,"language":50961,"meta":30,"style":30},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[32,69132,69133],{"__ignoreMap":30},[35,69134,69135],{"class":37,"line":38},[35,69136,69130],{"class":359},[22332,69138,69140],{"id":69139},"_33114-删除节点","3.3.11.4 删除节点",[21,69142,69143],{},[1823,69144],{"alt":30,"src":69145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[21,69147,69148],{},"父亲删儿子",[21,69150,69151],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[465,69153,69155],{"id":69154},"_3312-m端事件","3.3.12 M端事件",[21,69157,69158],{},"M端就是移动端",[21,69160,69161],{},[1823,69162],{"alt":30,"src":69163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[465,69165,69167],{"id":69166},"_3313-插件","3.3.13 插件",[21,69169,69170],{},"要熟悉官网！！！",[21,69172,69173],{},[734,69174,69175],{"href":69175,"rel":69176},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24198],[21,69178,69179],{},[734,69180,69181],{"href":69181,"rel":69182},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24198],[465,69184,69186],{"id":69185},"_3314-学生信息表","3.3.14 学生信息表",[14,69188,69189,69192,69195,69198,69201,69204,69207,69210],{},[17,69190,69191],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[17,69193,69194],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[17,69196,69197],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[17,69199,69200],{},"用好表单元素自带的属性，value,name等",[17,69202,69203],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[17,69205,69206],{},"不要忘记事件对象",[17,69208,69209],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[17,69211,69212],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[21,69214,69215],{},"结构：",[25,69217,69219],{"className":50959,"code":69218,"language":50961,"meta":30,"style":30},"\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",[32,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,70532,70549,70566,70583,70600,70604,70614,70619,70624,70629,70640,70644,70648,70652,70657,70662,70683,70695,70700,70705,70710,70724,70729,70736,70740,70744,70752,70756,70764,70768],{"__ignoreMap":30},[35,69222,69223,69225,69227,69229],{"class":37,"line":38},[35,69224,51623],{"class":359},[35,69226,51627],{"class":51626},[35,69228,51630],{"class":48},[35,69230,51633],{"class":359},[35,69232,69233,69235,69237,69239,69241,69243],{"class":37,"line":45},[35,69234,1404],{"class":359},[35,69236,50961],{"class":51626},[35,69238,51642],{"class":48},[35,69240,544],{"class":359},[35,69242,51647],{"class":306},[35,69244,51633],{"class":359},[35,69246,69247],{"class":37,"line":55},[35,69248,141],{"emptyLinePlaceholder":140},[35,69250,69251,69253,69255],{"class":37,"line":65},[35,69252,1404],{"class":359},[35,69254,51660],{"class":51626},[35,69256,51633],{"class":359},[35,69258,69259,69261,69263,69265,69267,69269],{"class":37,"line":74},[35,69260,52470],{"class":359},[35,69262,51670],{"class":51626},[35,69264,51673],{"class":48},[35,69266,544],{"class":359},[35,69268,51678],{"class":306},[35,69270,59453],{"class":359},[35,69272,69273,69275,69277,69279,69281,69283,69285,69287,69289],{"class":37,"line":83},[35,69274,52470],{"class":359},[35,69276,51670],{"class":51626},[35,69278,15254],{"class":48},[35,69280,544],{"class":359},[35,69282,51717],{"class":306},[35,69284,51697],{"class":48},[35,69286,544],{"class":359},[35,69288,51724],{"class":306},[35,69290,59453],{"class":359},[35,69292,69293,69295,69297,69299,69301,69303,69305,69307,69310],{"class":37,"line":92},[35,69294,52470],{"class":359},[35,69296,51670],{"class":51626},[35,69298,51689],{"class":48},[35,69300,544],{"class":359},[35,69302,51694],{"class":306},[35,69304,51697],{"class":48},[35,69306,544],{"class":359},[35,69308,69309],{"class":306},"\"ie=edge\"",[35,69311,59453],{"class":359},[35,69313,69314,69316,69318,69321,69323],{"class":37,"line":101},[35,69315,52470],{"class":359},[35,69317,51733],{"class":51626},[35,69319,69320],{"class":359},">学生信息管理\u003C\u002F",[35,69322,51733],{"class":51626},[35,69324,51633],{"class":359},[35,69326,69327,69329,69332,69335,69337,69340,69342,69344,69347],{"class":37,"line":110},[35,69328,52470],{"class":359},[35,69330,69331],{"class":51626},"link",[35,69333,69334],{"class":48}," rel",[35,69336,544],{"class":359},[35,69338,69339],{"class":306},"\"stylesheet\"",[35,69341,61383],{"class":48},[35,69343,544],{"class":359},[35,69345,69346],{"class":306},"\"css\u002Findex.css\"",[35,69348,59453],{"class":359},[35,69350,69351,69353,69355],{"class":37,"line":119},[35,69352,52111],{"class":359},[35,69354,51660],{"class":51626},[35,69356,51633],{"class":359},[35,69358,69359],{"class":37,"line":128},[35,69360,141],{"emptyLinePlaceholder":140},[35,69362,69363,69365,69367],{"class":37,"line":137},[35,69364,1404],{"class":359},[35,69366,52126],{"class":51626},[35,69368,51633],{"class":359},[35,69370,69371,69373,69375,69378,69380],{"class":37,"line":144},[35,69372,52470],{"class":359},[35,69374,10],{"class":51626},[35,69376,69377],{"class":359},">新增学员\u003C\u002F",[35,69379,10],{"class":51626},[35,69381,51633],{"class":359},[35,69383,69384,69386,69388,69390,69392,69394,69397,69399,69401],{"class":37,"line":150},[35,69385,52470],{"class":359},[35,69387,66951],{"class":51626},[35,69389,53812],{"class":48},[35,69391,544],{"class":359},[35,69393,62990],{"class":306},[35,69395,69396],{"class":48}," autocomplete",[35,69398,544],{"class":359},[35,69400,32102],{"class":306},[35,69402,51633],{"class":359},[35,69404,69405,69408,69410,69412,69414,69416,69418,69420,69423,69425,69427,69429],{"class":37,"line":159},[35,69406,69407],{"class":359},"    姓名：\u003C",[35,69409,54147],{"class":51626},[35,69411,54150],{"class":48},[35,69413,544],{"class":359},[35,69415,63025],{"class":306},[35,69417,53812],{"class":48},[35,69419,544],{"class":359},[35,69421,69422],{"class":306},"\"uname\"",[35,69424,15254],{"class":48},[35,69426,544],{"class":359},[35,69428,69422],{"class":306},[35,69430,59453],{"class":359},[35,69432,69433,69436,69438,69440,69442,69444,69446,69448,69451,69453,69455,69457],{"class":37,"line":168},[35,69434,69435],{"class":359},"    年龄：\u003C",[35,69437,54147],{"class":51626},[35,69439,54150],{"class":48},[35,69441,544],{"class":359},[35,69443,63025],{"class":306},[35,69445,53812],{"class":48},[35,69447,544],{"class":359},[35,69449,69450],{"class":306},"\"age\"",[35,69452,15254],{"class":48},[35,69454,544],{"class":359},[35,69456,69450],{"class":306},[35,69458,59453],{"class":359},[35,69460,69461],{"class":37,"line":177},[35,69462,69463],{"class":359},"    性别:\n",[35,69465,69466,69468,69471,69473,69475,69478,69480,69482,69484],{"class":37,"line":182},[35,69467,51667],{"class":359},[35,69469,69470],{"class":51626},"select",[35,69472,15254],{"class":48},[35,69474,544],{"class":359},[35,69476,69477],{"class":306},"\"gender\"",[35,69479,53812],{"class":48},[35,69481,544],{"class":359},[35,69483,69477],{"class":306},[35,69485,51633],{"class":359},[35,69487,69488,69490,69493,69495,69497,69499,69502,69504],{"class":37,"line":188},[35,69489,55560],{"class":359},[35,69491,69492],{"class":51626},"option",[35,69494,66977],{"class":48},[35,69496,544],{"class":359},[35,69498,10295],{"class":306},[35,69500,69501],{"class":359},">男\u003C\u002F",[35,69503,69492],{"class":51626},[35,69505,51633],{"class":359},[35,69507,69508,69510,69512,69514,69516,69518,69521,69523],{"class":37,"line":197},[35,69509,55560],{"class":359},[35,69511,69492],{"class":51626},[35,69513,66977],{"class":48},[35,69515,544],{"class":359},[35,69517,10364],{"class":306},[35,69519,69520],{"class":359},">女\u003C\u002F",[35,69522,69492],{"class":51626},[35,69524,51633],{"class":359},[35,69526,69527,69529,69531],{"class":37,"line":206},[35,69528,52102],{"class":359},[35,69530,69470],{"class":51626},[35,69532,51633],{"class":359},[35,69534,69535,69538,69540,69542,69544,69546,69548,69550,69553,69555,69557,69559],{"class":37,"line":215},[35,69536,69537],{"class":359},"    薪资：\u003C",[35,69539,54147],{"class":51626},[35,69541,54150],{"class":48},[35,69543,544],{"class":359},[35,69545,63025],{"class":306},[35,69547,53812],{"class":48},[35,69549,544],{"class":359},[35,69551,69552],{"class":306},"\"salary\"",[35,69554,15254],{"class":48},[35,69556,544],{"class":359},[35,69558,69552],{"class":306},[35,69560,59453],{"class":359},[35,69562,69563,69566,69568,69570,69572,69575,69577,69579,69581],{"class":37,"line":224},[35,69564,69565],{"class":359},"    就业城市：\u003C",[35,69567,69470],{"class":51626},[35,69569,15254],{"class":48},[35,69571,544],{"class":359},[35,69573,69574],{"class":306},"\"city\"",[35,69576,53812],{"class":48},[35,69578,544],{"class":359},[35,69580,69574],{"class":306},[35,69582,51633],{"class":359},[35,69584,69585,69587,69589,69591,69593,69596,69599,69601],{"class":37,"line":233},[35,69586,55560],{"class":359},[35,69588,69492],{"class":51626},[35,69590,66977],{"class":48},[35,69592,544],{"class":359},[35,69594,69595],{"class":306},"\"北京\"",[35,69597,69598],{"class":359},">北京\u003C\u002F",[35,69600,69492],{"class":51626},[35,69602,51633],{"class":359},[35,69604,69605,69607,69609,69611,69613,69616,69619,69621],{"class":37,"line":238},[35,69606,55560],{"class":359},[35,69608,69492],{"class":51626},[35,69610,66977],{"class":48},[35,69612,544],{"class":359},[35,69614,69615],{"class":306},"\"上海\"",[35,69617,69618],{"class":359},">上海\u003C\u002F",[35,69620,69492],{"class":51626},[35,69622,51633],{"class":359},[35,69624,69625,69627,69629,69631,69633,69636,69639,69641],{"class":37,"line":244},[35,69626,55560],{"class":359},[35,69628,69492],{"class":51626},[35,69630,66977],{"class":48},[35,69632,544],{"class":359},[35,69634,69635],{"class":306},"\"广州\"",[35,69637,69638],{"class":359},">广州\u003C\u002F",[35,69640,69492],{"class":51626},[35,69642,51633],{"class":359},[35,69644,69645,69647,69649,69651,69653,69656,69659,69661],{"class":37,"line":253},[35,69646,55560],{"class":359},[35,69648,69492],{"class":51626},[35,69650,66977],{"class":48},[35,69652,544],{"class":359},[35,69654,69655],{"class":306},"\"深圳\"",[35,69657,69658],{"class":359},">深圳\u003C\u002F",[35,69660,69492],{"class":51626},[35,69662,51633],{"class":359},[35,69664,69665,69667,69669,69671,69673,69676,69679,69681],{"class":37,"line":262},[35,69666,55560],{"class":359},[35,69668,69492],{"class":51626},[35,69670,66977],{"class":48},[35,69672,544],{"class":359},[35,69674,69675],{"class":306},"\"曹县\"",[35,69677,69678],{"class":359},">曹县\u003C\u002F",[35,69680,69492],{"class":51626},[35,69682,51633],{"class":359},[35,69684,69685,69687,69689],{"class":37,"line":271},[35,69686,52102],{"class":359},[35,69688,69470],{"class":51626},[35,69690,51633],{"class":359},[35,69692,69693,69695,69697,69699,69701,69704,69707,69709],{"class":37,"line":280},[35,69694,51667],{"class":359},[35,69696,54213],{"class":51626},[35,69698,53812],{"class":48},[35,69700,544],{"class":359},[35,69702,69703],{"class":306},"\"add\"",[35,69705,69706],{"class":359},">录入\u003C\u002F",[35,69708,54213],{"class":51626},[35,69710,51633],{"class":359},[35,69712,69713,69715,69717],{"class":37,"line":289},[35,69714,52743],{"class":359},[35,69716,66951],{"class":51626},[35,69718,51633],{"class":359},[35,69720,69721],{"class":37,"line":294},[35,69722,141],{"emptyLinePlaceholder":140},[35,69724,69725,69727,69729,69732,69734],{"class":37,"line":300},[35,69726,52470],{"class":359},[35,69728,10],{"class":51626},[35,69730,69731],{"class":359},">就业榜\u003C\u002F",[35,69733,10],{"class":51626},[35,69735,51633],{"class":359},[35,69737,69738,69740,69742],{"class":37,"line":313},[35,69739,52470],{"class":359},[35,69741,633],{"class":51626},[35,69743,51633],{"class":359},[35,69745,69746,69748,69750],{"class":37,"line":324},[35,69747,51667],{"class":359},[35,69749,636],{"class":51626},[35,69751,51633],{"class":359},[35,69753,69754,69756,69758],{"class":37,"line":2955},[35,69755,55560],{"class":359},[35,69757,639],{"class":51626},[35,69759,51633],{"class":359},[35,69761,69762,69764,69766,69769,69771],{"class":37,"line":8282},[35,69763,55628],{"class":359},[35,69765,642],{"class":51626},[35,69767,69768],{"class":359},">序号\u003C\u002F",[35,69770,642],{"class":51626},[35,69772,51633],{"class":359},[35,69774,69775,69777,69779,69782,69784],{"class":37,"line":8306},[35,69776,55628],{"class":359},[35,69778,642],{"class":51626},[35,69780,69781],{"class":359},">姓名\u003C\u002F",[35,69783,642],{"class":51626},[35,69785,51633],{"class":359},[35,69787,69788,69790,69792,69795,69797],{"class":37,"line":8311},[35,69789,55628],{"class":359},[35,69791,642],{"class":51626},[35,69793,69794],{"class":359},">年龄\u003C\u002F",[35,69796,642],{"class":51626},[35,69798,51633],{"class":359},[35,69800,69801,69803,69805,69808,69810],{"class":37,"line":8317},[35,69802,55628],{"class":359},[35,69804,642],{"class":51626},[35,69806,69807],{"class":359},">性别\u003C\u002F",[35,69809,642],{"class":51626},[35,69811,51633],{"class":359},[35,69813,69814,69816,69818,69821,69823],{"class":37,"line":8344},[35,69815,55628],{"class":359},[35,69817,642],{"class":51626},[35,69819,69820],{"class":359},">薪资\u003C\u002F",[35,69822,642],{"class":51626},[35,69824,51633],{"class":359},[35,69826,69827,69829,69831,69834,69836],{"class":37,"line":8349},[35,69828,55628],{"class":359},[35,69830,642],{"class":51626},[35,69832,69833],{"class":359},">就业城市\u003C\u002F",[35,69835,642],{"class":51626},[35,69837,51633],{"class":359},[35,69839,69840,69842,69844,69847,69849],{"class":37,"line":8355},[35,69841,55628],{"class":359},[35,69843,642],{"class":51626},[35,69845,69846],{"class":359},">操作\u003C\u002F",[35,69848,642],{"class":51626},[35,69850,51633],{"class":359},[35,69852,69853,69855,69857],{"class":37,"line":8367},[35,69854,55733],{"class":359},[35,69856,639],{"class":51626},[35,69858,51633],{"class":359},[35,69860,69861,69863,69865],{"class":37,"line":8379},[35,69862,52102],{"class":359},[35,69864,636],{"class":51626},[35,69866,51633],{"class":359},[35,69868,69869,69871,69873],{"class":37,"line":8391},[35,69870,51667],{"class":359},[35,69872,680],{"class":51626},[35,69874,51633],{"class":359},[35,69876,69877],{"class":37,"line":10050},[35,69878,69879],{"class":41},"      \u003C!-- \n",[35,69881,69882],{"class":37,"line":10075},[35,69883,69884],{"class":41},"        \u003Ctr>\n",[35,69886,69887],{"class":37,"line":10098},[35,69888,69889],{"class":41},"          \u003Ctd>1001\u003C\u002Ftd>\n",[35,69891,69892],{"class":37,"line":10122},[35,69893,69894],{"class":41},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[35,69896,69897],{"class":37,"line":10127},[35,69898,69899],{"class":41},"          \u003Ctd>19\u003C\u002Ftd>\n",[35,69901,69902],{"class":37,"line":10132},[35,69903,69904],{"class":41},"          \u003Ctd>男\u003C\u002Ftd>\n",[35,69906,69907],{"class":37,"line":10137},[35,69908,69909],{"class":41},"          \u003Ctd>15000\u003C\u002Ftd>\n",[35,69911,69912],{"class":37,"line":10146},[35,69913,69914],{"class":41},"          \u003Ctd>上海\u003C\u002Ftd>\n",[35,69916,69917],{"class":37,"line":10151},[35,69918,69919],{"class":41},"          \u003Ctd>\n",[35,69921,69922],{"class":37,"line":10157},[35,69923,69924],{"class":41},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[35,69926,69927],{"class":37,"line":10178},[35,69928,69929],{"class":41},"          \u003C\u002Ftd>\n",[35,69931,69932],{"class":37,"line":10184},[35,69933,69934],{"class":41},"        \u003C\u002Ftr> \n",[35,69936,69937],{"class":37,"line":10198},[35,69938,69939],{"class":41},"        -->\n",[35,69941,69942,69944,69946],{"class":37,"line":10204},[35,69943,52102],{"class":359},[35,69945,680],{"class":51626},[35,69947,51633],{"class":359},[35,69949,69950,69952,69954],{"class":37,"line":10231},[35,69951,52743],{"class":359},[35,69953,633],{"class":51626},[35,69955,51633],{"class":359},[35,69957,69958,69960,69962],{"class":37,"line":10240},[35,69959,52470],{"class":359},[35,69961,52139],{"class":51626},[35,69963,51633],{"class":359},[35,69965,69966],{"class":37,"line":10246},[35,69967,60284],{"class":41},[35,69969,69970,69972,69975,69977,69979,69981,69983,69986],{"class":37,"line":10254},[35,69971,11555],{"class":495},[35,69973,69974],{"class":58}," uname",[35,69976,13898],{"class":495},[35,69978,54722],{"class":359},[35,69980,54725],{"class":48},[35,69982,499],{"class":359},[35,69984,69985],{"class":306},"'.uname'",[35,69987,505],{"class":359},[35,69989,69990,69992,69994,69996,69998,70000,70002,70005],{"class":37,"line":10259},[35,69991,11555],{"class":495},[35,69993,16023],{"class":58},[35,69995,13898],{"class":495},[35,69997,54722],{"class":359},[35,69999,54725],{"class":48},[35,70001,499],{"class":359},[35,70003,70004],{"class":306},"'.age'",[35,70006,505],{"class":359},[35,70008,70009,70011,70014,70016,70018,70020,70022,70025],{"class":37,"line":16938},[35,70010,11555],{"class":495},[35,70012,70013],{"class":58}," gender",[35,70015,13898],{"class":495},[35,70017,54722],{"class":359},[35,70019,54725],{"class":48},[35,70021,499],{"class":359},[35,70023,70024],{"class":306},"'.gender'",[35,70026,505],{"class":359},[35,70028,70029,70031,70034,70036,70038,70040,70042,70045],{"class":37,"line":16944},[35,70030,11555],{"class":495},[35,70032,70033],{"class":58}," salary",[35,70035,13898],{"class":495},[35,70037,54722],{"class":359},[35,70039,54725],{"class":48},[35,70041,499],{"class":359},[35,70043,70044],{"class":306},"'.salary'",[35,70046,505],{"class":359},[35,70048,70049,70051,70054,70056,70058,70060,70062,70065],{"class":37,"line":16967},[35,70050,11555],{"class":495},[35,70052,70053],{"class":58}," city",[35,70055,13898],{"class":495},[35,70057,54722],{"class":359},[35,70059,54725],{"class":48},[35,70061,499],{"class":359},[35,70063,70064],{"class":306},"'.city'",[35,70066,505],{"class":359},[35,70068,70069,70071,70074,70076,70078,70080,70082,70085],{"class":37,"line":16973},[35,70070,11555],{"class":495},[35,70072,70073],{"class":58}," tbody",[35,70075,13898],{"class":495},[35,70077,54722],{"class":359},[35,70079,54725],{"class":48},[35,70081,499],{"class":359},[35,70083,70084],{"class":306},"'tbody'",[35,70086,505],{"class":359},[35,70088,70089],{"class":37,"line":16996},[35,70090,141],{"emptyLinePlaceholder":140},[35,70092,70093],{"class":37,"line":17010},[35,70094,70095],{"class":41},"    \u002F\u002F 获取所有带有name属性的元素\n",[35,70097,70098,70100,70103,70105,70107,70109,70111,70114],{"class":37,"line":17030},[35,70099,11555],{"class":495},[35,70101,70102],{"class":58}," items",[35,70104,13898],{"class":495},[35,70106,54722],{"class":359},[35,70108,56007],{"class":48},[35,70110,499],{"class":359},[35,70112,70113],{"class":306},"'[name]'",[35,70115,505],{"class":359},[35,70117,70118],{"class":37,"line":17036},[35,70119,70120],{"class":41},"    \u002F\u002F 声明一个空的数组\n",[35,70122,70123,70125,70127,70129],{"class":37,"line":17047},[35,70124,11555],{"class":495},[35,70126,58021],{"class":58},[35,70128,13898],{"class":495},[35,70130,52164],{"class":359},[35,70132,70133],{"class":37,"line":17070},[35,70134,70135],{"class":41},"    \u002F\u002F 1.录入模块\n",[35,70137,70138],{"class":37,"line":17092},[35,70139,70140],{"class":41},"    \u002F\u002F 1.1这是一个表单提交事件\n",[35,70142,70143,70145,70148,70150,70152,70154,70156,70159],{"class":37,"line":17097},[35,70144,11555],{"class":495},[35,70146,70147],{"class":58}," info",[35,70149,13898],{"class":495},[35,70151,54722],{"class":359},[35,70153,54725],{"class":48},[35,70155,499],{"class":359},[35,70157,70158],{"class":306},"'.info'",[35,70160,505],{"class":359},[35,70162,70163,70166,70168,70170,70173,70175,70177,70179,70181],{"class":37,"line":17103},[35,70164,70165],{"class":359},"    info.",[35,70167,58139],{"class":48},[35,70169,499],{"class":359},[35,70171,70172],{"class":306},"'submit'",[35,70174,12769],{"class":359},[35,70176,54775],{"class":495},[35,70178,2012],{"class":359},[35,70180,571],{"class":5550},[35,70182,12776],{"class":359},[35,70184,70185],{"class":37,"line":17117},[35,70186,70187],{"class":41},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[35,70189,70190,70193,70196],{"class":37,"line":17130},[35,70191,70192],{"class":359},"      e.",[35,70194,70195],{"class":48},"preventDefault",[35,70197,2317],{"class":359},[35,70199,70200],{"class":37,"line":17135},[35,70201,60338],{"class":41},[35,70203,70204],{"class":37,"line":17149},[35,70205,141],{"emptyLinePlaceholder":140},[35,70207,70208],{"class":37,"line":17154},[35,70209,70210],{"class":41},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[35,70212,70213],{"class":37,"line":17160},[35,70214,70215],{"class":41},"      \u002F\u002F 先遍历循环\n",[35,70217,70218,70220,70222,70224,70226,70228,70230,70232,70234,70237,70239,70241,70243],{"class":37,"line":17165},[35,70219,52610],{"class":495},[35,70221,2012],{"class":359},[35,70223,52173],{"class":495},[35,70225,9772],{"class":359},[35,70227,544],{"class":495},[35,70229,4427],{"class":58},[35,70231,9779],{"class":359},[35,70233,1404],{"class":495},[35,70235,70236],{"class":359}," items.",[35,70238,52294],{"class":58},[35,70240,3548],{"class":359},[35,70242,2633],{"class":495},[35,70244,12776],{"class":359},[35,70246,70247,70249,70252,70254,70257],{"class":37,"line":17179},[35,70248,2837],{"class":495},[35,70250,70251],{"class":359}," (items[i].value ",[35,70253,54812],{"class":495},[35,70255,70256],{"class":306}," ''",[35,70258,12776],{"class":359},[35,70260,70261,70264,70267,70269,70272],{"class":37,"line":17184},[35,70262,70263],{"class":495},"          return",[35,70265,70266],{"class":48}," alert",[35,70268,499],{"class":359},[35,70270,70271],{"class":306},"'输入内容不能为空'",[35,70273,505],{"class":359},[35,70275,70276],{"class":37,"line":17189},[35,70277,2869],{"class":359},[35,70279,70280],{"class":37,"line":17203},[35,70281,52724],{"class":359},[35,70283,70284],{"class":37,"line":17215},[35,70285,141],{"emptyLinePlaceholder":140},[35,70287,70288],{"class":37,"line":17220},[35,70289,70290],{"class":41},"      \u002F\u002F 创建新的对象\n",[35,70292,70293,70295,70298,70300],{"class":37,"line":17233},[35,70294,58554],{"class":495},[35,70296,70297],{"class":58}," obj",[35,70299,13898],{"class":495},[35,70301,15906],{"class":359},[35,70303,70304,70307,70309,70311,70313],{"class":37,"line":17238},[35,70305,70306],{"class":359},"        stuID: arr.",[35,70308,52294],{"class":58},[35,70310,45892],{"class":495},[35,70312,25450],{"class":58},[35,70314,31792],{"class":359},[35,70316,70317],{"class":37,"line":17243},[35,70318,70319],{"class":359},"        uname: uname.value,\n",[35,70321,70322],{"class":37,"line":17248},[35,70323,70324],{"class":359},"        age: age.value,\n",[35,70326,70327],{"class":37,"line":17261},[35,70328,70329],{"class":359},"        gender: gender.value,\n",[35,70331,70332],{"class":37,"line":17266},[35,70333,70334],{"class":359},"        salary: salary.value,\n",[35,70336,70337],{"class":37,"line":32959},[35,70338,70339],{"class":359},"        city: city.value\n",[35,70341,70342],{"class":37,"line":32965},[35,70343,52724],{"class":359},[35,70345,70346],{"class":37,"line":32971},[35,70347,70348],{"class":41},"      \u002F\u002F console.log(obj);\n",[35,70350,70351],{"class":37,"line":32977},[35,70352,70353],{"class":41},"      \u002F\u002F 追加到数组里面\n",[35,70355,70356,70358,70360],{"class":37,"line":32983},[35,70357,58333],{"class":359},[35,70359,52210],{"class":48},[35,70361,70362],{"class":359},"(obj)\n",[35,70364,70365],{"class":37,"line":32994},[35,70366,70367],{"class":41},"      \u002F\u002F console.log(arr);\n",[35,70369,70370],{"class":37,"line":33000},[35,70371,70372],{"class":41},"      \u002F\u002F 清空表单  reset重置表单\n",[35,70374,70375,70378,70380,70383],{"class":37,"line":33020},[35,70376,70377],{"class":58},"      this",[35,70379,1052],{"class":359},[35,70381,70382],{"class":48},"reset",[35,70384,2317],{"class":359},[35,70386,70387],{"class":37,"line":33026},[35,70388,70389],{"class":41},"      \u002F\u002F 调用渲染函数\n",[35,70391,70392,70395],{"class":37,"line":33037},[35,70393,70394],{"class":48},"      render",[35,70396,2317],{"class":359},[35,70398,70399],{"class":37,"line":33043},[35,70400,33787],{"class":359},[35,70402,70403],{"class":37,"line":33049},[35,70404,70405],{"class":41},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[35,70407,70408,70411,70414],{"class":37,"line":33055},[35,70409,70410],{"class":495},"    function",[35,70412,70413],{"class":48}," render",[35,70415,11187],{"class":359},[35,70417,70418],{"class":37,"line":33061},[35,70419,70420],{"class":41},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[35,70422,70423,70426,70428],{"class":37,"line":33067},[35,70424,70425],{"class":359},"      tbody.innerHTML ",[35,70427,544],{"class":495},[35,70429,70430],{"class":306}," ''\n",[35,70432,70433],{"class":37,"line":33073},[35,70434,70435],{"class":41},"      \u002F\u002F 遍历数组\n",[35,70437,70438,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460,70462],{"class":37,"line":33079},[35,70439,52610],{"class":495},[35,70441,2012],{"class":359},[35,70443,52173],{"class":495},[35,70445,9772],{"class":359},[35,70447,544],{"class":495},[35,70449,4427],{"class":58},[35,70451,9779],{"class":359},[35,70453,1404],{"class":495},[35,70455,52291],{"class":359},[35,70457,52294],{"class":58},[35,70459,3548],{"class":359},[35,70461,2633],{"class":495},[35,70463,12776],{"class":359},[35,70465,70466,70468,70471,70473,70475,70478,70480,70483],{"class":37,"line":33099},[35,70467,61596],{"class":495},[35,70469,70470],{"class":58}," tr",[35,70472,13898],{"class":495},[35,70474,54722],{"class":359},[35,70476,70477],{"class":48},"createElement",[35,70479,499],{"class":359},[35,70481,70482],{"class":306},"'tr'",[35,70484,505],{"class":359},[35,70486,70487,70490,70492],{"class":37,"line":33105},[35,70488,70489],{"class":359},"        tr.innerHTML ",[35,70491,544],{"class":495},[35,70493,70494],{"class":306}," `\n",[35,70496,70497,70500,70502,70504,70506,70509,70512],{"class":37,"line":33121},[35,70498,70499],{"class":306},"        \u003Ctd>${",[35,70501,4214],{"class":359},[35,70503,1384],{"class":306},[35,70505,935],{"class":359},[35,70507,70508],{"class":306},"].",[35,70510,70511],{"class":359},"stuID",[35,70513,70514],{"class":306},"}\u003C\u002Ftd>\n",[35,70516,70517,70520,70522,70524,70526,70528,70530],{"class":37,"line":33127},[35,70518,70519],{"class":306},"          \u003Ctd>${",[35,70521,4214],{"class":359},[35,70523,1384],{"class":306},[35,70525,935],{"class":359},[35,70527,70508],{"class":306},[35,70529,191],{"class":359},[35,70531,70514],{"class":306},[35,70533,70534,70536,70538,70540,70542,70544,70547],{"class":37,"line":33141},[35,70535,70519],{"class":306},[35,70537,4214],{"class":359},[35,70539,1384],{"class":306},[35,70541,935],{"class":359},[35,70543,70508],{"class":306},[35,70545,70546],{"class":359},"age",[35,70548,70514],{"class":306},[35,70550,70551,70553,70555,70557,70559,70561,70564],{"class":37,"line":33147},[35,70552,70519],{"class":306},[35,70554,4214],{"class":359},[35,70556,1384],{"class":306},[35,70558,935],{"class":359},[35,70560,70508],{"class":306},[35,70562,70563],{"class":359},"gender",[35,70565,70514],{"class":306},[35,70567,70568,70570,70572,70574,70576,70578,70581],{"class":37,"line":33162},[35,70569,70519],{"class":306},[35,70571,4214],{"class":359},[35,70573,1384],{"class":306},[35,70575,935],{"class":359},[35,70577,70508],{"class":306},[35,70579,70580],{"class":359},"salary",[35,70582,70514],{"class":306},[35,70584,70585,70587,70589,70591,70593,70595,70598],{"class":37,"line":33168},[35,70586,70519],{"class":306},[35,70588,4214],{"class":359},[35,70590,1384],{"class":306},[35,70592,935],{"class":359},[35,70594,70508],{"class":306},[35,70596,70597],{"class":359},"city",[35,70599,70514],{"class":306},[35,70601,70602],{"class":37,"line":33177},[35,70603,69919],{"class":306},[35,70605,70606,70609,70611],{"class":37,"line":33183},[35,70607,70608],{"class":306},"            \u003Ca href=\"javascript:\" data-id=${",[35,70610,935],{"class":359},[35,70612,70613],{"class":306},"}>删除\u003C\u002Fa>\n",[35,70615,70616],{"class":37,"line":33192},[35,70617,70618],{"class":306},"          \u003C\u002Ftd> \n",[35,70620,70621],{"class":37,"line":33198},[35,70622,70623],{"class":306},"          `\n",[35,70625,70626],{"class":37,"line":33204},[35,70627,70628],{"class":41},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[35,70630,70631,70634,70637],{"class":37,"line":33213},[35,70632,70633],{"class":359},"        tbody.",[35,70635,70636],{"class":48},"appendChild",[35,70638,70639],{"class":359},"(tr)\n",[35,70641,70642],{"class":37,"line":33219},[35,70643,52724],{"class":359},[35,70645,70646],{"class":37,"line":33230},[35,70647,2528],{"class":359},[35,70649,70650],{"class":37,"line":33236},[35,70651,141],{"emptyLinePlaceholder":140},[35,70653,70654],{"class":37,"line":33255},[35,70655,70656],{"class":41},"    \u002F\u002F 3.删除委托\n",[35,70658,70659],{"class":37,"line":33261},[35,70660,70661],{"class":41},"    \u002F\u002F 3.1 事件委托 tbody\n",[35,70663,70664,70667,70669,70671,70673,70675,70677,70679,70681],{"class":37,"line":33272},[35,70665,70666],{"class":359},"    tbody.",[35,70668,58139],{"class":48},[35,70670,499],{"class":359},[35,70672,58144],{"class":306},[35,70674,12769],{"class":359},[35,70676,54775],{"class":495},[35,70678,2012],{"class":359},[35,70680,571],{"class":5550},[35,70682,12776],{"class":359},[35,70684,70685,70687,70689,70691,70693],{"class":37,"line":33278},[35,70686,54806],{"class":495},[35,70688,67360],{"class":359},[35,70690,54812],{"class":495},[35,70692,68582],{"class":306},[35,70694,12776],{"class":359},[35,70696,70697],{"class":37,"line":33298},[35,70698,70699],{"class":41},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[35,70701,70702],{"class":37,"line":33314},[35,70703,70704],{"class":41},"        \u002F\u002F console.log(e.target.dataset.id);\n",[35,70706,70707],{"class":37,"line":33320},[35,70708,70709],{"class":41},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[35,70711,70712,70715,70717,70720,70722],{"class":37,"line":33334},[35,70713,70714],{"class":359},"        arr.",[35,70716,58336],{"class":48},[35,70718,70719],{"class":359},"(e.target.dataset.id, ",[35,70721,713],{"class":58},[35,70723,505],{"class":359},[35,70725,70726],{"class":37,"line":33340},[35,70727,70728],{"class":41},"        \u002F\u002F 重新渲染一次\n",[35,70730,70731,70734],{"class":37,"line":33346},[35,70732,70733],{"class":48},"        render",[35,70735,2317],{"class":359},[35,70737,70738],{"class":37,"line":33357},[35,70739,52724],{"class":359},[35,70741,70742],{"class":37,"line":33363},[35,70743,33787],{"class":359},[35,70745,70746,70748,70750],{"class":37,"line":33369},[35,70747,52743],{"class":359},[35,70749,52139],{"class":51626},[35,70751,51633],{"class":359},[35,70753,70754],{"class":37,"line":33379},[35,70755,141],{"emptyLinePlaceholder":140},[35,70757,70758,70760,70762],{"class":37,"line":33385},[35,70759,52111],{"class":359},[35,70761,52126],{"class":51626},[35,70763,51633],{"class":359},[35,70765,70766],{"class":37,"line":33396},[35,70767,141],{"emptyLinePlaceholder":140},[35,70769,70770,70772,70774],{"class":37,"line":33402},[35,70771,52111],{"class":359},[35,70773,50961],{"class":51626},[35,70775,51633],{"class":359},[21,70777,70778],{},"样式：",[25,70780,70784],{"className":70781,"code":70782,"language":70783,"meta":30,"style":30},"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",[32,70785,70786,70791,70801,70810,70814,70818,70823,70833,70838,70842,70847,70857,70862,70871,70875,70879,70884,70889,70899,70909,70914,70918,70923,70932,70942,70947,70957,70967,70971,70976,70984,70988,70993,70998,71003,71011,71020,71024,71029,71038,71042,71047,71056,71060,71065,71074,71083,71091,71095,71100,71109,71119,71128,71138,71144,71153,71163,71173,71177,71182,71191,71199,71209,71217,71226,71235,71245,71253,71257,71262,71271],{"__ignoreMap":30},[35,70787,70788],{"class":37,"line":38},[35,70789,70790],{"class":359},"* {\n",[35,70792,70793,70796,70798],{"class":37,"line":45},[35,70794,70795],{"class":51626},"  margin",[35,70797,51763],{"class":359},[35,70799,70800],{"class":306},"0;\n",[35,70802,70803,70806,70808],{"class":37,"line":55},[35,70804,70805],{"class":306},"  padding",[35,70807,51763],{"class":359},[35,70809,70800],{"class":306},[35,70811,70812],{"class":37,"line":65},[35,70813,1926],{"class":359},[35,70815,70816],{"class":37,"line":74},[35,70817,141],{"emptyLinePlaceholder":140},[35,70819,70820],{"class":37,"line":83},[35,70821,70822],{"class":306},"a {\n",[35,70824,70825,70828,70830],{"class":37,"line":92},[35,70826,70827],{"class":51626},"  text-decoration",[35,70829,51763],{"class":359},[35,70831,70832],{"class":306},"none;\n",[35,70834,70835],{"class":37,"line":101},[35,70836,70837],{"class":306},"  color:#721c24;\n",[35,70839,70840],{"class":37,"line":110},[35,70841,1926],{"class":359},[35,70843,70844],{"class":37,"line":119},[35,70845,70846],{"class":306},"h1 {\n",[35,70848,70849,70852,70854],{"class":37,"line":128},[35,70850,70851],{"class":51626},"  text-align",[35,70853,51763],{"class":359},[35,70855,70856],{"class":306},"center;\n",[35,70858,70859],{"class":37,"line":137},[35,70860,70861],{"class":306},"  color:#333;\n",[35,70863,70864,70866,70868],{"class":37,"line":144},[35,70865,70795],{"class":51626},[35,70867,51763],{"class":359},[35,70869,70870],{"class":306},"20px 0;\n",[35,70872,70873],{"class":37,"line":150},[35,70874,3008],{"class":359},[35,70876,70877],{"class":37,"line":159},[35,70878,1926],{"class":359},[35,70880,70881],{"class":37,"line":168},[35,70882,70883],{"class":306},"table {\n",[35,70885,70886],{"class":37,"line":177},[35,70887,70888],{"class":306},"  margin:0 auto;\n",[35,70890,70891,70894,70896],{"class":37,"line":182},[35,70892,70893],{"class":51626},"  width",[35,70895,51763],{"class":359},[35,70897,70898],{"class":306},"800px;\n",[35,70900,70901,70904,70906],{"class":37,"line":188},[35,70902,70903],{"class":51626},"  border-collapse",[35,70905,51763],{"class":359},[35,70907,70908],{"class":306},"collapse;\n",[35,70910,70911],{"class":37,"line":197},[35,70912,70913],{"class":306},"  color:#004085;\n",[35,70915,70916],{"class":37,"line":206},[35,70917,1926],{"class":359},[35,70919,70920],{"class":37,"line":215},[35,70921,70922],{"class":306},"th {\n",[35,70924,70925,70927,70929],{"class":37,"line":224},[35,70926,70805],{"class":51626},[35,70928,51763],{"class":359},[35,70930,70931],{"class":306},"10px;\n",[35,70933,70934,70937,70939],{"class":37,"line":233},[35,70935,70936],{"class":51626},"  background",[35,70938,51763],{"class":359},[35,70940,70941],{"class":41},"#cfe5ff;\n",[35,70943,70944],{"class":37,"line":238},[35,70945,70946],{"class":359},"  \n",[35,70948,70949,70952,70954],{"class":37,"line":244},[35,70950,70951],{"class":51626},"  font-size",[35,70953,51763],{"class":359},[35,70955,70956],{"class":306},"20px;\n",[35,70958,70959,70962,70964],{"class":37,"line":253},[35,70960,70961],{"class":51626},"  font-weight",[35,70963,51763],{"class":359},[35,70965,70966],{"class":306},"400;\n",[35,70968,70969],{"class":37,"line":262},[35,70970,1926],{"class":359},[35,70972,70973],{"class":37,"line":271},[35,70974,70975],{"class":306},"td,th {\n",[35,70977,70978,70981],{"class":37,"line":280},[35,70979,70980],{"class":306},"  border:1px solid",[35,70982,70983],{"class":41}," #b8daff;\n",[35,70985,70986],{"class":37,"line":289},[35,70987,1926],{"class":359},[35,70989,70990],{"class":37,"line":294},[35,70991,70992],{"class":306},"td {\n",[35,70994,70995],{"class":37,"line":300},[35,70996,70997],{"class":306},"  padding:10px;\n",[35,70999,71000],{"class":37,"line":313},[35,71001,71002],{"class":306},"  color:#666;\n",[35,71004,71005,71007,71009],{"class":37,"line":324},[35,71006,70851],{"class":51626},[35,71008,51763],{"class":359},[35,71010,70856],{"class":306},[35,71012,71013,71015,71017],{"class":37,"line":2955},[35,71014,70951],{"class":51626},[35,71016,51763],{"class":359},[35,71018,71019],{"class":306},"16px;\n",[35,71021,71022],{"class":37,"line":8282},[35,71023,1926],{"class":359},[35,71025,71026],{"class":37,"line":8306},[35,71027,71028],{"class":306},"tbody tr {\n",[35,71030,71031,71033,71035],{"class":37,"line":8311},[35,71032,70936],{"class":51626},[35,71034,51763],{"class":359},[35,71036,71037],{"class":41},"#fff;\n",[35,71039,71040],{"class":37,"line":8317},[35,71041,1926],{"class":359},[35,71043,71044],{"class":37,"line":8344},[35,71045,71046],{"class":306},"tbody tr:hover {\n",[35,71048,71049,71051,71053],{"class":37,"line":8349},[35,71050,70936],{"class":51626},[35,71052,51763],{"class":359},[35,71054,71055],{"class":41},"#e1ecf8;\n",[35,71057,71058],{"class":37,"line":8355},[35,71059,1926],{"class":359},[35,71061,71062],{"class":37,"line":8367},[35,71063,71064],{"class":306},".info {\n",[35,71066,71067,71069,71071],{"class":37,"line":8379},[35,71068,70893],{"class":51626},[35,71070,51763],{"class":359},[35,71072,71073],{"class":306},"900px;\n",[35,71075,71076,71078,71080],{"class":37,"line":8391},[35,71077,70795],{"class":51626},[35,71079,51763],{"class":359},[35,71081,71082],{"class":306},"50px auto;\n",[35,71084,71085,71087,71089],{"class":37,"line":10050},[35,71086,70851],{"class":51626},[35,71088,51763],{"class":359},[35,71090,70856],{"class":306},[35,71092,71093],{"class":37,"line":10075},[35,71094,1926],{"class":359},[35,71096,71097],{"class":37,"line":10098},[35,71098,71099],{"class":306},".info  input, .info select {\n",[35,71101,71102,71104,71106],{"class":37,"line":10122},[35,71103,70893],{"class":51626},[35,71105,51763],{"class":359},[35,71107,71108],{"class":306},"80px;\n",[35,71110,71111,71114,71116],{"class":37,"line":10127},[35,71112,71113],{"class":51626},"  height",[35,71115,51763],{"class":359},[35,71117,71118],{"class":306},"27px;\n",[35,71120,71121,71124,71126],{"class":37,"line":10132},[35,71122,71123],{"class":51626},"  outline",[35,71125,51763],{"class":359},[35,71127,70832],{"class":306},[35,71129,71130,71133,71135],{"class":37,"line":10137},[35,71131,71132],{"class":51626},"  border-radius",[35,71134,51763],{"class":359},[35,71136,71137],{"class":306},"5px;\n",[35,71139,71140,71142],{"class":37,"line":10146},[35,71141,70980],{"class":306},[35,71143,70983],{"class":41},[35,71145,71146,71149,71151],{"class":37,"line":10151},[35,71147,71148],{"class":51626},"  padding-left",[35,71150,51763],{"class":359},[35,71152,71137],{"class":306},[35,71154,71155,71158,71160],{"class":37,"line":10157},[35,71156,71157],{"class":51626},"  box-sizing",[35,71159,51763],{"class":359},[35,71161,71162],{"class":306},"border-box;\n",[35,71164,71165,71168,71170],{"class":37,"line":10178},[35,71166,71167],{"class":51626},"  margin-right",[35,71169,51763],{"class":359},[35,71171,71172],{"class":306},"15px;\n",[35,71174,71175],{"class":37,"line":10184},[35,71176,1926],{"class":359},[35,71178,71179],{"class":37,"line":10198},[35,71180,71181],{"class":306},".info button {\n",[35,71183,71184,71186,71188],{"class":37,"line":10204},[35,71185,70893],{"class":51626},[35,71187,51763],{"class":359},[35,71189,71190],{"class":306},"60px;\n",[35,71192,71193,71195,71197],{"class":37,"line":10231},[35,71194,71113],{"class":51626},[35,71196,51763],{"class":359},[35,71198,71118],{"class":306},[35,71200,71201,71204,71206],{"class":37,"line":10240},[35,71202,71203],{"class":51626},"  background-color",[35,71205,51763],{"class":359},[35,71207,71208],{"class":41},"#004085;\n",[35,71210,71211,71213,71215],{"class":37,"line":10246},[35,71212,71123],{"class":51626},[35,71214,51763],{"class":359},[35,71216,70832],{"class":306},[35,71218,71219,71222,71224],{"class":37,"line":10254},[35,71220,71221],{"class":51626},"  border",[35,71223,51763],{"class":359},[35,71225,70800],{"class":306},[35,71227,71228,71231,71233],{"class":37,"line":10259},[35,71229,71230],{"class":51626},"  color",[35,71232,51763],{"class":359},[35,71234,71037],{"class":41},[35,71236,71237,71240,71242],{"class":37,"line":16938},[35,71238,71239],{"class":51626},"  cursor",[35,71241,51763],{"class":359},[35,71243,71244],{"class":306},"pointer;\n",[35,71246,71247,71249,71251],{"class":37,"line":16944},[35,71248,71132],{"class":51626},[35,71250,51763],{"class":359},[35,71252,71137],{"class":306},[35,71254,71255],{"class":37,"line":16967},[35,71256,1926],{"class":359},[35,71258,71259],{"class":37,"line":16973},[35,71260,71261],{"class":306},".info .age {\n",[35,71263,71264,71266,71268],{"class":37,"line":16996},[35,71265,70893],{"class":51626},[35,71267,51763],{"class":359},[35,71269,71270],{"class":306},"50px;\n",[35,71272,71273],{"class":37,"line":17010},[35,71274,1926],{"class":359},[21,71276,71277],{},"思路：",[21,71279,71280],{},[1823,71281],{"alt":30,"src":71282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[21,71284,71285],{},[1823,71286],{"alt":30,"src":71287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[21,71289,71290],{},[1823,71291],{"alt":30,"src":71292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[465,71294,71296],{"id":71295},"_3315-重绘回流","3.3.15 重绘回流",[21,71298,71299],{},[1823,71300],{"alt":30,"src":71301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[21,71303,71304],{},[1823,71305],{"alt":30,"src":71306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[21,71308,71309],{},[1823,71310],{"alt":30,"src":71311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[438,71313,71315],{"id":71314},"_34-bom","3.4 BOM",[21,71317,71318],{},[1823,71319],{"alt":30,"src":71320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[21,71322,71323],{},"平时写的document省略了window而已，实际上是window.document",[21,71325,71326],{},"函数也是这样，调用的时候实际为window.fn()",[21,71328,71329],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[21,71331,71332],{},"window大部分情况下可以省略",[465,71334,71336],{"id":71335},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[21,71338,71339],{},"只执行一次",[21,71341,71342],{},[1823,71343],{"alt":30,"src":71344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[21,71346,71347],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[21,71349,71350],{},[1823,71351],{"alt":30,"src":71352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[465,71354,71356],{"id":71355},"_342-js执行机制","3.4.2 JS执行机制",[21,71358,71359],{},[1823,71360],{"alt":30,"src":71361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[21,71363,71364],{},"两个的结果都是1111 3333 2222",[21,71366,71367],{},[1823,71368],{"alt":30,"src":71369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[21,71371,71372],{},[1823,71373],{"alt":30,"src":71374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[21,71376,71377],{},[1823,71378],{"alt":30,"src":71379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[21,71381,71382],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[21,71384,71385],{},"工作流程：",[21,71387,71388],{},[1823,71389],{"alt":30,"src":71390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[21,71392,71393],{},[1823,71394],{"alt":30,"src":71395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[21,71397,71398],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[21,71400,71401],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[465,71403,71405],{"id":71404},"_343-location对象","3.4.3 location对象",[21,71407,71408],{},"location对象属于window这个全局对象下的，可以 省略window",[21,71410,71411],{},[1823,71412],{"alt":30,"src":71413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[21,71415,71416],{},"href可以跳转页面",[14,71418,71419],{},[17,71420,71421],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[21,71423,71424],{},"search得到提交信息之后网站后边的地址",[21,71426,71427],{},[1823,71428],{"alt":30,"src":71429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[21,71431,71432],{},[1823,71433],{"alt":30,"src":71434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[14,71436,71437],{"start":45},[17,71438,71439],{},"hash:这个获取单页面应用#后边的地址",[21,71441,71442],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[21,71444,71445],{},[1823,71446],{"alt":30,"src":71447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[25,71449,71451],{"className":53393,"code":71450,"language":53395,"meta":30,"style":30},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[32,71452,71453,71473,71493],{"__ignoreMap":30},[35,71454,71455,71457,71459,71461,71463,71466,71469,71471],{"class":37,"line":38},[35,71456,52470],{"class":359},[35,71458,734],{"class":51626},[35,71460,61383],{"class":48},[35,71462,544],{"class":359},[35,71464,71465],{"class":306},"\"#\u002Fmy\"",[35,71467,71468],{"class":359},">我的\u003C\u002F",[35,71470,734],{"class":51626},[35,71472,51633],{"class":359},[35,71474,71475,71477,71479,71481,71483,71486,71489,71491],{"class":37,"line":45},[35,71476,52470],{"class":359},[35,71478,734],{"class":51626},[35,71480,61383],{"class":48},[35,71482,544],{"class":359},[35,71484,71485],{"class":306},"\"#\u002Ffriend\"",[35,71487,71488],{"class":359},">关注\u003C\u002F",[35,71490,734],{"class":51626},[35,71492,51633],{"class":359},[35,71494,71495,71497,71499,71501,71503,71506,71509,71511],{"class":37,"line":55},[35,71496,52470],{"class":359},[35,71498,734],{"class":51626},[35,71500,61383],{"class":48},[35,71502,544],{"class":359},[35,71504,71505],{"class":306},"\"#\u002Fdownload\"",[35,71507,71508],{"class":359},">下载\u003C\u002F",[35,71510,734],{"class":51626},[35,71512,51633],{"class":359},[21,71514,71515],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[14,71517,71518],{"start":55},[17,71519,71520,71521,71523,71524,71526],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54042,71522],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54042,71525],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[465,71528,71530],{"id":71529},"_345-navigator对象","3.4.5 navigator对象",[21,71532,71533],{},[1823,71534],{"alt":30,"src":71535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[25,71537,71541],{"className":71538,"code":71539,"language":71540,"meta":30,"style":30},"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",[32,71542,71543,71548,71559,71571,71576,71627,71668,71673,71686,71698,71703],{"__ignoreMap":30},[35,71544,71545],{"class":37,"line":38},[35,71546,71547],{"class":41},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[35,71549,71550,71552,71554,71556],{"class":37,"line":45},[35,71551,722],{"class":495},[35,71553,499],{"class":359},[35,71555,54775],{"class":495},[35,71557,71558],{"class":359}," () { \n",[35,71560,71561,71563,71566,71568],{"class":37,"line":55},[35,71562,7126],{"class":495},[35,71564,71565],{"class":58}," userAgent",[35,71567,13898],{"class":495},[35,71569,71570],{"class":359}," navigator.userAgent \n",[35,71572,71573],{"class":37,"line":65},[35,71574,71575],{"class":41},"\u002F\u002F 验证是否为Android或iPhone \n",[35,71577,71578,71580,71583,71585,71588,71591,71593,71595,71598,71600,71603,71607,71609,71611,71613,71616,71618,71620,71622,71624],{"class":37,"line":74},[35,71579,7126],{"class":495},[35,71581,71582],{"class":58}," android",[35,71584,13898],{"class":495},[35,71586,71587],{"class":359}," userAgent.",[35,71589,71590],{"class":48},"match",[35,71592,499],{"class":359},[35,71594,1078],{"class":306},[35,71596,71597],{"class":48303},"(Android);",[35,71599,1480],{"class":495},[35,71601,71602],{"class":58},"[\\s",[35,71604,71606],{"class":71605},"snhLl","\\\u002F",[35,71608,1434],{"class":58},[35,71610,975],{"class":495},[35,71612,499],{"class":48303},[35,71614,71615],{"class":58},"[\\d.]",[35,71617,975],{"class":495},[35,71619,923],{"class":48303},[35,71621,1480],{"class":495},[35,71623,1078],{"class":306},[35,71625,71626],{"class":359},") \n",[35,71628,71629,71631,71634,71636,71638,71640,71642,71644,71647,71650,71653,71655,71657,71660,71662,71664,71666],{"class":37,"line":83},[35,71630,7126],{"class":495},[35,71632,71633],{"class":58}," iphone",[35,71635,13898],{"class":495},[35,71637,71587],{"class":359},[35,71639,71590],{"class":48},[35,71641,499],{"class":359},[35,71643,1078],{"class":306},[35,71645,71646],{"class":48303},"(iPhone",[35,71648,71649],{"class":58},"\\s",[35,71651,71652],{"class":48303},"OS)",[35,71654,71649],{"class":58},[35,71656,499],{"class":48303},[35,71658,71659],{"class":58},"[\\d_]",[35,71661,975],{"class":495},[35,71663,923],{"class":48303},[35,71665,1078],{"class":306},[35,71667,71626],{"class":359},[35,71669,71670],{"class":37,"line":92},[35,71671,71672],{"class":41},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[35,71674,71675,71677,71680,71683],{"class":37,"line":101},[35,71676,1892],{"class":495},[35,71678,71679],{"class":359}," (android ",[35,71681,71682],{"class":495},"||",[35,71684,71685],{"class":359}," iphone) { \n",[35,71687,71688,71691,71693,71696],{"class":37,"line":110},[35,71689,71690],{"class":359},"location.href ",[35,71692,544],{"class":495},[35,71694,71695],{"class":306}," 'http:\u002F\u002Fm.itcast.cn'",[35,71697,3008],{"class":359},[35,71699,71700],{"class":37,"line":119},[35,71701,71702],{"class":359},"} \n",[35,71704,71705],{"class":37,"line":128},[35,71706,71707],{"class":359},"})()\n",[465,71709,71711],{"id":71710},"_346-histroy对象","3.4.6 histroy对象",[21,71713,71714],{},[1823,71715],{"alt":30,"src":71716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[21,71718,71719],{},"浏览器地址的前进与后退!!!",[21,71721,71722],{},"history.back() 等效于 history.go(-1)",[21,71724,71725],{},"history.forward() 等效于 history.go(1)",[438,71727,71729],{"id":71728},"_35-本地存储","3.5 本地存储",[14,71731,71732,71735,71738],{},[17,71733,71734],{},"数据存储在用户浏览器中",[17,71736,71737],{},"设置、读取方便、甚至页面刷新不丢失数据",[17,71739,71740],{},"容量较大，sessionStorage和localStorage约 5M 左右",[465,71742,71744],{"id":71743},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[21,71746,71747],{},"只能存储字符串",[21,71749,71750],{},[1823,71751],{"alt":30,"src":71752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[21,71754,71755],{},[1823,71756],{"alt":30,"src":71757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[21,71759,71760],{},"键值对要加引号,不然就会当变量来看了",[21,71762,71763],{},"localStorage.setItem('uname', 'pink')",[21,71765,71766],{},"刷新之后信息不再丢失",[21,71768,71769],{},"操作key,value会跟着变",[21,71771,71772],{},"删除只删除键就可以,即名字",[21,71774,71763],{},[21,71776,71777],{},"改:",[21,71779,71780],{},"localStorage.setItem('uname','red')",[21,71782,71783],{},"有这个键就是改,没有这个键就是改",[21,71785,71786],{},[1823,71787],{"alt":30,"src":71788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[21,71790,71791],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[21,71793,71794],{},[1823,71795],{"alt":30,"src":71796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[21,71798,71799],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[465,71801,71803],{"id":71802},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[21,71805,71806],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[21,71808,71809],{},"特性:",[14,71811,71812,71815,71818,71821],{},[17,71813,71814],{},"生命周期为关闭浏览器窗口",[17,71816,71817],{},"在同一个窗口(页面)下数据可以共享",[17,71819,71820],{},"以键值对的形式存储使用",[17,71822,71823],{},"用法跟localStorage 基本相同",[465,71825,71827],{"id":71826},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[21,71829,71830],{},"本地只能存储字符串,无法直接存储复杂数据类型",[25,71832,71834],{"className":53393,"code":71833,"language":53395,"meta":30,"style":30},"\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",[32,71835,71836,71844,71849,71854,71859,71864,71868,71873,71878],{"__ignoreMap":30},[35,71837,71838,71840,71842],{"class":37,"line":38},[35,71839,1404],{"class":359},[35,71841,52139],{"class":51626},[35,71843,51633],{"class":359},[35,71845,71846],{"class":37,"line":45},[35,71847,71848],{"class":359},"    const obj = {\n",[35,71850,71851],{"class":37,"line":55},[35,71852,71853],{"class":359},"      uname: 'pink老师',\n",[35,71855,71856],{"class":37,"line":65},[35,71857,71858],{"class":359},"      age: 18,\n",[35,71860,71861],{"class":37,"line":74},[35,71862,71863],{"class":359},"      gender: '女'\n",[35,71865,71866],{"class":37,"line":83},[35,71867,2528],{"class":359},[35,71869,71870],{"class":37,"line":92},[35,71871,71872],{"class":359},"    \u002F\u002F 存储复杂数据类型\n",[35,71874,71875],{"class":37,"line":101},[35,71876,71877],{"class":359},"    localStorage.setItem('obj', obj)\n",[35,71879,71880,71882,71884],{"class":37,"line":110},[35,71881,52743],{"class":359},[35,71883,52139],{"class":51626},[35,71885,51633],{"class":359},[21,71887,71888],{},[1823,71889],{"alt":30,"src":71890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[21,71892,71893],{},"如果获取一下数据:",[21,71895,71896],{},"log(localStorage.getItem('obj'))",[21,71898,71899],{},[1823,71900],{"alt":30,"src":71901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[21,71903,71904],{},"发现直接存对象是使用不了的!!!",[22332,71906,71908],{"id":71907},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[21,71910,71911],{},[1823,71912],{"alt":30,"src":71913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[25,71915,71917],{"className":50959,"code":71916,"language":50961,"meta":30,"style":30},"\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",[32,71918,71919,71927,71937,71947,71956,71964,71968,71972,71998,72017,72025,72029,72034,72039],{"__ignoreMap":30},[35,71920,71921,71923,71925],{"class":37,"line":38},[35,71922,1404],{"class":359},[35,71924,52139],{"class":51626},[35,71926,51633],{"class":359},[35,71928,71929,71931,71933,71935],{"class":37,"line":45},[35,71930,11555],{"class":495},[35,71932,70297],{"class":58},[35,71934,13898],{"class":495},[35,71936,15906],{"class":359},[35,71938,71939,71942,71945],{"class":37,"line":55},[35,71940,71941],{"class":359},"      uname: ",[35,71943,71944],{"class":306},"'pink老师'",[35,71946,31792],{"class":359},[35,71948,71949,71952,71954],{"class":37,"line":65},[35,71950,71951],{"class":359},"      age: ",[35,71953,1144],{"class":58},[35,71955,31792],{"class":359},[35,71957,71958,71961],{"class":37,"line":74},[35,71959,71960],{"class":359},"      gender: ",[35,71962,71963],{"class":306},"'女'\n",[35,71965,71966],{"class":37,"line":83},[35,71967,2528],{"class":359},[35,71969,71970],{"class":37,"line":92},[35,71971,71872],{"class":41},[35,71973,71974,71977,71980,71982,71985,71987,71990,71992,71995],{"class":37,"line":101},[35,71975,71976],{"class":359},"  localStorage.",[35,71978,71979],{"class":48},"setItem",[35,71981,499],{"class":359},[35,71983,71984],{"class":306},"'obj'",[35,71986,12769],{"class":359},[35,71988,71989],{"class":58},"JSON",[35,71991,1052],{"class":359},[35,71993,71994],{"class":48},"stringify",[35,71996,71997],{"class":359},"(obj))\n",[35,71999,72000,72003,72005,72008,72011,72013,72015],{"class":37,"line":110},[35,72001,72002],{"class":359},"  console.",[35,72004,58573],{"class":48},[35,72006,72007],{"class":359},"(localStorage.",[35,72009,72010],{"class":48},"getItem",[35,72012,499],{"class":359},[35,72014,71984],{"class":306},[35,72016,30823],{"class":359},[35,72018,72019,72021,72023],{"class":37,"line":119},[35,72020,52743],{"class":359},[35,72022,52139],{"class":51626},[35,72024,51633],{"class":359},[35,72026,72027],{"class":37,"line":128},[35,72028,70946],{"class":359},[35,72030,72031],{"class":37,"line":137},[35,72032,72033],{"class":359},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[35,72035,72036],{"class":37,"line":144},[35,72037,72038],{"class":359},"  类型是字符串的\n",[35,72040,72041],{"class":37,"line":150},[35,72042,72043],{"class":359},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22332,72045,72047],{"id":72046},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[21,72049,72050],{},[1823,72051],{"alt":30,"src":72052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[21,72054,72055],{},[1823,72056],{"alt":30,"src":72057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[25,72059,72061],{"className":53393,"code":72060,"language":53395,"meta":30,"style":30},"  \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",[32,72062,72063,72071,72075,72079,72083,72087,72091,72096,72101,72106,72111,72116,72121,72126,72131],{"__ignoreMap":30},[35,72064,72065,72067,72069],{"class":37,"line":38},[35,72066,52470],{"class":359},[35,72068,52139],{"class":51626},[35,72070,51633],{"class":359},[35,72072,72073],{"class":37,"line":45},[35,72074,71848],{"class":359},[35,72076,72077],{"class":37,"line":55},[35,72078,71853],{"class":359},[35,72080,72081],{"class":37,"line":65},[35,72082,71858],{"class":359},[35,72084,72085],{"class":37,"line":74},[35,72086,71863],{"class":359},[35,72088,72089],{"class":37,"line":83},[35,72090,2528],{"class":359},[35,72092,72093],{"class":37,"line":92},[35,72094,72095],{"class":359},"    \u002F\u002F 1.存储复杂数据类型\n",[35,72097,72098],{"class":37,"line":101},[35,72099,72100],{"class":359},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[35,72102,72103],{"class":37,"line":110},[35,72104,72105],{"class":359},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[35,72107,72108],{"class":37,"line":119},[35,72109,72110],{"class":359},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[35,72112,72113],{"class":37,"line":128},[35,72114,72115],{"class":359},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[35,72117,72118],{"class":37,"line":137},[35,72119,72120],{"class":359},"    \u002F\u002F 取\n",[35,72122,72123],{"class":37,"line":144},[35,72124,72125],{"class":359},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[35,72127,72128],{"class":37,"line":150},[35,72129,72130],{"class":359},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[35,72132,72133,72135,72137],{"class":37,"line":159},[35,72134,52743],{"class":359},[35,72136,52139],{"class":51626},[35,72138,51633],{"class":359},[21,72140,72141],{},[1823,72142],{"alt":30,"src":72143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[465,72145,72147],{"id":72146},"_356-数组map方法","3.5.6 数组map方法",[21,72149,72150],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[21,72152,72153],{},[1823,72154],{"alt":30,"src":72155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[21,72157,72158],{},[1823,72159],{"alt":30,"src":72160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[21,72162,72163,72166],{},[645,72164,72165],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[21,72168,72169],{},"map有返回值，但是forEach没有返回值",[21,72171,72172],{},"map是个方法。用的时候要加 ()",[21,72174,72175],{},"map返回的是一个数组",[465,72177,72179],{"id":72178},"_357-数组中join方法","3.5.7 数组中join方法",[21,72181,72182],{},[1823,72183],{"alt":30,"src":72184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[21,72186,72187],{},"类似于python中拼接字符串一样！",[14,72189,72190,72193,72196],{},[17,72191,72192],{},"小括号为空则逗号分开",[17,72194,72195],{},"小括号为空字符串 ''，则元素之间没有分隔符",[17,72197,72198],{},"小括号用啥符号就用进行分割",[465,72200,72202],{"id":72201},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[14,72204,72205,72208,72211,72214,72217],{},[17,72206,72207],{},"记住本地时间获取快速方式：new Date().toDateString()",[17,72209,72210],{},"尽量减少DOM操作，用好map+join的渲染方式",[17,72212,72213],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[17,72215,72216],{},"return可以实现函数的结束",[17,72218,72219],{},"禁止跳转是 preventDefault() 不要忘记",[25,72221,72223],{"className":50959,"code":72222,"language":50961,"meta":30,"style":30},"\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",[32,72224,72225,72235,72249,72253,72261,72275,72295,72307,72315,72321,72331,72341,72345,72349,72355,72365,72377,72381,72385,72392,72404,72418,72428,72432,72436,72443,72450,72457,72469,72481,72491,72503,72507,72511,72518,72525,72537,72549,72559,72571,72601,72605,72609,72616,72628,72640,72664,72674,72684,72688,72692,72700,72711,72723,72735,72747,72764,72776,72788,72792,72796,72803,72815,72827,72839,72850,72868,72881,72893,72917,72928,72932,72936,72944,72954,72958,72962,72968,72980,72991,73001,73005,73009,73015,73037,73041,73045,73051,73057,73069,73079,73091,73121,73134,73151,73155,73159,73170,73192,73202,73206,73210,73223,73233,73245,73257,73269,73281,73291,73301,73311,73322,73335,73339,73347,73355,73359,73367,73380,73400,73433,73466,73499,73525,73543,73561,73569,73595,73613,73631,73649,73667,73685,73693,73701,73719,73727,73756,73764,73772,73780,73793,73805,73817,73829,73841,73853,73866,73878,73886,73894,73902,73907,73912,73916,73920,73924,73928,73932,73936,73941,73946,73951,73956,73964,73972,73980,73985,73990,73995,74000,74005,74010,74015,74020,74025,74030,74035,74040,74045,74050,74054,74059,74064,74074,74083,74087,74092,74101,74117,74159,74199,74238,74303,74311,74315,74320,74338,74346,74351,74356,74386,74392,74397,74410,74422,74434,74446,74458,74470,74482,74486,74496,74500,74505,74510,74514,74523,74527,74532,74537,74556,74561,74581,74585,74590,74594,74599,74617,74635,74653,74672,74691,74710,74715,74721,74742,74748,74757,74763,74769,74775,74802,74815,74820,74830,74836,74842,74848,74854,74859,74865,74871,74877,74883,74916,74921,74926,74931,74936,74942,74948,74954,74965,74970,74976,74983,74997,75003,75027,75032,75037,75043,75049,75070,75076,75089,75095,75101,75107,75113,75118,75124,75130,75136,75154,75168,75174,75182,75188,75210,75215,75220,75225,75230,75235,75244,75253,75258],{"__ignoreMap":30},[35,72226,72227,72229,72231,72233],{"class":37,"line":38},[35,72228,51623],{"class":359},[35,72230,51627],{"class":51626},[35,72232,51630],{"class":48},[35,72234,51633],{"class":359},[35,72236,72237,72239,72241,72243,72245,72247],{"class":37,"line":45},[35,72238,1404],{"class":359},[35,72240,50961],{"class":51626},[35,72242,51642],{"class":48},[35,72244,544],{"class":359},[35,72246,51647],{"class":306},[35,72248,51633],{"class":359},[35,72250,72251],{"class":37,"line":55},[35,72252,141],{"emptyLinePlaceholder":140},[35,72254,72255,72257,72259],{"class":37,"line":65},[35,72256,1404],{"class":359},[35,72258,51660],{"class":51626},[35,72260,51633],{"class":359},[35,72262,72263,72265,72267,72269,72271,72273],{"class":37,"line":74},[35,72264,52470],{"class":359},[35,72266,51670],{"class":51626},[35,72268,51673],{"class":48},[35,72270,544],{"class":359},[35,72272,51678],{"class":306},[35,72274,51633],{"class":359},[35,72276,72277,72279,72281,72283,72285,72287,72289,72291,72293],{"class":37,"line":83},[35,72278,52470],{"class":359},[35,72280,51670],{"class":51626},[35,72282,15254],{"class":48},[35,72284,544],{"class":359},[35,72286,51717],{"class":306},[35,72288,51697],{"class":48},[35,72290,544],{"class":359},[35,72292,51724],{"class":306},[35,72294,51633],{"class":359},[35,72296,72297,72299,72301,72303,72305],{"class":37,"line":92},[35,72298,52470],{"class":359},[35,72300,51733],{"class":51626},[35,72302,51736],{"class":359},[35,72304,51733],{"class":51626},[35,72306,51633],{"class":359},[35,72308,72309,72311,72313],{"class":37,"line":101},[35,72310,52470],{"class":359},[35,72312,416],{"class":51626},[35,72314,51633],{"class":359},[35,72316,72317,72319],{"class":37,"line":110},[35,72318,6737],{"class":51626},[35,72320,15906],{"class":359},[35,72322,72323,72325,72327,72329],{"class":37,"line":119},[35,72324,55021],{"class":58},[35,72326,51763],{"class":359},[35,72328,687],{"class":58},[35,72330,1655],{"class":359},[35,72332,72333,72335,72337,72339],{"class":37,"line":128},[35,72334,55032],{"class":58},[35,72336,51763],{"class":359},[35,72338,687],{"class":58},[35,72340,1655],{"class":359},[35,72342,72343],{"class":37,"line":137},[35,72344,2528],{"class":359},[35,72346,72347],{"class":37,"line":144},[35,72348,141],{"emptyLinePlaceholder":140},[35,72350,72351,72353],{"class":37,"line":150},[35,72352,57605],{"class":51626},[35,72354,15906],{"class":359},[35,72356,72357,72359,72361,72363],{"class":37,"line":159},[35,72358,57612],{"class":58},[35,72360,51763],{"class":359},[35,72362,51918],{"class":58},[35,72364,1655],{"class":359},[35,72366,72367,72369,72371,72373,72375],{"class":37,"line":168},[35,72368,62403],{"class":58},[35,72370,51763],{"class":359},[35,72372,1194],{"class":58},[35,72374,51818],{"class":495},[35,72376,1655],{"class":359},[35,72378,72379],{"class":37,"line":177},[35,72380,2528],{"class":359},[35,72382,72383],{"class":37,"line":182},[35,72384,141],{"emptyLinePlaceholder":140},[35,72386,72387,72390],{"class":37,"line":188},[35,72388,72389],{"class":48},"    .info",[35,72391,15906],{"class":359},[35,72393,72394,72396,72398,72400,72402],{"class":37,"line":197},[35,72395,55097],{"class":58},[35,72397,51763],{"class":359},[35,72399,51815],{"class":58},[35,72401,51818],{"class":495},[35,72403,1655],{"class":359},[35,72405,72406,72408,72410,72412,72414,72416],{"class":37,"line":206},[35,72407,55032],{"class":58},[35,72409,51763],{"class":359},[35,72411,940],{"class":58},[35,72413,51818],{"class":495},[35,72415,51882],{"class":58},[35,72417,1655],{"class":359},[35,72419,72420,72422,72424,72426],{"class":37,"line":215},[35,72421,57612],{"class":58},[35,72423,51763],{"class":359},[35,72425,51918],{"class":58},[35,72427,1655],{"class":359},[35,72429,72430],{"class":37,"line":224},[35,72431,2528],{"class":359},[35,72433,72434],{"class":37,"line":233},[35,72435,141],{"emptyLinePlaceholder":140},[35,72437,72438,72441],{"class":37,"line":238},[35,72439,72440],{"class":48},"    .uname",[35,72442,31792],{"class":359},[35,72444,72445,72448],{"class":37,"line":244},[35,72446,72447],{"class":48},"    .age",[35,72449,31792],{"class":359},[35,72451,72452,72455],{"class":37,"line":253},[35,72453,72454],{"class":48},"    .salary",[35,72456,15906],{"class":359},[35,72458,72459,72461,72463,72465,72467],{"class":37,"line":262},[35,72460,55097],{"class":58},[35,72462,51763],{"class":359},[35,72464,807],{"class":58},[35,72466,51818],{"class":495},[35,72468,1655],{"class":359},[35,72470,72471,72473,72475,72477,72479],{"class":37,"line":271},[35,72472,55111],{"class":58},[35,72474,51763],{"class":359},[35,72476,1194],{"class":58},[35,72478,51818],{"class":495},[35,72480,1655],{"class":359},[35,72482,72483,72485,72487,72489],{"class":37,"line":280},[35,72484,62106],{"class":58},[35,72486,51763],{"class":359},[35,72488,55063],{"class":58},[35,72490,1655],{"class":359},[35,72492,72493,72495,72497,72499,72501],{"class":37,"line":289},[35,72494,62076],{"class":58},[35,72496,51763],{"class":359},[35,72498,1069],{"class":58},[35,72500,51818],{"class":495},[35,72502,1655],{"class":359},[35,72504,72505],{"class":37,"line":294},[35,72506,2528],{"class":359},[35,72508,72509],{"class":37,"line":300},[35,72510,141],{"emptyLinePlaceholder":140},[35,72512,72513,72516],{"class":37,"line":313},[35,72514,72515],{"class":48},"    .gender",[35,72517,31792],{"class":359},[35,72519,72520,72523],{"class":37,"line":324},[35,72521,72522],{"class":48},"    .city",[35,72524,15906],{"class":359},[35,72526,72527,72529,72531,72533,72535],{"class":37,"line":2955},[35,72528,55097],{"class":58},[35,72530,51763],{"class":359},[35,72532,807],{"class":58},[35,72534,51818],{"class":495},[35,72536,1655],{"class":359},[35,72538,72539,72541,72543,72545,72547],{"class":37,"line":8282},[35,72540,55111],{"class":58},[35,72542,51763],{"class":359},[35,72544,1319],{"class":58},[35,72546,51818],{"class":495},[35,72548,1655],{"class":359},[35,72550,72551,72553,72555,72557],{"class":37,"line":8306},[35,72552,62106],{"class":58},[35,72554,51763],{"class":359},[35,72556,55063],{"class":58},[35,72558,1655],{"class":359},[35,72560,72561,72563,72565,72567,72569],{"class":37,"line":8311},[35,72562,62076],{"class":58},[35,72564,51763],{"class":359},[35,72566,1069],{"class":58},[35,72568,51818],{"class":495},[35,72570,1655],{"class":359},[35,72572,72573,72575,72577,72579,72581,72583,72586,72588,72590,72592,72595,72597,72599],{"class":37,"line":8317},[35,72574,62303],{"class":58},[35,72576,51763],{"class":359},[35,72578,713],{"class":58},[35,72580,51818],{"class":495},[35,72582,51847],{"class":58},[35,72584,72585],{"class":58}," rgb",[35,72587,499],{"class":359},[35,72589,2072],{"class":58},[35,72591,12769],{"class":359},[35,72593,72594],{"class":58},"197",[35,72596,12769],{"class":359},[35,72598,72594],{"class":58},[35,72600,3053],{"class":359},[35,72602,72603],{"class":37,"line":8344},[35,72604,2528],{"class":359},[35,72606,72607],{"class":37,"line":8349},[35,72608,141],{"emptyLinePlaceholder":140},[35,72610,72611,72614],{"class":37,"line":8355},[35,72612,72613],{"class":51626},"    button",[35,72615,15906],{"class":359},[35,72617,72618,72620,72622,72624,72626],{"class":37,"line":8367},[35,72619,55111],{"class":58},[35,72621,51763],{"class":359},[35,72623,1319],{"class":58},[35,72625,51818],{"class":495},[35,72627,1655],{"class":359},[35,72629,72630,72632,72634,72636,72638],{"class":37,"line":8379},[35,72631,55097],{"class":58},[35,72633,51763],{"class":359},[35,72635,978],{"class":58},[35,72637,51818],{"class":495},[35,72639,1655],{"class":359},[35,72641,72642,72644,72646,72649,72651,72653,72655,72658,72660,72662],{"class":37,"line":8391},[35,72643,55210],{"class":58},[35,72645,51763],{"class":359},[35,72647,72648],{"class":58},"rgb",[35,72650,499],{"class":359},[35,72652,1463],{"class":58},[35,72654,12769],{"class":359},[35,72656,72657],{"class":58},"187",[35,72659,12769],{"class":359},[35,72661,795],{"class":58},[35,72663,3053],{"class":359},[35,72665,72666,72668,72670,72672],{"class":37,"line":10050},[35,72667,57742],{"class":58},[35,72669,51763],{"class":359},[35,72671,61168],{"class":58},[35,72673,1655],{"class":359},[35,72675,72676,72678,72680,72682],{"class":37,"line":10075},[35,72677,62303],{"class":58},[35,72679,51763],{"class":359},[35,72681,687],{"class":58},[35,72683,1655],{"class":359},[35,72685,72686],{"class":37,"line":10098},[35,72687,2528],{"class":359},[35,72689,72690],{"class":37,"line":10122},[35,72691,141],{"emptyLinePlaceholder":140},[35,72693,72694,72696,72698],{"class":37,"line":10127},[35,72695,72613],{"class":51626},[35,72697,52014],{"class":51626},[35,72699,15906],{"class":359},[35,72701,72702,72704,72706,72709],{"class":37,"line":10132},[35,72703,55335],{"class":58},[35,72705,51763],{"class":359},[35,72707,72708],{"class":58},"inline-block",[35,72710,1655],{"class":359},[35,72712,72713,72715,72717,72719,72721],{"class":37,"line":10137},[35,72714,55097],{"class":58},[35,72716,51763],{"class":359},[35,72718,940],{"class":58},[35,72720,51818],{"class":495},[35,72722,1655],{"class":359},[35,72724,72725,72727,72729,72731,72733],{"class":37,"line":10146},[35,72726,55111],{"class":58},[35,72728,51763],{"class":359},[35,72730,940],{"class":58},[35,72732,51818],{"class":495},[35,72734,1655],{"class":359},[35,72736,72737,72739,72741,72743,72745],{"class":37,"line":10151},[35,72738,57685],{"class":58},[35,72740,51763],{"class":359},[35,72742,966],{"class":58},[35,72744,51818],{"class":495},[35,72746,1655],{"class":359},[35,72748,72749,72751,72753,72755,72757,72759,72762],{"class":37,"line":10157},[35,72750,62303],{"class":58},[35,72752,51763],{"class":359},[35,72754,713],{"class":58},[35,72756,51818],{"class":495},[35,72758,51847],{"class":58},[35,72760,72761],{"class":58}," #fff",[35,72763,1655],{"class":359},[35,72765,72766,72768,72770,72772,72774],{"class":37,"line":10178},[35,72767,55460],{"class":58},[35,72769,51763],{"class":359},[35,72771,372],{"class":58},[35,72773,51818],{"class":495},[35,72775,1655],{"class":359},[35,72777,72778,72780,72782,72784,72786],{"class":37,"line":10184},[35,72779,62076],{"class":58},[35,72781,51763],{"class":359},[35,72783,713],{"class":58},[35,72785,51818],{"class":495},[35,72787,1655],{"class":359},[35,72789,72790],{"class":37,"line":10198},[35,72791,2528],{"class":359},[35,72793,72794],{"class":37,"line":10204},[35,72795,141],{"emptyLinePlaceholder":140},[35,72797,72798,72801],{"class":37,"line":10231},[35,72799,72800],{"class":48},"    .total",[35,72802,15906],{"class":359},[35,72804,72805,72807,72809,72811,72813],{"class":37,"line":10240},[35,72806,55097],{"class":58},[35,72808,51763],{"class":359},[35,72810,61955],{"class":58},[35,72812,51818],{"class":495},[35,72814,1655],{"class":359},[35,72816,72817,72819,72821,72823,72825],{"class":37,"line":10246},[35,72818,55111],{"class":58},[35,72820,51763],{"class":359},[35,72822,895],{"class":58},[35,72824,51818],{"class":495},[35,72826,1655],{"class":359},[35,72828,72829,72831,72833,72835,72837],{"class":37,"line":10254},[35,72830,57685],{"class":58},[35,72832,51763],{"class":359},[35,72834,895],{"class":58},[35,72836,51818],{"class":495},[35,72838,1655],{"class":359},[35,72840,72841,72843,72845,72848],{"class":37,"line":10259},[35,72842,57612],{"class":58},[35,72844,51763],{"class":359},[35,72846,72847],{"class":58},"right",[35,72849,1655],{"class":359},[35,72851,72852,72854,72856,72858,72860,72862,72864,72866],{"class":37,"line":16938},[35,72853,55032],{"class":58},[35,72855,51763],{"class":359},[35,72857,895],{"class":58},[35,72859,51818],{"class":495},[35,72861,51882],{"class":58},[35,72863,2379],{"class":58},[35,72865,51818],{"class":495},[35,72867,1655],{"class":359},[35,72869,72870,72873,72875,72877,72879],{"class":37,"line":16944},[35,72871,72872],{"class":58},"      padding-right",[35,72874,51763],{"class":359},[35,72876,940],{"class":58},[35,72878,51818],{"class":495},[35,72880,1655],{"class":359},[35,72882,72883,72885,72887,72889,72891],{"class":37,"line":16967},[35,72884,55248],{"class":58},[35,72886,51763],{"class":359},[35,72888,1017],{"class":58},[35,72890,51818],{"class":495},[35,72892,1655],{"class":359},[35,72894,72895,72897,72899,72901,72903,72906,72908,72911,72913,72915],{"class":37,"line":16973},[35,72896,55210],{"class":58},[35,72898,51763],{"class":359},[35,72900,72648],{"class":58},[35,72902,499],{"class":359},[35,72904,72905],{"class":58},"237",[35,72907,12769],{"class":359},[35,72909,72910],{"class":58},"235",[35,72912,12769],{"class":359},[35,72914,72910],{"class":58},[35,72916,3053],{"class":359},[35,72918,72919,72922,72924,72926],{"class":37,"line":16996},[35,72920,72921],{"class":58},"      box-sizing",[35,72923,51763],{"class":359},[35,72925,60831],{"class":58},[35,72927,1655],{"class":359},[35,72929,72930],{"class":37,"line":17010},[35,72931,2528],{"class":359},[35,72933,72934],{"class":37,"line":17030},[35,72935,141],{"emptyLinePlaceholder":140},[35,72937,72938,72940,72942],{"class":37,"line":17036},[35,72939,72800],{"class":48},[35,72941,52014],{"class":51626},[35,72943,15906],{"class":359},[35,72945,72946,72948,72950,72952],{"class":37,"line":17047},[35,72947,57742],{"class":58},[35,72949,51763],{"class":359},[35,72951,57747],{"class":58},[35,72953,1655],{"class":359},[35,72955,72956],{"class":37,"line":17070},[35,72957,2528],{"class":359},[35,72959,72960],{"class":37,"line":17092},[35,72961,141],{"emptyLinePlaceholder":140},[35,72963,72964,72966],{"class":37,"line":17097},[35,72965,65349],{"class":51626},[35,72967,15906],{"class":359},[35,72969,72970,72972,72974,72976,72978],{"class":37,"line":17103},[35,72971,55097],{"class":58},[35,72973,51763],{"class":359},[35,72975,61955],{"class":58},[35,72977,51818],{"class":495},[35,72979,1655],{"class":359},[35,72981,72982,72984,72986,72989],{"class":37,"line":17117},[35,72983,55032],{"class":58},[35,72985,51763],{"class":359},[35,72987,72988],{"class":58},"auto",[35,72990,1655],{"class":359},[35,72992,72993,72995,72997,72999],{"class":37,"line":17130},[35,72994,65356],{"class":58},[35,72996,51763],{"class":359},[35,72998,65361],{"class":58},[35,73000,1655],{"class":359},[35,73002,73003],{"class":37,"line":17135},[35,73004,2528],{"class":359},[35,73006,73007],{"class":37,"line":17149},[35,73008,141],{"emptyLinePlaceholder":140},[35,73010,73011,73013],{"class":37,"line":17154},[35,73012,65441],{"class":51626},[35,73014,15906],{"class":359},[35,73016,73017,73019,73021,73023,73025,73027,73029,73031,73033,73035],{"class":37,"line":17160},[35,73018,55210],{"class":58},[35,73020,51763],{"class":359},[35,73022,72648],{"class":58},[35,73024,499],{"class":359},[35,73026,72905],{"class":58},[35,73028,12769],{"class":359},[35,73030,72910],{"class":58},[35,73032,12769],{"class":359},[35,73034,72910],{"class":58},[35,73036,3053],{"class":359},[35,73038,73039],{"class":37,"line":17165},[35,73040,2528],{"class":359},[35,73042,73043],{"class":37,"line":17179},[35,73044,141],{"emptyLinePlaceholder":140},[35,73046,73047,73049],{"class":37,"line":17184},[35,73048,65441],{"class":51626},[35,73050,31792],{"class":359},[35,73052,73053,73055],{"class":37,"line":17189},[35,73054,65507],{"class":51626},[35,73056,15906],{"class":359},[35,73058,73059,73061,73063,73065,73067],{"class":37,"line":17203},[35,73060,55111],{"class":58},[35,73062,51763],{"class":359},[35,73064,769],{"class":58},[35,73066,51818],{"class":495},[35,73068,1655],{"class":359},[35,73070,73071,73073,73075,73077],{"class":37,"line":17215},[35,73072,57612],{"class":58},[35,73074,51763],{"class":359},[35,73076,24070],{"class":58},[35,73078,1655],{"class":359},[35,73080,73081,73083,73085,73087,73089],{"class":37,"line":17220},[35,73082,55248],{"class":58},[35,73084,51763],{"class":359},[35,73086,1043],{"class":58},[35,73088,51818],{"class":495},[35,73090,1655],{"class":359},[35,73092,73093,73095,73097,73099,73101,73103,73105,73107,73110,73112,73115,73117,73119],{"class":37,"line":17233},[35,73094,62303],{"class":58},[35,73096,51763],{"class":359},[35,73098,713],{"class":58},[35,73100,51818],{"class":495},[35,73102,51847],{"class":58},[35,73104,72585],{"class":58},[35,73106,499],{"class":359},[35,73108,73109],{"class":58},"228",[35,73111,12769],{"class":359},[35,73113,73114],{"class":58},"225",[35,73116,12769],{"class":359},[35,73118,73114],{"class":58},[35,73120,3053],{"class":359},[35,73122,73123,73126,73128,73130,73132],{"class":37,"line":17238},[35,73124,73125],{"class":58},"      padding-left",[35,73127,51763],{"class":359},[35,73129,372],{"class":58},[35,73131,51818],{"class":495},[35,73133,1655],{"class":359},[35,73135,73136,73138,73140,73142,73145,73147,73149],{"class":37,"line":17243},[35,73137,62186],{"class":58},[35,73139,51763],{"class":359},[35,73141,28449],{"class":58},[35,73143,73144],{"class":58}," linear",[35,73146,62193],{"class":58},[35,73148,1189],{"class":495},[35,73150,1655],{"class":359},[35,73152,73153],{"class":37,"line":17248},[35,73154,2528],{"class":359},[35,73156,73157],{"class":37,"line":17261},[35,73158,141],{"emptyLinePlaceholder":140},[35,73160,73161,73164,73166,73168],{"class":37,"line":17266},[35,73162,73163],{"class":51626},"    tbody",[35,73165,70470],{"class":51626},[35,73167,61266],{"class":48},[35,73169,15906],{"class":359},[35,73171,73172,73174,73176,73178,73180,73182,73184,73186,73188,73190],{"class":37,"line":32959},[35,73173,55210],{"class":58},[35,73175,51763],{"class":359},[35,73177,72648],{"class":58},[35,73179,499],{"class":359},[35,73181,72905],{"class":58},[35,73183,12769],{"class":359},[35,73185,72910],{"class":58},[35,73187,12769],{"class":359},[35,73189,72910],{"class":58},[35,73191,3053],{"class":359},[35,73193,73194,73196,73198,73200],{"class":37,"line":32965},[35,73195,62351],{"class":58},[35,73197,51763],{"class":359},[35,73199,62356],{"class":58},[35,73201,1655],{"class":359},[35,73203,73204],{"class":37,"line":32971},[35,73205,2528],{"class":359},[35,73207,73208],{"class":37,"line":32977},[35,73209,141],{"emptyLinePlaceholder":140},[35,73211,73212,73214,73216,73219,73221],{"class":37,"line":32983},[35,73213,73163],{"class":51626},[35,73215,70470],{"class":51626},[35,73217,73218],{"class":51626}," td",[35,73220,1759],{"class":51626},[35,73222,15906],{"class":359},[35,73224,73225,73227,73229,73231],{"class":37,"line":32994},[35,73226,55335],{"class":58},[35,73228,51763],{"class":359},[35,73230,61195],{"class":58},[35,73232,1655],{"class":359},[35,73234,73235,73237,73239,73241,73243],{"class":37,"line":33000},[35,73236,55097],{"class":58},[35,73238,51763],{"class":359},[35,73240,1401],{"class":58},[35,73242,51818],{"class":495},[35,73244,1655],{"class":359},[35,73246,73247,73249,73251,73253,73255],{"class":37,"line":33020},[35,73248,55111],{"class":58},[35,73250,51763],{"class":359},[35,73252,1319],{"class":58},[35,73254,51818],{"class":495},[35,73256,1655],{"class":359},[35,73258,73259,73261,73263,73265,73267],{"class":37,"line":33026},[35,73260,57685],{"class":58},[35,73262,51763],{"class":359},[35,73264,1319],{"class":58},[35,73266,51818],{"class":495},[35,73268,1655],{"class":359},[35,73270,73271,73273,73275,73277,73279],{"class":37,"line":33037},[35,73272,62403],{"class":58},[35,73274,51763],{"class":359},[35,73276,574],{"class":58},[35,73278,51818],{"class":495},[35,73280,1655],{"class":359},[35,73282,73283,73285,73287,73289],{"class":37,"line":33043},[35,73284,57742],{"class":58},[35,73286,51763],{"class":359},[35,73288,61168],{"class":58},[35,73290,1655],{"class":359},[35,73292,73293,73295,73297,73299],{"class":37,"line":33049},[35,73294,57612],{"class":58},[35,73296,51763],{"class":359},[35,73298,51918],{"class":58},[35,73300,1655],{"class":359},[35,73302,73303,73305,73307,73309],{"class":37,"line":33055},[35,73304,64296],{"class":58},[35,73306,51763],{"class":359},[35,73308,55063],{"class":58},[35,73310,1655],{"class":359},[35,73312,73313,73315,73317,73320],{"class":37,"line":33061},[35,73314,55210],{"class":58},[35,73316,51763],{"class":359},[35,73318,73319],{"class":58},"orange",[35,73321,1655],{"class":359},[35,73323,73324,73326,73328,73331,73333],{"class":37,"line":33067},[35,73325,55460],{"class":58},[35,73327,51763],{"class":359},[35,73329,73330],{"class":58},"12.5",[35,73332,51818],{"class":495},[35,73334,1655],{"class":359},[35,73336,73337],{"class":37,"line":33073},[35,73338,2528],{"class":359},[35,73340,73341,73343,73345],{"class":37,"line":33079},[35,73342,52743],{"class":359},[35,73344,416],{"class":51626},[35,73346,51633],{"class":359},[35,73348,73349,73351,73353],{"class":37,"line":33099},[35,73350,52111],{"class":359},[35,73352,51660],{"class":51626},[35,73354,51633],{"class":359},[35,73356,73357],{"class":37,"line":33105},[35,73358,141],{"emptyLinePlaceholder":140},[35,73360,73361,73363,73365],{"class":37,"line":33121},[35,73362,1404],{"class":359},[35,73364,52126],{"class":51626},[35,73366,51633],{"class":359},[35,73368,73369,73371,73373,73376,73378],{"class":37,"line":33127},[35,73370,52470],{"class":359},[35,73372,438],{"class":51626},[35,73374,73375],{"class":359},">学生就业统计表\u003C\u002F",[35,73377,438],{"class":51626},[35,73379,51633],{"class":359},[35,73381,73382,73384,73386,73388,73390,73392,73394,73396,73398],{"class":37,"line":33141},[35,73383,52470],{"class":359},[35,73385,66951],{"class":51626},[35,73387,53812],{"class":48},[35,73389,544],{"class":359},[35,73391,62990],{"class":306},[35,73393,69396],{"class":48},[35,73395,544],{"class":359},[35,73397,32102],{"class":306},[35,73399,51633],{"class":359},[35,73401,73402,73404,73406,73408,73410,73412,73414,73416,73418,73420,73422,73425,73427,73429,73431],{"class":37,"line":33147},[35,73403,51667],{"class":359},[35,73405,54147],{"class":51626},[35,73407,54150],{"class":48},[35,73409,544],{"class":359},[35,73411,63025],{"class":306},[35,73413,15254],{"class":48},[35,73415,544],{"class":359},[35,73417,69422],{"class":306},[35,73419,61346],{"class":48},[35,73421,544],{"class":359},[35,73423,73424],{"class":306},"\"姓名\"",[35,73426,53812],{"class":48},[35,73428,544],{"class":359},[35,73430,69422],{"class":306},[35,73432,51633],{"class":359},[35,73434,73435,73437,73439,73441,73443,73445,73447,73449,73451,73453,73455,73458,73460,73462,73464],{"class":37,"line":33162},[35,73436,51667],{"class":359},[35,73438,54147],{"class":51626},[35,73440,54150],{"class":48},[35,73442,544],{"class":359},[35,73444,63025],{"class":306},[35,73446,15254],{"class":48},[35,73448,544],{"class":359},[35,73450,69450],{"class":306},[35,73452,61346],{"class":48},[35,73454,544],{"class":359},[35,73456,73457],{"class":306},"\"年龄\"",[35,73459,53812],{"class":48},[35,73461,544],{"class":359},[35,73463,69450],{"class":306},[35,73465,51633],{"class":359},[35,73467,73468,73470,73472,73474,73476,73478,73480,73482,73484,73486,73488,73491,73493,73495,73497],{"class":37,"line":33168},[35,73469,51667],{"class":359},[35,73471,54147],{"class":51626},[35,73473,54150],{"class":48},[35,73475,544],{"class":359},[35,73477,63025],{"class":306},[35,73479,15254],{"class":48},[35,73481,544],{"class":359},[35,73483,69552],{"class":306},[35,73485,61346],{"class":48},[35,73487,544],{"class":359},[35,73489,73490],{"class":306},"\"薪资\"",[35,73492,53812],{"class":48},[35,73494,544],{"class":359},[35,73496,69552],{"class":306},[35,73498,51633],{"class":359},[35,73500,73501,73503,73505,73507,73509,73511,73513,73515,73517,73519,73521,73523],{"class":37,"line":33177},[35,73502,51667],{"class":359},[35,73504,69470],{"class":51626},[35,73506,15254],{"class":48},[35,73508,544],{"class":359},[35,73510,69477],{"class":306},[35,73512,15293],{"class":48},[35,73514,544],{"class":359},[35,73516,7986],{"class":306},[35,73518,53812],{"class":48},[35,73520,544],{"class":359},[35,73522,69477],{"class":306},[35,73524,51633],{"class":359},[35,73526,73527,73529,73531,73533,73535,73537,73539,73541],{"class":37,"line":33183},[35,73528,55560],{"class":359},[35,73530,69492],{"class":51626},[35,73532,66977],{"class":48},[35,73534,544],{"class":359},[35,73536,10295],{"class":306},[35,73538,69501],{"class":359},[35,73540,69492],{"class":51626},[35,73542,51633],{"class":359},[35,73544,73545,73547,73549,73551,73553,73555,73557,73559],{"class":37,"line":33192},[35,73546,55560],{"class":359},[35,73548,69492],{"class":51626},[35,73550,66977],{"class":48},[35,73552,544],{"class":359},[35,73554,10364],{"class":306},[35,73556,69520],{"class":359},[35,73558,69492],{"class":51626},[35,73560,51633],{"class":359},[35,73562,73563,73565,73567],{"class":37,"line":33198},[35,73564,52102],{"class":359},[35,73566,69470],{"class":51626},[35,73568,51633],{"class":359},[35,73570,73571,73573,73575,73577,73579,73581,73583,73585,73587,73589,73591,73593],{"class":37,"line":33204},[35,73572,51667],{"class":359},[35,73574,69470],{"class":51626},[35,73576,15254],{"class":48},[35,73578,544],{"class":359},[35,73580,69574],{"class":306},[35,73582,15293],{"class":48},[35,73584,544],{"class":359},[35,73586,7986],{"class":306},[35,73588,53812],{"class":48},[35,73590,544],{"class":359},[35,73592,69574],{"class":306},[35,73594,51633],{"class":359},[35,73596,73597,73599,73601,73603,73605,73607,73609,73611],{"class":37,"line":33213},[35,73598,55560],{"class":359},[35,73600,69492],{"class":51626},[35,73602,66977],{"class":48},[35,73604,544],{"class":359},[35,73606,69595],{"class":306},[35,73608,69598],{"class":359},[35,73610,69492],{"class":51626},[35,73612,51633],{"class":359},[35,73614,73615,73617,73619,73621,73623,73625,73627,73629],{"class":37,"line":33219},[35,73616,55560],{"class":359},[35,73618,69492],{"class":51626},[35,73620,66977],{"class":48},[35,73622,544],{"class":359},[35,73624,69615],{"class":306},[35,73626,69618],{"class":359},[35,73628,69492],{"class":51626},[35,73630,51633],{"class":359},[35,73632,73633,73635,73637,73639,73641,73643,73645,73647],{"class":37,"line":33230},[35,73634,55560],{"class":359},[35,73636,69492],{"class":51626},[35,73638,66977],{"class":48},[35,73640,544],{"class":359},[35,73642,69635],{"class":306},[35,73644,69638],{"class":359},[35,73646,69492],{"class":51626},[35,73648,51633],{"class":359},[35,73650,73651,73653,73655,73657,73659,73661,73663,73665],{"class":37,"line":33236},[35,73652,55560],{"class":359},[35,73654,69492],{"class":51626},[35,73656,66977],{"class":48},[35,73658,544],{"class":359},[35,73660,69655],{"class":306},[35,73662,69658],{"class":359},[35,73664,69492],{"class":51626},[35,73666,51633],{"class":359},[35,73668,73669,73671,73673,73675,73677,73679,73681,73683],{"class":37,"line":33255},[35,73670,55560],{"class":359},[35,73672,69492],{"class":51626},[35,73674,66977],{"class":48},[35,73676,544],{"class":359},[35,73678,69675],{"class":306},[35,73680,69678],{"class":359},[35,73682,69492],{"class":51626},[35,73684,51633],{"class":359},[35,73686,73687,73689,73691],{"class":37,"line":33261},[35,73688,52102],{"class":359},[35,73690,69470],{"class":51626},[35,73692,51633],{"class":359},[35,73694,73695,73697,73699],{"class":37,"line":33272},[35,73696,51667],{"class":359},[35,73698,54213],{"class":51626},[35,73700,51633],{"class":359},[35,73702,73703,73705,73707,73710,73712,73715,73717],{"class":37,"line":33278},[35,73704,55560],{"class":359},[35,73706,35],{"class":51626},[35,73708,73709],{"class":359},">+\u003C\u002F",[35,73711,35],{"class":51626},[35,73713,73714],{"class":359},">添加\u003C\u002F",[35,73716,54213],{"class":51626},[35,73718,51633],{"class":359},[35,73720,73721,73723,73725],{"class":37,"line":33298},[35,73722,52743],{"class":359},[35,73724,66951],{"class":51626},[35,73726,51633],{"class":359},[35,73728,73729,73731,73733,73735,73737,73739,73742,73744,73747,73749,73752,73754],{"class":37,"line":33314},[35,73730,52470],{"class":359},[35,73732,51937],{"class":51626},[35,73734,53812],{"class":48},[35,73736,544],{"class":359},[35,73738,62906],{"class":306},[35,73740,73741],{"class":359},">共有数据 \u003C",[35,73743,35],{"class":51626},[35,73745,73746],{"class":359},">0\u003C\u002F",[35,73748,35],{"class":51626},[35,73750,73751],{"class":359},"> 条\u003C\u002F",[35,73753,51937],{"class":51626},[35,73755,51633],{"class":359},[35,73757,73758,73760,73762],{"class":37,"line":33320},[35,73759,52470],{"class":359},[35,73761,633],{"class":51626},[35,73763,51633],{"class":359},[35,73765,73766,73768,73770],{"class":37,"line":33334},[35,73767,51667],{"class":359},[35,73769,636],{"class":51626},[35,73771,51633],{"class":359},[35,73773,73774,73776,73778],{"class":37,"line":33340},[35,73775,55560],{"class":359},[35,73777,639],{"class":51626},[35,73779,51633],{"class":359},[35,73781,73782,73784,73786,73789,73791],{"class":37,"line":33346},[35,73783,55628],{"class":359},[35,73785,642],{"class":51626},[35,73787,73788],{"class":359},">ID\u003C\u002F",[35,73790,642],{"class":51626},[35,73792,51633],{"class":359},[35,73794,73795,73797,73799,73801,73803],{"class":37,"line":33357},[35,73796,55628],{"class":359},[35,73798,642],{"class":51626},[35,73800,69781],{"class":359},[35,73802,642],{"class":51626},[35,73804,51633],{"class":359},[35,73806,73807,73809,73811,73813,73815],{"class":37,"line":33363},[35,73808,55628],{"class":359},[35,73810,642],{"class":51626},[35,73812,69794],{"class":359},[35,73814,642],{"class":51626},[35,73816,51633],{"class":359},[35,73818,73819,73821,73823,73825,73827],{"class":37,"line":33369},[35,73820,55628],{"class":359},[35,73822,642],{"class":51626},[35,73824,69807],{"class":359},[35,73826,642],{"class":51626},[35,73828,51633],{"class":359},[35,73830,73831,73833,73835,73837,73839],{"class":37,"line":33379},[35,73832,55628],{"class":359},[35,73834,642],{"class":51626},[35,73836,69820],{"class":359},[35,73838,642],{"class":51626},[35,73840,51633],{"class":359},[35,73842,73843,73845,73847,73849,73851],{"class":37,"line":33385},[35,73844,55628],{"class":359},[35,73846,642],{"class":51626},[35,73848,69833],{"class":359},[35,73850,642],{"class":51626},[35,73852,51633],{"class":359},[35,73854,73855,73857,73859,73862,73864],{"class":37,"line":33396},[35,73856,55628],{"class":359},[35,73858,642],{"class":51626},[35,73860,73861],{"class":359},">录入时间\u003C\u002F",[35,73863,642],{"class":51626},[35,73865,51633],{"class":359},[35,73867,73868,73870,73872,73874,73876],{"class":37,"line":33402},[35,73869,55628],{"class":359},[35,73871,642],{"class":51626},[35,73873,69846],{"class":359},[35,73875,642],{"class":51626},[35,73877,51633],{"class":359},[35,73879,73880,73882,73884],{"class":37,"line":33412},[35,73881,55733],{"class":359},[35,73883,639],{"class":51626},[35,73885,51633],{"class":359},[35,73887,73888,73890,73892],{"class":37,"line":33417},[35,73889,52102],{"class":359},[35,73891,636],{"class":51626},[35,73893,51633],{"class":359},[35,73895,73896,73898,73900],{"class":37,"line":33423},[35,73897,51667],{"class":359},[35,73899,680],{"class":51626},[35,73901,51633],{"class":359},[35,73903,73904],{"class":37,"line":33472},[35,73905,73906],{"class":41},"      \u003C!-- \u003Ctr>\n",[35,73908,73909],{"class":37,"line":33519},[35,73910,73911],{"class":41},"        \u003Ctd>1\u003C\u002Ftd>\n",[35,73913,73914],{"class":37,"line":33524},[35,73915,73911],{"class":41},[35,73917,73918],{"class":37,"line":33530},[35,73919,73911],{"class":41},[35,73921,73922],{"class":37,"line":33549},[35,73923,73911],{"class":41},[35,73925,73926],{"class":37,"line":33555},[35,73927,73911],{"class":41},[35,73929,73930],{"class":37,"line":33575},[35,73931,73911],{"class":41},[35,73933,73934],{"class":37,"line":33581},[35,73935,73911],{"class":41},[35,73937,73938],{"class":37,"line":33587},[35,73939,73940],{"class":41},"        \u003Ctd>\n",[35,73942,73943],{"class":37,"line":33597},[35,73944,73945],{"class":41},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[35,73947,73948],{"class":37,"line":33602},[35,73949,73950],{"class":41},"        \u003C\u002Ftd>\n",[35,73952,73953],{"class":37,"line":33608},[35,73954,73955],{"class":41},"      \u003C\u002Ftr> -->\n",[35,73957,73958,73960,73962],{"class":37,"line":33624},[35,73959,52102],{"class":359},[35,73961,680],{"class":51626},[35,73963,51633],{"class":359},[35,73965,73966,73968,73970],{"class":37,"line":33669},[35,73967,52743],{"class":359},[35,73969,633],{"class":51626},[35,73971,51633],{"class":359},[35,73973,73974,73976,73978],{"class":37,"line":33675},[35,73975,52470],{"class":359},[35,73977,52139],{"class":51626},[35,73979,51633],{"class":359},[35,73981,73982],{"class":37,"line":33681},[35,73983,73984],{"class":41},"    \u002F\u002F const initData = [{\n",[35,73986,73987],{"class":37,"line":33687},[35,73988,73989],{"class":41},"    \u002F\u002F   unameId: 1,\n",[35,73991,73992],{"class":37,"line":33698},[35,73993,73994],{"class":41},"    \u002F\u002F   uname: '华晨宇',\n",[35,73996,73997],{"class":37,"line":33704},[35,73998,73999],{"class":41},"    \u002F\u002F   age: 22,\n",[35,74001,74002],{"class":37,"line":33710},[35,74003,74004],{"class":41},"    \u002F\u002F   salary: 12000,\n",[35,74006,74007],{"class":37,"line":33716},[35,74008,74009],{"class":41},"    \u002F\u002F   gender: '男',\n",[35,74011,74012],{"class":37,"line":33734},[35,74013,74014],{"class":41},"    \u002F\u002F   city: '北京',\n",[35,74016,74017],{"class":37,"line":33748},[35,74018,74019],{"class":41},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[35,74021,74022],{"class":37,"line":33757},[35,74023,74024],{"class":41},"    \u002F\u002F }]\n",[35,74026,74027],{"class":37,"line":33766},[35,74028,74029],{"class":41},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[35,74031,74032],{"class":37,"line":33775},[35,74033,74034],{"class":41},"    \u002F\u002F 1.渲染业务\n",[35,74036,74037],{"class":37,"line":33784},[35,74038,74039],{"class":41},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[35,74041,74042],{"class":37,"line":33790},[35,74043,74044],{"class":41},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[35,74046,74047],{"class":37,"line":33796},[35,74048,74049],{"class":41},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[35,74051,74052],{"class":37,"line":33804},[35,74053,141],{"emptyLinePlaceholder":140},[35,74055,74056],{"class":37,"line":33809},[35,74057,74058],{"class":41},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[35,74060,74061],{"class":37,"line":33815},[35,74062,74063],{"class":41},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[35,74065,74066,74068,74070,74072],{"class":37,"line":33826},[35,74067,11555],{"class":495},[35,74069,58021],{"class":58},[35,74071,13898],{"class":495},[35,74073,52164],{"class":359},[35,74075,74076,74079,74081],{"class":37,"line":33832},[35,74077,74078],{"class":359},"    console.",[35,74080,58573],{"class":48},[35,74082,52738],{"class":359},[35,74084,74085],{"class":37,"line":33852},[35,74086,141],{"emptyLinePlaceholder":140},[35,74088,74089],{"class":37,"line":33858},[35,74090,74091],{"class":41},"    \u002F\u002F 时间函数\n",[35,74093,74094,74096,74099],{"class":37,"line":33864},[35,74095,70410],{"class":495},[35,74097,74098],{"class":48}," getTime",[35,74100,11187],{"class":359},[35,74102,74103,74105,74108,74110,74112,74115],{"class":37,"line":33870},[35,74104,58554],{"class":495},[35,74106,74107],{"class":58}," date",[35,74109,13898],{"class":495},[35,74111,11912],{"class":495},[35,74113,74114],{"class":48}," Date",[35,74116,2317],{"class":359},[35,74118,74119,74121,74123,74125,74128,74131,74133,74135,74137,74140,74143,74145,74147,74149,74151,74153,74155,74157],{"class":37,"line":33887},[35,74120,58554],{"class":495},[35,74122,16425],{"class":58},[35,74124,13898],{"class":495},[35,74126,74127],{"class":359}," date.",[35,74129,74130],{"class":48},"getHours",[35,74132,13384],{"class":359},[35,74134,1404],{"class":495},[35,74136,2379],{"class":58},[35,74138,74139],{"class":495}," ?",[35,74141,74142],{"class":306}," '0'",[35,74144,45892],{"class":495},[35,74146,74127],{"class":359},[35,74148,74130],{"class":48},[35,74150,13384],{"class":359},[35,74152,1353],{"class":495},[35,74154,74127],{"class":359},[35,74156,74130],{"class":48},[35,74158,2317],{"class":359},[35,74160,74161,74163,74166,74168,74170,74173,74175,74177,74179,74181,74183,74185,74187,74189,74191,74193,74195,74197],{"class":37,"line":33893},[35,74162,58554],{"class":495},[35,74164,74165],{"class":58}," m",[35,74167,13898],{"class":495},[35,74169,74127],{"class":359},[35,74171,74172],{"class":48},"getMinutes",[35,74174,13384],{"class":359},[35,74176,1404],{"class":495},[35,74178,2379],{"class":58},[35,74180,74139],{"class":495},[35,74182,74142],{"class":306},[35,74184,45892],{"class":495},[35,74186,74127],{"class":359},[35,74188,74172],{"class":48},[35,74190,13384],{"class":359},[35,74192,1353],{"class":495},[35,74194,74127],{"class":359},[35,74196,74172],{"class":48},[35,74198,2317],{"class":359},[35,74200,74201,74203,74205,74207,74209,74212,74214,74216,74218,74220,74222,74224,74226,74228,74230,74232,74234,74236],{"class":37,"line":33899},[35,74202,58554],{"class":495},[35,74204,8762],{"class":58},[35,74206,13898],{"class":495},[35,74208,74127],{"class":359},[35,74210,74211],{"class":48},"getSeconds",[35,74213,13384],{"class":359},[35,74215,1404],{"class":495},[35,74217,2379],{"class":58},[35,74219,74139],{"class":495},[35,74221,74142],{"class":306},[35,74223,45892],{"class":495},[35,74225,74127],{"class":359},[35,74227,74211],{"class":48},[35,74229,13384],{"class":359},[35,74231,1353],{"class":495},[35,74233,74127],{"class":359},[35,74235,74211],{"class":48},[35,74237,2317],{"class":359},[35,74239,74240,74242,74245,74247,74249,74252,74254,74257,74259,74262,74264,74266,74269,74271,74273,74275,74277,74279,74281,74284,74286,74289,74291,74294,74296,74298,74300],{"class":37,"line":33905},[35,74241,58554],{"class":495},[35,74243,74244],{"class":58}," str",[35,74246,13898],{"class":495},[35,74248,63229],{"class":306},[35,74250,74251],{"class":359},"date",[35,74253,1052],{"class":306},[35,74255,74256],{"class":48},"getFullYear",[35,74258,2767],{"class":306},[35,74260,74261],{"class":306},"}\u002F${",[35,74263,74251],{"class":359},[35,74265,1052],{"class":306},[35,74267,74268],{"class":48},"getMonth",[35,74270,13384],{"class":306},[35,74272,975],{"class":495},[35,74274,25450],{"class":58},[35,74276,74261],{"class":306},[35,74278,74251],{"class":359},[35,74280,1052],{"class":306},[35,74282,74283],{"class":48},"getDate",[35,74285,2767],{"class":306},[35,74287,74288],{"class":306},"} ${",[35,74290,909],{"class":359},[35,74292,74293],{"class":306},"}:${",[35,74295,1038],{"class":359},[35,74297,74293],{"class":306},[35,74299,1189],{"class":359},[35,74301,74302],{"class":306},"}`\n",[35,74304,74305,74308],{"class":37,"line":33911},[35,74306,74307],{"class":495},"      return",[35,74309,74310],{"class":359}," str\n",[35,74312,74313],{"class":37,"line":33917},[35,74314,2528],{"class":359},[35,74316,74317],{"class":37,"line":33944},[35,74318,74319],{"class":41},"    \u002F\u002F 渲染函数\n",[35,74321,74322,74324,74326,74328,74330,74332,74334,74336],{"class":37,"line":33968},[35,74323,11555],{"class":495},[35,74325,70073],{"class":58},[35,74327,13898],{"class":495},[35,74329,54722],{"class":359},[35,74331,54725],{"class":48},[35,74333,499],{"class":359},[35,74335,70084],{"class":306},[35,74337,505],{"class":359},[35,74339,74340,74342,74344],{"class":37,"line":33974},[35,74341,70410],{"class":495},[35,74343,70413],{"class":48},[35,74345,11187],{"class":359},[35,74347,74348],{"class":37,"line":33980},[35,74349,74350],{"class":41},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[35,74352,74353],{"class":37,"line":33986},[35,74354,74355],{"class":41},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[35,74357,74358,74360,74363,74365,74367,74370,74372,74374,74376,74379,74381,74384],{"class":37,"line":33997},[35,74359,58554],{"class":495},[35,74361,74362],{"class":58}," trArr",[35,74364,13898],{"class":495},[35,74366,52291],{"class":359},[35,74368,74369],{"class":48},"map",[35,74371,499],{"class":359},[35,74373,54775],{"class":495},[35,74375,2012],{"class":359},[35,74377,74378],{"class":5550},"ele",[35,74380,12769],{"class":359},[35,74382,74383],{"class":5550},"index",[35,74385,12776],{"class":359},[35,74387,74388,74390],{"class":37,"line":34008},[35,74389,15086],{"class":495},[35,74391,70494],{"class":306},[35,74393,74394],{"class":37,"line":34014},[35,74395,74396],{"class":306},"      \u003Ctr>\n",[35,74398,74399,74401,74403,74405,74408],{"class":37,"line":34031},[35,74400,70499],{"class":306},[35,74402,74378],{"class":359},[35,74404,1052],{"class":306},[35,74406,74407],{"class":359},"unameId",[35,74409,70514],{"class":306},[35,74411,74412,74414,74416,74418,74420],{"class":37,"line":34054},[35,74413,70499],{"class":306},[35,74415,74378],{"class":359},[35,74417,1052],{"class":306},[35,74419,191],{"class":359},[35,74421,70514],{"class":306},[35,74423,74424,74426,74428,74430,74432],{"class":37,"line":34077},[35,74425,70499],{"class":306},[35,74427,74378],{"class":359},[35,74429,1052],{"class":306},[35,74431,70546],{"class":359},[35,74433,70514],{"class":306},[35,74435,74436,74438,74440,74442,74444],{"class":37,"line":34083},[35,74437,70499],{"class":306},[35,74439,74378],{"class":359},[35,74441,1052],{"class":306},[35,74443,70563],{"class":359},[35,74445,70514],{"class":306},[35,74447,74448,74450,74452,74454,74456],{"class":37,"line":34088},[35,74449,70499],{"class":306},[35,74451,74378],{"class":359},[35,74453,1052],{"class":306},[35,74455,70580],{"class":359},[35,74457,70514],{"class":306},[35,74459,74460,74462,74464,74466,74468],{"class":37,"line":34097},[35,74461,70499],{"class":306},[35,74463,74378],{"class":359},[35,74465,1052],{"class":306},[35,74467,70597],{"class":359},[35,74469,70514],{"class":306},[35,74471,74472,74474,74476,74478,74480],{"class":37,"line":34107},[35,74473,70499],{"class":306},[35,74475,74378],{"class":359},[35,74477,1052],{"class":306},[35,74479,2728],{"class":359},[35,74481,70514],{"class":306},[35,74483,74484],{"class":37,"line":34113},[35,74485,73940],{"class":306},[35,74487,74488,74491,74493],{"class":37,"line":34118},[35,74489,74490],{"class":306},"          \u003Ca href=\"#\" data-id=\"${",[35,74492,74383],{"class":359},[35,74494,74495],{"class":306},"}\">删除\u003C\u002Fa>\n",[35,74497,74498],{"class":37,"line":34124},[35,74499,73950],{"class":306},[35,74501,74502],{"class":37,"line":34137},[35,74503,74504],{"class":306},"      \u003C\u002Ftr>\n",[35,74506,74507],{"class":37,"line":34143},[35,74508,74509],{"class":306},"  `\n",[35,74511,74512],{"class":37,"line":34154},[35,74513,65141],{"class":359},[35,74515,74516,74518,74520],{"class":37,"line":34165},[35,74517,58570],{"class":359},[35,74519,58573],{"class":48},[35,74521,74522],{"class":359},"(trArr)\n",[35,74524,74525],{"class":37,"line":34184},[35,74526,141],{"emptyLinePlaceholder":140},[35,74528,74529],{"class":37,"line":49844},[35,74530,74531],{"class":41},"      \u002F\u002F (2) 把数组转换为字符串join\n",[35,74533,74534],{"class":37,"line":49849},[35,74535,74536],{"class":41},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[35,74538,74539,74541,74543,74546,74549,74551,74554],{"class":37,"line":49858},[35,74540,70425],{"class":359},[35,74542,544],{"class":495},[35,74544,74545],{"class":359}," trArr.",[35,74547,74548],{"class":48},"join",[35,74550,499],{"class":359},[35,74552,74553],{"class":306},"''",[35,74555,505],{"class":359},[35,74557,74558],{"class":37,"line":49867},[35,74559,74560],{"class":41},"      \u002F\u002F 显示共有几条\n",[35,74562,74563,74565,74567,74569,74572,74575,74577,74579],{"class":37,"line":49872},[35,74564,56097],{"class":359},[35,74566,54725],{"class":48},[35,74568,499],{"class":359},[35,74570,74571],{"class":306},"'.total span'",[35,74573,74574],{"class":359},").innerHTML ",[35,74576,544],{"class":495},[35,74578,52291],{"class":359},[35,74580,56157],{"class":58},[35,74582,74583],{"class":37,"line":49877},[35,74584,2528],{"class":359},[35,74586,74587],{"class":37,"line":49882},[35,74588,74589],{"class":41},"    \u002F\u002F render()\n",[35,74591,74592],{"class":37,"line":49895},[35,74593,141],{"emptyLinePlaceholder":140},[35,74595,74596],{"class":37,"line":49900},[35,74597,74598],{"class":41},"    \u002F\u002F 获取DOM对象\n",[35,74600,74601,74603,74605,74607,74609,74611,74613,74615],{"class":37,"line":49909},[35,74602,11555],{"class":495},[35,74604,70147],{"class":58},[35,74606,13898],{"class":495},[35,74608,54722],{"class":359},[35,74610,54725],{"class":48},[35,74612,499],{"class":359},[35,74614,70158],{"class":306},[35,74616,505],{"class":359},[35,74618,74619,74621,74623,74625,74627,74629,74631,74633],{"class":37,"line":49918},[35,74620,11555],{"class":495},[35,74622,69974],{"class":58},[35,74624,13898],{"class":495},[35,74626,54722],{"class":359},[35,74628,54725],{"class":48},[35,74630,499],{"class":359},[35,74632,69985],{"class":306},[35,74634,505],{"class":359},[35,74636,74637,74639,74641,74643,74645,74647,74649,74651],{"class":37,"line":49935},[35,74638,11555],{"class":495},[35,74640,16023],{"class":58},[35,74642,13898],{"class":495},[35,74644,54722],{"class":359},[35,74646,54725],{"class":48},[35,74648,499],{"class":359},[35,74650,70004],{"class":306},[35,74652,505],{"class":359},[35,74654,74656,74658,74660,74662,74664,74666,74668,74670],{"class":37,"line":74655},231,[35,74657,11555],{"class":495},[35,74659,70033],{"class":58},[35,74661,13898],{"class":495},[35,74663,54722],{"class":359},[35,74665,54725],{"class":48},[35,74667,499],{"class":359},[35,74669,70044],{"class":306},[35,74671,505],{"class":359},[35,74673,74675,74677,74679,74681,74683,74685,74687,74689],{"class":37,"line":74674},232,[35,74676,11555],{"class":495},[35,74678,70013],{"class":58},[35,74680,13898],{"class":495},[35,74682,54722],{"class":359},[35,74684,54725],{"class":48},[35,74686,499],{"class":359},[35,74688,70024],{"class":306},[35,74690,505],{"class":359},[35,74692,74694,74696,74698,74700,74702,74704,74706,74708],{"class":37,"line":74693},233,[35,74695,11555],{"class":495},[35,74697,70053],{"class":58},[35,74699,13898],{"class":495},[35,74701,54722],{"class":359},[35,74703,54725],{"class":48},[35,74705,499],{"class":359},[35,74707,70064],{"class":306},[35,74709,505],{"class":359},[35,74711,74713],{"class":37,"line":74712},234,[35,74714,141],{"emptyLinePlaceholder":140},[35,74716,74718],{"class":37,"line":74717},235,[35,74719,74720],{"class":41},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[35,74722,74724,74726,74728,74730,74732,74734,74736,74738,74740],{"class":37,"line":74723},236,[35,74725,70165],{"class":359},[35,74727,58139],{"class":48},[35,74729,499],{"class":359},[35,74731,70172],{"class":306},[35,74733,12769],{"class":359},[35,74735,54775],{"class":495},[35,74737,2012],{"class":359},[35,74739,571],{"class":5550},[35,74741,12776],{"class":359},[35,74743,74745],{"class":37,"line":74744},237,[35,74746,74747],{"class":41},"      \u002F\u002F 禁止浏览器跳转\n",[35,74749,74751,74753,74755],{"class":37,"line":74750},238,[35,74752,70192],{"class":359},[35,74754,70195],{"class":48},[35,74756,2317],{"class":359},[35,74758,74760],{"class":37,"line":74759},239,[35,74761,74762],{"class":41},"      \u002F\u002F 非空判断\n",[35,74764,74766],{"class":37,"line":74765},240,[35,74767,74768],{"class":41},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[35,74770,74772],{"class":37,"line":74771},241,[35,74773,74774],{"class":41},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[35,74776,74778,74780,74782,74784,74787,74789,74792,74795,74797,74799],{"class":37,"line":74777},242,[35,74779,54806],{"class":495},[35,74781,2012],{"class":359},[35,74783,722],{"class":495},[35,74785,74786],{"class":359},"uname.value ",[35,74788,71682],{"class":495},[35,74790,74791],{"class":495}," !",[35,74793,74794],{"class":359},"age.value ",[35,74796,71682],{"class":495},[35,74798,74791],{"class":495},[35,74800,74801],{"class":359},"salary.value) {\n",[35,74803,74805,74807,74809,74811,74813],{"class":37,"line":74804},243,[35,74806,15086],{"class":495},[35,74808,70266],{"class":48},[35,74810,499],{"class":359},[35,74812,70271],{"class":306},[35,74814,505],{"class":359},[35,74816,74818],{"class":37,"line":74817},244,[35,74819,52724],{"class":359},[35,74821,74823,74825,74827],{"class":37,"line":74822},245,[35,74824,58333],{"class":359},[35,74826,52210],{"class":48},[35,74828,74829],{"class":359},"({\n",[35,74831,74833],{"class":37,"line":74832},246,[35,74834,74835],{"class":41},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[35,74837,74839],{"class":37,"line":74838},247,[35,74840,74841],{"class":41},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[35,74843,74845],{"class":37,"line":74844},248,[35,74846,74847],{"class":41},"        \u002F\u002F 对象的序号应为数组长度+1\n",[35,74849,74851],{"class":37,"line":74850},249,[35,74852,74853],{"class":41},"        \u002F\u002F unameId: arr.length + 1,\n",[35,74855,74857],{"class":37,"line":74856},250,[35,74858,141],{"emptyLinePlaceholder":140},[35,74860,74862],{"class":37,"line":74861},251,[35,74863,74864],{"class":41},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[35,74866,74868],{"class":37,"line":74867},252,[35,74869,74870],{"class":41},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[35,74872,74874],{"class":37,"line":74873},253,[35,74875,74876],{"class":41},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[35,74878,74880],{"class":37,"line":74879},254,[35,74881,74882],{"class":41},"        \u002F\u002F 0当假看\n",[35,74884,74886,74889,74891,74893,74896,74898,74900,74902,74905,74907,74909,74912,74914],{"class":37,"line":74885},255,[35,74887,74888],{"class":359},"        unameId: arr.",[35,74890,52294],{"class":58},[35,74892,74139],{"class":495},[35,74894,74895],{"class":359}," arr[arr.",[35,74897,52294],{"class":58},[35,74899,52597],{"class":495},[35,74901,25450],{"class":58},[35,74903,74904],{"class":359},"].unameId ",[35,74906,975],{"class":495},[35,74908,25450],{"class":58},[35,74910,74911],{"class":495}," :",[35,74913,25450],{"class":58},[35,74915,31792],{"class":359},[35,74917,74919],{"class":37,"line":74918},256,[35,74920,70319],{"class":359},[35,74922,74924],{"class":37,"line":74923},257,[35,74925,70324],{"class":359},[35,74927,74929],{"class":37,"line":74928},258,[35,74930,70334],{"class":359},[35,74932,74934],{"class":37,"line":74933},259,[35,74935,70329],{"class":359},[35,74937,74939],{"class":37,"line":74938},260,[35,74940,74941],{"class":359},"        city: city.value,\n",[35,74943,74945],{"class":37,"line":74944},261,[35,74946,74947],{"class":41},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[35,74949,74951],{"class":37,"line":74950},262,[35,74952,74953],{"class":41},"        \u002F\u002F time: new Date().toDateString()\n",[35,74955,74957,74960,74963],{"class":37,"line":74956},263,[35,74958,74959],{"class":359},"        time: ",[35,74961,74962],{"class":48},"getTime",[35,74964,2317],{"class":359},[35,74966,74968],{"class":37,"line":74967},264,[35,74969,65141],{"class":359},[35,74971,74973],{"class":37,"line":74972},265,[35,74974,74975],{"class":41},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[35,74977,74979,74981],{"class":37,"line":74978},266,[35,74980,70394],{"class":48},[35,74982,2317],{"class":359},[35,74984,74986,74988,74990,74992,74994],{"class":37,"line":74985},267,[35,74987,70377],{"class":58},[35,74989,1052],{"class":359},[35,74991,70382],{"class":48},[35,74993,13384],{"class":359},[35,74995,74996],{"class":41},"\u002F\u002F重置表单\n",[35,74998,75000],{"class":37,"line":74999},268,[35,75001,75002],{"class":41},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[35,75004,75006,75009,75011,75013,75016,75018,75020,75022,75024],{"class":37,"line":75005},269,[35,75007,75008],{"class":359},"      localStorage.",[35,75010,71979],{"class":48},[35,75012,499],{"class":359},[35,75014,75015],{"class":306},"'data'",[35,75017,12769],{"class":359},[35,75019,71989],{"class":58},[35,75021,1052],{"class":359},[35,75023,71994],{"class":48},[35,75025,75026],{"class":359},"(arr))\n",[35,75028,75030],{"class":37,"line":75029},270,[35,75031,33787],{"class":359},[35,75033,75035],{"class":37,"line":75034},271,[35,75036,141],{"emptyLinePlaceholder":140},[35,75038,75040],{"class":37,"line":75039},272,[35,75041,75042],{"class":41},"    \u002F\u002F 3.删除业务\n",[35,75044,75046],{"class":37,"line":75045},273,[35,75047,75048],{"class":41},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[35,75050,75052,75054,75056,75058,75060,75062,75064,75066,75068],{"class":37,"line":75051},274,[35,75053,70666],{"class":359},[35,75055,58139],{"class":48},[35,75057,499],{"class":359},[35,75059,58144],{"class":306},[35,75061,12769],{"class":359},[35,75063,54775],{"class":495},[35,75065,2012],{"class":359},[35,75067,571],{"class":5550},[35,75069,12776],{"class":359},[35,75071,75073],{"class":37,"line":75072},275,[35,75074,75075],{"class":41},"      \u002F\u002F 判断是否点击的是删除按钮\n",[35,75077,75079,75081,75083,75085,75087],{"class":37,"line":75078},276,[35,75080,54806],{"class":495},[35,75082,67360],{"class":359},[35,75084,54812],{"class":495},[35,75086,68582],{"class":306},[35,75088,12776],{"class":359},[35,75090,75092],{"class":37,"line":75091},277,[35,75093,75094],{"class":41},"        \u002F\u002F alert(1)\n",[35,75096,75098],{"class":37,"line":75097},278,[35,75099,75100],{"class":41},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[35,75102,75104],{"class":37,"line":75103},279,[35,75105,75106],{"class":41},"        \u002F\u002F console.log(e.target)\n",[35,75108,75110],{"class":37,"line":75109},280,[35,75111,75112],{"class":41},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[35,75114,75116],{"class":37,"line":75115},281,[35,75117,141],{"emptyLinePlaceholder":140},[35,75119,75121],{"class":37,"line":75120},282,[35,75122,75123],{"class":41},"        \u002F\u002F 确认框，确然是否真的要删除\n",[35,75125,75127],{"class":37,"line":75126},283,[35,75128,75129],{"class":41},"        \u002F\u002F confirm()为确认框\n",[35,75131,75133],{"class":37,"line":75132},284,[35,75134,75135],{"class":41},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[35,75137,75139,75141,75143,75146,75148,75151],{"class":37,"line":75138},285,[35,75140,2837],{"class":495},[35,75142,2012],{"class":359},[35,75144,75145],{"class":48},"confirm",[35,75147,499],{"class":359},[35,75149,75150],{"class":306},"'您确定要删除这条数据吗？'",[35,75152,75153],{"class":359},")) {\n",[35,75155,75157,75160,75162,75164,75166],{"class":37,"line":75156},286,[35,75158,75159],{"class":359},"          arr.",[35,75161,58336],{"class":48},[35,75163,70719],{"class":359},[35,75165,713],{"class":58},[35,75167,505],{"class":359},[35,75169,75171],{"class":37,"line":75170},287,[35,75172,75173],{"class":41},"          \u002F\u002F 3.4 重新渲染页面\n",[35,75175,75177,75180],{"class":37,"line":75176},288,[35,75178,75179],{"class":48},"          render",[35,75181,2317],{"class":359},[35,75183,75185],{"class":37,"line":75184},289,[35,75186,75187],{"class":41},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[35,75189,75191,75194,75196,75198,75200,75202,75204,75206,75208],{"class":37,"line":75190},290,[35,75192,75193],{"class":359},"          localStorage.",[35,75195,71979],{"class":48},[35,75197,499],{"class":359},[35,75199,75015],{"class":306},[35,75201,12769],{"class":359},[35,75203,71989],{"class":58},[35,75205,1052],{"class":359},[35,75207,71994],{"class":48},[35,75209,75026],{"class":359},[35,75211,75213],{"class":37,"line":75212},291,[35,75214,2869],{"class":359},[35,75216,75218],{"class":37,"line":75217},292,[35,75219,52724],{"class":359},[35,75221,75223],{"class":37,"line":75222},293,[35,75224,141],{"emptyLinePlaceholder":140},[35,75226,75228],{"class":37,"line":75227},294,[35,75229,33787],{"class":359},[35,75231,75233],{"class":37,"line":75232},295,[35,75234,141],{"emptyLinePlaceholder":140},[35,75236,75238,75240,75242],{"class":37,"line":75237},296,[35,75239,52743],{"class":359},[35,75241,52139],{"class":51626},[35,75243,51633],{"class":359},[35,75245,75247,75249,75251],{"class":37,"line":75246},297,[35,75248,52111],{"class":359},[35,75250,52126],{"class":51626},[35,75252,51633],{"class":359},[35,75254,75256],{"class":37,"line":75255},298,[35,75257,141],{"emptyLinePlaceholder":140},[35,75259,75261,75263,75265],{"class":37,"line":75260},299,[35,75262,52111],{"class":359},[35,75264,50961],{"class":51626},[35,75266,51633],{"class":359},[438,75268,75270],{"id":75269},"_36-正则表达式","3.6 正则表达式",[21,75272,75273],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[21,75275,75276],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[21,75278,75279],{},"正则表达式的作用：",[1501,75281,75282,75289,75295],{},[17,75283,75284,75285,75288],{},"表单验证（ ",[645,75286,75287],{},"匹配"," ）",[17,75290,75291,75292,75288],{},"过滤敏感词（ ",[645,75293,75294],{},"替换",[17,75296,75297,75298,75288],{},"字符串中提取我们想要的部分（ ",[645,75299,75300],{},"提取",[465,75302,75304],{"id":75303},"_361-语法","3.6.1 语法",[21,75306,75307],{},"正则表达式使用步骤：",[14,75309,75310,75313],{},[17,75311,75312],{},"定义规则",[17,75314,75315],{},"查找是否匹配",[21,75317,75318],{},"正则表达式里边不需要写引号",[21,75320,75321],{},[1823,75322],{"alt":30,"src":75323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[21,75325,75326],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[21,75328,75329],{},"reg.test(str)",[21,75331,75332],{},[1823,75333],{"alt":30,"src":75334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[21,75336,75337],{},[1823,75338],{"alt":30,"src":75339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[465,75341,75343],{"id":75342},"_362-元字符","3.6.2 元字符",[14,75345,75346,75349,75352,75355,75362],{},[17,75347,75348],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[17,75350,75351],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[17,75353,75354],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[17,75356,75357,75358],{},"正则验证工具：",[734,75359,75360],{"href":75360,"rel":75361},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24198],[17,75363,75364],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22332,75366,75368],{"id":75367},"_3621-边界符","3.6.2.1 边界符",[21,75370,75371],{},[1823,75372],{"alt":30,"src":75373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[21,75375,75376],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[21,75378,75379],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[21,75381,75382],{},"只匹配一次",[21,75384,75385],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22332,75387,75389],{"id":75388},"_3622-量词","3.6.2.2 量词",[21,75391,75392],{},[1823,75393],{"alt":30,"src":75394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[21,75396,75397],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22332,75399,75401],{"id":75400},"_3623-元字符","3.6.2.3 元字符",[21,75403,75404],{},[1823,75405],{"alt":30,"src":75406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[21,75408,75409],{},"匹配的是a或b或c []只选一个",[21,75411,75412],{},[1823,75413],{"alt":30,"src":75414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[21,75416,75417],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[21,75419,75420],{},[1823,75421],{"alt":30,"src":75422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[21,75424,75425],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[21,75427,75428],{},[1823,75429],{"alt":30,"src":75430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[25,75432,75434],{"className":50959,"code":75433,"language":50961,"meta":30,"style":30},"\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",[32,75435,75436,75446,75460,75464,75472,75486,75506,75518,75526,75530,75538,75546,75551,75582,75609,75637,75641,75646,75674,75705,75710,75715,75746,75778,75810,75814,75819,75850,75880,75910,75914,75919,75950,75981,76011,76041,76045,76050,76083,76087,76092,76123,76154,76158,76163,76194,76224,76255,76259,76264,76296,76327,76358,76385,76416,76448,76481,76512,76543,76575,76606,76614,76622,76626],{"__ignoreMap":30},[35,75437,75438,75440,75442,75444],{"class":37,"line":38},[35,75439,51623],{"class":359},[35,75441,51627],{"class":51626},[35,75443,51630],{"class":48},[35,75445,51633],{"class":359},[35,75447,75448,75450,75452,75454,75456,75458],{"class":37,"line":45},[35,75449,1404],{"class":359},[35,75451,50961],{"class":51626},[35,75453,51642],{"class":48},[35,75455,544],{"class":359},[35,75457,51647],{"class":306},[35,75459,51633],{"class":359},[35,75461,75462],{"class":37,"line":55},[35,75463,141],{"emptyLinePlaceholder":140},[35,75465,75466,75468,75470],{"class":37,"line":65},[35,75467,1404],{"class":359},[35,75469,51660],{"class":51626},[35,75471,51633],{"class":359},[35,75473,75474,75476,75478,75480,75482,75484],{"class":37,"line":74},[35,75475,52470],{"class":359},[35,75477,51670],{"class":51626},[35,75479,51673],{"class":48},[35,75481,544],{"class":359},[35,75483,51678],{"class":306},[35,75485,51633],{"class":359},[35,75487,75488,75490,75492,75494,75496,75498,75500,75502,75504],{"class":37,"line":83},[35,75489,52470],{"class":359},[35,75491,51670],{"class":51626},[35,75493,15254],{"class":48},[35,75495,544],{"class":359},[35,75497,51717],{"class":306},[35,75499,51697],{"class":48},[35,75501,544],{"class":359},[35,75503,51724],{"class":306},[35,75505,51633],{"class":359},[35,75507,75508,75510,75512,75514,75516],{"class":37,"line":92},[35,75509,52470],{"class":359},[35,75511,51733],{"class":51626},[35,75513,51736],{"class":359},[35,75515,51733],{"class":51626},[35,75517,51633],{"class":359},[35,75519,75520,75522,75524],{"class":37,"line":101},[35,75521,52111],{"class":359},[35,75523,51660],{"class":51626},[35,75525,51633],{"class":359},[35,75527,75528],{"class":37,"line":110},[35,75529,141],{"emptyLinePlaceholder":140},[35,75531,75532,75534,75536],{"class":37,"line":119},[35,75533,1404],{"class":359},[35,75535,52126],{"class":51626},[35,75537,51633],{"class":359},[35,75539,75540,75542,75544],{"class":37,"line":128},[35,75541,52470],{"class":359},[35,75543,52139],{"class":51626},[35,75545,51633],{"class":359},[35,75547,75548],{"class":37,"line":137},[35,75549,75550],{"class":41},"    \u002F\u002F 元字符中\n",[35,75552,75553,75555,75557,75559,75561,75564,75566,75568,75571,75573,75576,75579],{"class":37,"line":144},[35,75554,74078],{"class":359},[35,75556,58573],{"class":48},[35,75558,499],{"class":359},[35,75560,1078],{"class":306},[35,75562,75563],{"class":48303},"哈",[35,75565,1078],{"class":306},[35,75567,1052],{"class":359},[35,75569,75570],{"class":48},"test",[35,75572,499],{"class":359},[35,75574,75575],{"class":306},"'哈'",[35,75577,75578],{"class":359},"))  ",[35,75580,75581],{"class":41},"\u002F\u002Ftrue\n",[35,75583,75584,75586,75588,75590,75592,75594,75596,75598,75600,75602,75605,75607],{"class":37,"line":150},[35,75585,74078],{"class":359},[35,75587,58573],{"class":48},[35,75589,499],{"class":359},[35,75591,1078],{"class":306},[35,75593,75563],{"class":48303},[35,75595,1078],{"class":306},[35,75597,1052],{"class":359},[35,75599,75570],{"class":48},[35,75601,499],{"class":359},[35,75603,75604],{"class":306},"'哈哈'",[35,75606,75578],{"class":359},[35,75608,75581],{"class":41},[35,75610,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75632,75635],{"class":37,"line":159},[35,75612,74078],{"class":359},[35,75614,58573],{"class":48},[35,75616,499],{"class":359},[35,75618,1078],{"class":306},[35,75620,75563],{"class":48303},[35,75622,1078],{"class":306},[35,75624,1052],{"class":359},[35,75626,75570],{"class":48},[35,75628,499],{"class":359},[35,75630,75631],{"class":306},"'二哈'",[35,75633,75634],{"class":359},"))   ",[35,75636,75581],{"class":41},[35,75638,75639],{"class":37,"line":168},[35,75640,141],{"emptyLinePlaceholder":140},[35,75642,75643],{"class":37,"line":177},[35,75644,75645],{"class":41},"    \u002F\u002F 1.边界符\n",[35,75647,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672],{"class":37,"line":182},[35,75649,74078],{"class":359},[35,75651,58573],{"class":48},[35,75653,499],{"class":359},[35,75655,1078],{"class":306},[35,75657,1460],{"class":495},[35,75659,75563],{"class":48303},[35,75661,1078],{"class":306},[35,75663,1052],{"class":359},[35,75665,75570],{"class":48},[35,75667,499],{"class":359},[35,75669,75575],{"class":306},[35,75671,75578],{"class":359},[35,75673,75581],{"class":41},[35,75675,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696,75698,75700,75702],{"class":37,"line":188},[35,75677,74078],{"class":359},[35,75679,58573],{"class":48},[35,75681,499],{"class":359},[35,75683,1078],{"class":306},[35,75685,1460],{"class":495},[35,75687,75563],{"class":48303},[35,75689,798],{"class":495},[35,75691,1078],{"class":306},[35,75693,1052],{"class":359},[35,75695,75570],{"class":48},[35,75697,499],{"class":359},[35,75699,75604],{"class":306},[35,75701,75578],{"class":359},[35,75703,75704],{"class":41},"\u002F\u002Ffalse\n",[35,75706,75707],{"class":37,"line":197},[35,75708,75709],{"class":41},"    \u002F\u002F 2.量词\n",[35,75711,75712],{"class":37,"line":206},[35,75713,75714],{"class":41},"    \u002F\u002F 量词 * 类似于 >= 0\n",[35,75716,75717,75719,75721,75723,75725,75727,75729,75732,75734,75736,75738,75740,75742,75744],{"class":37,"line":215},[35,75718,74078],{"class":359},[35,75720,58573],{"class":48},[35,75722,499],{"class":359},[35,75724,1078],{"class":306},[35,75726,1460],{"class":495},[35,75728,75563],{"class":48303},[35,75730,75731],{"class":495},"*$",[35,75733,1078],{"class":306},[35,75735,1052],{"class":359},[35,75737,75570],{"class":48},[35,75739,499],{"class":359},[35,75741,75604],{"class":306},[35,75743,75578],{"class":359},[35,75745,75581],{"class":41},[35,75747,75748,75750,75752,75754,75756,75758,75760,75762,75764,75766,75768,75770,75773,75775],{"class":37,"line":224},[35,75749,74078],{"class":359},[35,75751,58573],{"class":48},[35,75753,499],{"class":359},[35,75755,1078],{"class":306},[35,75757,1460],{"class":495},[35,75759,75563],{"class":48303},[35,75761,75731],{"class":495},[35,75763,1078],{"class":306},[35,75765,1052],{"class":359},[35,75767,75570],{"class":48},[35,75769,499],{"class":359},[35,75771,75772],{"class":306},"'二哈好傻'",[35,75774,75578],{"class":359},[35,75776,75777],{"class":41},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[35,75779,75780,75782,75784,75786,75788,75790,75792,75794,75796,75798,75800,75802,75805,75807],{"class":37,"line":233},[35,75781,74078],{"class":359},[35,75783,58573],{"class":48},[35,75785,499],{"class":359},[35,75787,1078],{"class":306},[35,75789,1460],{"class":495},[35,75791,75563],{"class":48303},[35,75793,75731],{"class":495},[35,75795,1078],{"class":306},[35,75797,1052],{"class":359},[35,75799,75570],{"class":48},[35,75801,499],{"class":359},[35,75803,75804],{"class":306},"'哈好哈'",[35,75806,75634],{"class":359},[35,75808,75809],{"class":41},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[35,75811,75812],{"class":37,"line":238},[35,75813,141],{"emptyLinePlaceholder":140},[35,75815,75816],{"class":37,"line":244},[35,75817,75818],{"class":41},"    \u002F\u002F +类似于>=1\n",[35,75820,75821,75823,75825,75827,75829,75831,75833,75836,75838,75840,75842,75844,75846,75848],{"class":37,"line":253},[35,75822,74078],{"class":359},[35,75824,58573],{"class":48},[35,75826,499],{"class":359},[35,75828,1078],{"class":306},[35,75830,1460],{"class":495},[35,75832,75563],{"class":48303},[35,75834,75835],{"class":495},"+$",[35,75837,1078],{"class":306},[35,75839,1052],{"class":359},[35,75841,75570],{"class":48},[35,75843,499],{"class":359},[35,75845,75604],{"class":306},[35,75847,75578],{"class":359},[35,75849,75581],{"class":41},[35,75851,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878],{"class":37,"line":262},[35,75853,74078],{"class":359},[35,75855,58573],{"class":48},[35,75857,499],{"class":359},[35,75859,1078],{"class":306},[35,75861,1460],{"class":495},[35,75863,75563],{"class":48303},[35,75865,75835],{"class":495},[35,75867,1078],{"class":306},[35,75869,1052],{"class":359},[35,75871,75570],{"class":48},[35,75873,499],{"class":359},[35,75875,75772],{"class":306},[35,75877,75578],{"class":359},[35,75879,75777],{"class":41},[35,75881,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908],{"class":37,"line":271},[35,75883,74078],{"class":359},[35,75885,58573],{"class":48},[35,75887,499],{"class":359},[35,75889,1078],{"class":306},[35,75891,1460],{"class":495},[35,75893,75563],{"class":48303},[35,75895,75835],{"class":495},[35,75897,1078],{"class":306},[35,75899,1052],{"class":359},[35,75901,75570],{"class":48},[35,75903,499],{"class":359},[35,75905,75804],{"class":306},[35,75907,75634],{"class":359},[35,75909,75704],{"class":41},[35,75911,75912],{"class":37,"line":280},[35,75913,141],{"emptyLinePlaceholder":140},[35,75915,75916],{"class":37,"line":289},[35,75917,75918],{"class":41},"    \u002F\u002F ?类似于0次或一次\n",[35,75920,75921,75923,75925,75927,75929,75931,75934,75936,75938,75940,75942,75944,75946,75948],{"class":37,"line":294},[35,75922,74078],{"class":359},[35,75924,58573],{"class":48},[35,75926,499],{"class":359},[35,75928,1078],{"class":306},[35,75930,1460],{"class":495},[35,75932,75933],{"class":48303},"哈？",[35,75935,798],{"class":495},[35,75937,1078],{"class":306},[35,75939,1052],{"class":359},[35,75941,75570],{"class":48},[35,75943,499],{"class":359},[35,75945,74553],{"class":306},[35,75947,75634],{"class":359},[35,75949,75581],{"class":41},[35,75951,75952,75954,75956,75958,75960,75962,75964,75967,75969,75971,75973,75975,75977,75979],{"class":37,"line":300},[35,75953,74078],{"class":359},[35,75955,58573],{"class":48},[35,75957,499],{"class":359},[35,75959,1078],{"class":306},[35,75961,1460],{"class":495},[35,75963,75563],{"class":48303},[35,75965,75966],{"class":495},"?$",[35,75968,1078],{"class":306},[35,75970,1052],{"class":359},[35,75972,75570],{"class":48},[35,75974,499],{"class":359},[35,75976,75604],{"class":306},[35,75978,75578],{"class":359},[35,75980,75704],{"class":41},[35,75982,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76009],{"class":37,"line":313},[35,75984,74078],{"class":359},[35,75986,58573],{"class":48},[35,75988,499],{"class":359},[35,75990,1078],{"class":306},[35,75992,1460],{"class":495},[35,75994,75563],{"class":48303},[35,75996,75966],{"class":495},[35,75998,1078],{"class":306},[35,76000,1052],{"class":359},[35,76002,75570],{"class":48},[35,76004,499],{"class":359},[35,76006,75772],{"class":306},[35,76008,75578],{"class":359},[35,76010,75777],{"class":41},[35,76012,76013,76015,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035,76037,76039],{"class":37,"line":324},[35,76014,74078],{"class":359},[35,76016,58573],{"class":48},[35,76018,499],{"class":359},[35,76020,1078],{"class":306},[35,76022,1460],{"class":495},[35,76024,75563],{"class":48303},[35,76026,75966],{"class":495},[35,76028,1078],{"class":306},[35,76030,1052],{"class":359},[35,76032,75570],{"class":48},[35,76034,499],{"class":359},[35,76036,75804],{"class":306},[35,76038,75578],{"class":359},[35,76040,75704],{"class":41},[35,76042,76043],{"class":37,"line":2955},[35,76044,141],{"emptyLinePlaceholder":140},[35,76046,76047],{"class":37,"line":8282},[35,76048,76049],{"class":41},"    \u002F\u002F {n}写几，就必须出现几次\n",[35,76051,76052,76054,76056,76058,76060,76062,76064,76067,76069,76071,76073,76075,76078,76081],{"class":37,"line":8306},[35,76053,74078],{"class":359},[35,76055,58573],{"class":48},[35,76057,499],{"class":359},[35,76059,1078],{"class":306},[35,76061,1460],{"class":495},[35,76063,75563],{"class":48303},[35,76065,76066],{"class":495},"{4}$",[35,76068,1078],{"class":306},[35,76070,1052],{"class":359},[35,76072,75570],{"class":48},[35,76074,499],{"class":359},[35,76076,76077],{"class":306},"'哈哈哈哈'",[35,76079,76080],{"class":359},")) ",[35,76082,75581],{"class":41},[35,76084,76085],{"class":37,"line":8311},[35,76086,141],{"emptyLinePlaceholder":140},[35,76088,76089],{"class":37,"line":8317},[35,76090,76091],{"class":41},"    \u002F\u002F {n,}大于等于n次\n",[35,76093,76094,76096,76098,76100,76102,76104,76106,76109,76111,76113,76115,76117,76119,76121],{"class":37,"line":8344},[35,76095,74078],{"class":359},[35,76097,58573],{"class":48},[35,76099,499],{"class":359},[35,76101,1078],{"class":306},[35,76103,1460],{"class":495},[35,76105,75563],{"class":48303},[35,76107,76108],{"class":495},"{4,}$",[35,76110,1078],{"class":306},[35,76112,1052],{"class":359},[35,76114,75570],{"class":48},[35,76116,499],{"class":359},[35,76118,76077],{"class":306},[35,76120,76080],{"class":359},[35,76122,75581],{"class":41},[35,76124,76125,76127,76129,76131,76133,76135,76137,76139,76141,76143,76145,76147,76150,76152],{"class":37,"line":8349},[35,76126,74078],{"class":359},[35,76128,58573],{"class":48},[35,76130,499],{"class":359},[35,76132,1078],{"class":306},[35,76134,1460],{"class":495},[35,76136,75563],{"class":48303},[35,76138,76108],{"class":495},[35,76140,1078],{"class":306},[35,76142,1052],{"class":359},[35,76144,75570],{"class":48},[35,76146,499],{"class":359},[35,76148,76149],{"class":306},"'哈哈哈哈哈'",[35,76151,76080],{"class":359},[35,76153,75581],{"class":41},[35,76155,76156],{"class":37,"line":8355},[35,76157,141],{"emptyLinePlaceholder":140},[35,76159,76160],{"class":37,"line":8367},[35,76161,76162],{"class":41},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[35,76164,76165,76167,76169,76171,76173,76175,76177,76180,76182,76184,76186,76188,76190,76192],{"class":37,"line":8379},[35,76166,74078],{"class":359},[35,76168,58573],{"class":48},[35,76170,499],{"class":359},[35,76172,1078],{"class":306},[35,76174,1460],{"class":495},[35,76176,75563],{"class":48303},[35,76178,76179],{"class":495},"{4,6}$",[35,76181,1078],{"class":306},[35,76183,1052],{"class":359},[35,76185,75570],{"class":48},[35,76187,499],{"class":359},[35,76189,76077],{"class":306},[35,76191,76080],{"class":359},[35,76193,75581],{"class":41},[35,76195,76196,76198,76200,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222],{"class":37,"line":8391},[35,76197,74078],{"class":359},[35,76199,58573],{"class":48},[35,76201,499],{"class":359},[35,76203,1078],{"class":306},[35,76205,1460],{"class":495},[35,76207,75563],{"class":48303},[35,76209,76179],{"class":495},[35,76211,1078],{"class":306},[35,76213,1052],{"class":359},[35,76215,75570],{"class":48},[35,76217,499],{"class":359},[35,76219,76149],{"class":306},[35,76221,76080],{"class":359},[35,76223,75581],{"class":41},[35,76225,76226,76228,76230,76232,76234,76236,76238,76240,76242,76244,76246,76248,76251,76253],{"class":37,"line":10050},[35,76227,74078],{"class":359},[35,76229,58573],{"class":48},[35,76231,499],{"class":359},[35,76233,1078],{"class":306},[35,76235,1460],{"class":495},[35,76237,75563],{"class":48303},[35,76239,76179],{"class":495},[35,76241,1078],{"class":306},[35,76243,1052],{"class":359},[35,76245,75570],{"class":48},[35,76247,499],{"class":359},[35,76249,76250],{"class":306},"'哈哈哈哈哈哈哈'",[35,76252,76080],{"class":359},[35,76254,75704],{"class":41},[35,76256,76257],{"class":37,"line":10075},[35,76258,141],{"emptyLinePlaceholder":140},[35,76260,76261],{"class":37,"line":10098},[35,76262,76263],{"class":41},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[35,76265,76266,76268,76270,76272,76274,76276,76279,76281,76283,76285,76287,76289,76292,76294],{"class":37,"line":10122},[35,76267,74078],{"class":359},[35,76269,58573],{"class":48},[35,76271,499],{"class":359},[35,76273,1078],{"class":306},[35,76275,1460],{"class":495},[35,76277,76278],{"class":58},"[abc]",[35,76280,798],{"class":495},[35,76282,1078],{"class":306},[35,76284,1052],{"class":359},[35,76286,75570],{"class":48},[35,76288,499],{"class":359},[35,76290,76291],{"class":306},"'a'",[35,76293,75578],{"class":359},[35,76295,75581],{"class":41},[35,76297,76298,76300,76302,76304,76306,76308,76310,76312,76314,76316,76318,76320,76323,76325],{"class":37,"line":10127},[35,76299,74078],{"class":359},[35,76301,58573],{"class":48},[35,76303,499],{"class":359},[35,76305,1078],{"class":306},[35,76307,1460],{"class":495},[35,76309,76278],{"class":58},[35,76311,798],{"class":495},[35,76313,1078],{"class":306},[35,76315,1052],{"class":359},[35,76317,75570],{"class":48},[35,76319,499],{"class":359},[35,76321,76322],{"class":306},"'b'",[35,76324,75578],{"class":359},[35,76326,75581],{"class":41},[35,76328,76329,76331,76333,76335,76337,76339,76341,76343,76345,76347,76349,76351,76354,76356],{"class":37,"line":10132},[35,76330,74078],{"class":359},[35,76332,58573],{"class":48},[35,76334,499],{"class":359},[35,76336,1078],{"class":306},[35,76338,1460],{"class":495},[35,76340,76278],{"class":58},[35,76342,798],{"class":495},[35,76344,1078],{"class":306},[35,76346,1052],{"class":359},[35,76348,75570],{"class":48},[35,76350,499],{"class":359},[35,76352,76353],{"class":306},"'c'",[35,76355,75578],{"class":359},[35,76357,75581],{"class":41},[35,76359,76360,76362,76364,76366,76368,76370,76372,76374,76376,76378,76381,76383],{"class":37,"line":10137},[35,76361,74078],{"class":359},[35,76363,58573],{"class":48},[35,76365,499],{"class":359},[35,76367,1078],{"class":306},[35,76369,76278],{"class":58},[35,76371,1078],{"class":306},[35,76373,1052],{"class":359},[35,76375,75570],{"class":48},[35,76377,499],{"class":359},[35,76379,76380],{"class":306},"'ab'",[35,76382,75578],{"class":359},[35,76384,75581],{"class":41},[35,76386,76387,76389,76391,76393,76395,76397,76399,76401,76403,76405,76407,76409,76411,76413],{"class":37,"line":10146},[35,76388,74078],{"class":359},[35,76390,58573],{"class":48},[35,76392,499],{"class":359},[35,76394,1078],{"class":306},[35,76396,1460],{"class":495},[35,76398,76278],{"class":58},[35,76400,798],{"class":495},[35,76402,1078],{"class":306},[35,76404,1052],{"class":359},[35,76406,75570],{"class":48},[35,76408,499],{"class":359},[35,76410,76380],{"class":306},[35,76412,75578],{"class":359},[35,76414,76415],{"class":41},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[35,76417,76418,76420,76422,76424,76426,76428,76430,76433,76435,76437,76439,76441,76443,76445],{"class":37,"line":10151},[35,76419,74078],{"class":359},[35,76421,58573],{"class":48},[35,76423,499],{"class":359},[35,76425,1078],{"class":306},[35,76427,1460],{"class":495},[35,76429,76278],{"class":58},[35,76431,76432],{"class":495},"{2}$",[35,76434,1078],{"class":306},[35,76436,1052],{"class":359},[35,76438,75570],{"class":48},[35,76440,499],{"class":359},[35,76442,76380],{"class":306},[35,76444,75578],{"class":359},[35,76446,76447],{"class":41},"\u002F\u002Ftrue   可以选两个\n",[35,76449,76450,76452,76454,76456,76458,76460,76463,76465,76467,76469,76471,76473,76476,76478],{"class":37,"line":10157},[35,76451,74078],{"class":359},[35,76453,58573],{"class":48},[35,76455,499],{"class":359},[35,76457,1078],{"class":306},[35,76459,1460],{"class":495},[35,76461,76462],{"class":58},"[a-z]",[35,76464,798],{"class":495},[35,76466,1078],{"class":306},[35,76468,1052],{"class":359},[35,76470,75570],{"class":48},[35,76472,499],{"class":359},[35,76474,76475],{"class":306},"'p'",[35,76477,75634],{"class":359},[35,76479,76480],{"class":41},"\u002F\u002Ftrue   依然只能选一个\n",[35,76482,76483,76485,76487,76489,76491,76493,76496,76498,76500,76502,76504,76506,76508,76510],{"class":37,"line":10178},[35,76484,74078],{"class":359},[35,76486,58573],{"class":48},[35,76488,499],{"class":359},[35,76490,1078],{"class":306},[35,76492,1460],{"class":495},[35,76494,76495],{"class":58},"[A-Z]",[35,76497,798],{"class":495},[35,76499,1078],{"class":306},[35,76501,1052],{"class":359},[35,76503,75570],{"class":48},[35,76505,499],{"class":359},[35,76507,76475],{"class":306},[35,76509,75634],{"class":359},[35,76511,75704],{"class":41},[35,76513,76514,76516,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76539,76541],{"class":37,"line":10184},[35,76515,74078],{"class":359},[35,76517,58573],{"class":48},[35,76519,499],{"class":359},[35,76521,1078],{"class":306},[35,76523,1460],{"class":495},[35,76525,76495],{"class":58},[35,76527,798],{"class":495},[35,76529,1078],{"class":306},[35,76531,1052],{"class":359},[35,76533,75570],{"class":48},[35,76535,499],{"class":359},[35,76537,76538],{"class":306},"'P'",[35,76540,75634],{"class":359},[35,76542,75581],{"class":41},[35,76544,76545,76547,76549,76551,76553,76555,76558,76560,76562,76564,76566,76568,76571,76573],{"class":37,"line":10198},[35,76546,74078],{"class":359},[35,76548,58573],{"class":48},[35,76550,499],{"class":359},[35,76552,1078],{"class":306},[35,76554,1460],{"class":495},[35,76556,76557],{"class":58},"[0-9]",[35,76559,798],{"class":495},[35,76561,1078],{"class":306},[35,76563,1052],{"class":359},[35,76565,75570],{"class":48},[35,76567,499],{"class":359},[35,76569,76570],{"class":306},"'0'",[35,76572,75634],{"class":359},[35,76574,75581],{"class":41},[35,76576,76577,76579,76581,76583,76585,76587,76590,76592,76594,76596,76598,76600,76602,76604],{"class":37,"line":10204},[35,76578,74078],{"class":359},[35,76580,58573],{"class":48},[35,76582,499],{"class":359},[35,76584,1078],{"class":306},[35,76586,1460],{"class":495},[35,76588,76589],{"class":58},"[a-zA-Z0-9]",[35,76591,798],{"class":495},[35,76593,1078],{"class":306},[35,76595,1052],{"class":359},[35,76597,75570],{"class":48},[35,76599,499],{"class":359},[35,76601,76475],{"class":306},[35,76603,75578],{"class":359},[35,76605,75581],{"class":41},[35,76607,76608,76610,76612],{"class":37,"line":10231},[35,76609,52743],{"class":359},[35,76611,52139],{"class":51626},[35,76613,51633],{"class":359},[35,76615,76616,76618,76620],{"class":37,"line":10240},[35,76617,52111],{"class":359},[35,76619,52126],{"class":51626},[35,76621,51633],{"class":359},[35,76623,76624],{"class":37,"line":10246},[35,76625,141],{"emptyLinePlaceholder":140},[35,76627,76628,76630,76632],{"class":37,"line":10254},[35,76629,52111],{"class":359},[35,76631,50961],{"class":51626},[35,76633,51633],{"class":359},[22332,76635,76637],{"id":76636},"_3624-修饰符","3.6.2.4 修饰符",[21,76639,76640],{},[1823,76641],{"alt":30,"src":76642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[21,76644,76645],{},"replace是个方法，使用的时候一定不要忘记括号()",[21,76647,76648],{},[1823,76649],{"alt":30,"src":76650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[25,76652,76654],{"className":50959,"code":76653,"language":50961,"meta":30,"style":30},"\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",[32,76655,76656,76666,76680,76688,76702,76722,76734,76742,76750,76758,76790,76821,76826,76858,76869,76902,76911,76919,76927],{"__ignoreMap":30},[35,76657,76658,76660,76662,76664],{"class":37,"line":38},[35,76659,51623],{"class":359},[35,76661,51627],{"class":51626},[35,76663,51630],{"class":48},[35,76665,51633],{"class":359},[35,76667,76668,76670,76672,76674,76676,76678],{"class":37,"line":45},[35,76669,1404],{"class":359},[35,76671,50961],{"class":51626},[35,76673,51642],{"class":48},[35,76675,544],{"class":359},[35,76677,51647],{"class":306},[35,76679,51633],{"class":359},[35,76681,76682,76684,76686],{"class":37,"line":55},[35,76683,1404],{"class":359},[35,76685,51660],{"class":51626},[35,76687,51633],{"class":359},[35,76689,76690,76692,76694,76696,76698,76700],{"class":37,"line":65},[35,76691,52470],{"class":359},[35,76693,51670],{"class":51626},[35,76695,51673],{"class":48},[35,76697,544],{"class":359},[35,76699,51678],{"class":306},[35,76701,51633],{"class":359},[35,76703,76704,76706,76708,76710,76712,76714,76716,76718,76720],{"class":37,"line":74},[35,76705,52470],{"class":359},[35,76707,51670],{"class":51626},[35,76709,15254],{"class":48},[35,76711,544],{"class":359},[35,76713,51717],{"class":306},[35,76715,51697],{"class":48},[35,76717,544],{"class":359},[35,76719,51724],{"class":306},[35,76721,51633],{"class":359},[35,76723,76724,76726,76728,76730,76732],{"class":37,"line":83},[35,76725,52470],{"class":359},[35,76727,51733],{"class":51626},[35,76729,51736],{"class":359},[35,76731,51733],{"class":51626},[35,76733,51633],{"class":359},[35,76735,76736,76738,76740],{"class":37,"line":92},[35,76737,52111],{"class":359},[35,76739,51660],{"class":51626},[35,76741,51633],{"class":359},[35,76743,76744,76746,76748],{"class":37,"line":101},[35,76745,1404],{"class":359},[35,76747,52126],{"class":51626},[35,76749,51633],{"class":359},[35,76751,76752,76754,76756],{"class":37,"line":110},[35,76753,52470],{"class":359},[35,76755,52139],{"class":51626},[35,76757,51633],{"class":359},[35,76759,76760,76762,76764,76766,76768,76770,76773,76775,76777,76779,76781,76783,76786,76788],{"class":37,"line":119},[35,76761,74078],{"class":359},[35,76763,58573],{"class":48},[35,76765,499],{"class":359},[35,76767,1078],{"class":306},[35,76769,1460],{"class":495},[35,76771,76772],{"class":48303},"java",[35,76774,798],{"class":495},[35,76776,1078],{"class":306},[35,76778,1052],{"class":359},[35,76780,75570],{"class":48},[35,76782,499],{"class":359},[35,76784,76785],{"class":306},"'java'",[35,76787,76080],{"class":359},[35,76789,75581],{"class":41},[35,76791,76792,76794,76796,76798,76800,76802,76804,76806,76808,76810,76812,76814,76817,76819],{"class":37,"line":128},[35,76793,74078],{"class":359},[35,76795,58573],{"class":48},[35,76797,499],{"class":359},[35,76799,1078],{"class":306},[35,76801,1460],{"class":495},[35,76803,76772],{"class":48303},[35,76805,798],{"class":495},[35,76807,1078],{"class":306},[35,76809,1052],{"class":359},[35,76811,75570],{"class":48},[35,76813,499],{"class":359},[35,76815,76816],{"class":306},"'Java'",[35,76818,76080],{"class":359},[35,76820,75704],{"class":41},[35,76822,76823],{"class":37,"line":137},[35,76824,76825],{"class":41},"    \u002F\u002F 不区分大小写、\n",[35,76827,76828,76830,76832,76834,76836,76838,76840,76842,76844,76846,76848,76850,76852,76854,76856],{"class":37,"line":144},[35,76829,74078],{"class":359},[35,76831,58573],{"class":48},[35,76833,499],{"class":359},[35,76835,1078],{"class":306},[35,76837,1460],{"class":495},[35,76839,76772],{"class":48303},[35,76841,798],{"class":495},[35,76843,1078],{"class":306},[35,76845,935],{"class":495},[35,76847,1052],{"class":359},[35,76849,75570],{"class":48},[35,76851,499],{"class":359},[35,76853,76816],{"class":306},[35,76855,76080],{"class":359},[35,76857,75581],{"class":41},[35,76859,76860,76862,76864,76866],{"class":37,"line":150},[35,76861,11555],{"class":495},[35,76863,74244],{"class":58},[35,76865,13898],{"class":495},[35,76867,76868],{"class":306}," 'java是一门编程语言，学完java工资很高'\n",[35,76870,76871,76873,76876,76878,76881,76884,76886,76888,76890,76892,76895,76897,76900],{"class":37,"line":159},[35,76872,11555],{"class":495},[35,76874,76875],{"class":58}," result",[35,76877,13898],{"class":495},[35,76879,76880],{"class":359}," str.",[35,76882,76883],{"class":48},"replace",[35,76885,499],{"class":359},[35,76887,1078],{"class":306},[35,76889,76772],{"class":48303},[35,76891,1078],{"class":306},[35,76893,76894],{"class":495},"ig",[35,76896,12769],{"class":359},[35,76898,76899],{"class":306},"'前端'",[35,76901,505],{"class":359},[35,76903,76904,76906,76908],{"class":37,"line":168},[35,76905,74078],{"class":359},[35,76907,58573],{"class":48},[35,76909,76910],{"class":359},"(result)\n",[35,76912,76913,76915,76917],{"class":37,"line":177},[35,76914,52743],{"class":359},[35,76916,52139],{"class":51626},[35,76918,51633],{"class":359},[35,76920,76921,76923,76925],{"class":37,"line":182},[35,76922,52111],{"class":359},[35,76924,52126],{"class":51626},[35,76926,51633],{"class":359},[35,76928,76929,76931,76933],{"class":37,"line":188},[35,76930,52111],{"class":359},[35,76932,50961],{"class":51626},[35,76934,51633],{"class":359},[416,76936,76937],{},"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":30,"searchDepth":45,"depth":45,"links":76939},[76940,76950,76962,76979,76986,76994],{"id":53686,"depth":45,"text":53687,"children":76941},[76942,76943,76944,76945,76946,76947,76948,76949],{"id":53690,"depth":55,"text":53691},{"id":53723,"depth":55,"text":53724},{"id":53762,"depth":55,"text":53763},{"id":53920,"depth":55,"text":53921},{"id":53968,"depth":55,"text":53969},{"id":54105,"depth":55,"text":54106},{"id":54427,"depth":55,"text":54428},{"id":57415,"depth":55,"text":57416},{"id":57443,"depth":45,"text":57444,"children":76951},[76952,76953,76954,76955,76956,76957,76958,76959,76960,76961],{"id":57447,"depth":55,"text":57448},{"id":57470,"depth":55,"text":57471},{"id":58385,"depth":55,"text":58386},{"id":59075,"depth":55,"text":59076},{"id":59357,"depth":55,"text":59358},{"id":63518,"depth":55,"text":63519},{"id":63688,"depth":55,"text":63689},{"id":63816,"depth":55,"text":63817},{"id":63841,"depth":55,"text":63842},{"id":65230,"depth":55,"text":65231},{"id":66383,"depth":45,"text":66384,"children":76963},[76964,76965,76966,76967,76968,76969,76970,76971,76972,76973,76974,76975,76976,76977,76978],{"id":66387,"depth":55,"text":66388},{"id":67041,"depth":55,"text":67042},{"id":68736,"depth":55,"text":68737},{"id":68777,"depth":55,"text":68778},{"id":68819,"depth":55,"text":68820},{"id":68833,"depth":55,"text":68834},{"id":68882,"depth":55,"text":68883},{"id":68894,"depth":55,"text":68895},{"id":68909,"depth":55,"text":68910},{"id":68945,"depth":55,"text":68946},{"id":69026,"depth":55,"text":69027},{"id":69154,"depth":55,"text":69155},{"id":69166,"depth":55,"text":69167},{"id":69185,"depth":55,"text":69186},{"id":71295,"depth":55,"text":71296},{"id":71314,"depth":45,"text":71315,"children":76980},[76981,76982,76983,76984,76985],{"id":71335,"depth":55,"text":71336},{"id":71355,"depth":55,"text":71356},{"id":71404,"depth":55,"text":71405},{"id":71529,"depth":55,"text":71530},{"id":71710,"depth":55,"text":71711},{"id":71728,"depth":45,"text":71729,"children":76987},[76988,76989,76990,76991,76992,76993],{"id":71743,"depth":55,"text":71744},{"id":71802,"depth":55,"text":71803},{"id":71826,"depth":55,"text":71827},{"id":72146,"depth":55,"text":72147},{"id":72178,"depth":55,"text":72179},{"id":72201,"depth":55,"text":72202},{"id":75269,"depth":45,"text":75270,"children":76995},[76996,76997],{"id":75303,"depth":55,"text":75304},{"id":75342,"depth":55,"text":75343},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53658,"description":421},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77004,"title":77005,"body":77006,"description":421,"extension":422,"meta":93143,"navigation":140,"path":93144,"seo":93145,"stem":93146,"__hash__":93147},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77007,"toc":93079},[77008,77011,77014,77018,77022,77027,77032,77043,77047,77052,77055,77059,77062,77067,77071,77075,77078,77083,77086,77090,77093,77101,77104,77108,77113,77118,77121,77125,77130,77135,77138,77142,77147,77150,77155,77158,77163,77166,77171,77176,77179,77182,77186,77191,77196,77199,77203,77207,77210,77213,77216,77220,77224,77229,77234,77237,77241,77246,77251,77254,77257,77260,77263,77266,77269,77272,77275,77278,77283,77287,77292,77297,77300,77303,77306,77309,77312,77315,77318,77321,77325,77329,77332,77335,77338,77343,77345,77348,77351,77354,77357,77360,77363,77366,77369,77372,77375,77378,77381,77384,77389,77394,77399,77402,77406,77409,77414,77418,77420,77431,77436,77537,77540,77543,77546,77549,77552,77555,77558,77561,77563,77566,77569,77572,77575,77578,77580,77583,77586,77589,77592,77595,77598,77600,77603,77605,77607,77610,77614,77618,77621,77624,77627,77630,77633,77636,77639,77642,77645,77650,77770,77773,77776,77781,77784,77787,77790,77793,77798,77801,77804,77807,77810,77815,77818,77918,77983,78057,78061,78064,78067,78071,78074,78088,78117,78120,78123,78126,78129,78132,78135,78138,78140,78143,78146,78149,78152,78156,78161,78165,78170,78245,78248,78431,78434,78437,78440,78443,78446,78448,78451,78454,78457,78460,78463,78466,78468,78472,78475,78480,78483,78486,78489,78492,78494,78499,78502,78505,78508,78511,78513,78518,78521,78524,78526,78528,78531,78535,78538,78541,78546,78549,78552,78555,78605,78610,78614,78619,78622,78691,78694,78703,78707,78712,78715,78718,78726,78729,78746,80548,80552,80556,80561,80564,80568,80574,80580,80732,80737,80742,80745,80748,80751,80754,80757,80760,80763,80766,80769,80772,80775,80778,80783,80787,80790,80801,80805,80810,80813,80816,80819,80822,80825,80827,80830,80833,80836,80839,80841,80858,80861,80865,80868,80873,80878,80881,80884,80888,80891,80894,80903,80906,80910,80913,80918,80923,80990,80994,80997,81000,81005,81010,81096,81101,81105,81108,81111,81126,81129,81134,81138,81143,81252,81255,81266,81416,81420,81425,81534,81538,81543,81548,81553,81556,81563,81583,81619,81783,81788,81791,81796,81803,81806,81809,81812,81871,81927,81983,81987,81992,82307,82310,82314,82317,82322,82431,82436,82440,82445,82449,82520,82524,82526,82529,82532,82570,82846,82850,82867,82933,82967,82971,82974,82979,83008,83015,83024,83029,83044,83049,83058,83061,83198,83202,83264,83268,83273,83518,83522,83527,83530,83533,83536,83539,83543,83548,85129,85133,85137,85143,85146,85151,85155,85158,85163,85166,85177,85181,85186,85190,85195,85200,85203,85208,85212,85216,85219,85224,85229,85232,85235,85238,85360,85365,85467,85470,85473,85477,85482,85654,85659,85663,85666,85671,85737,85742,85745,85876,85879,85884,85887,85890,85981,85986,85989,85992,85995,85998,86003,86008,86011,86016,86021,86026,86030,86033,86036,86041,86046,86051,86056,86110,86113,86116,86121,86124,86127,86132,86137,86142,86146,86151,86165,86170,86173,86178,86182,86187,86192,86197,86202,86207,86212,86217,86222,86225,86229,86234,86237,86240,86243,86248,86253,86256,86259,86263,86266,86269,86274,86279,86284,86289,86292,86297,86302,86363,86368,86371,86376,87617,87622,87626,87630,87635,87638,87643,87648,87651,87656,87658,87663,87667,87670,87673,87684,87688,87693,87698,87753,87758,87763,87768,87979,87984,87988,87993,87996,87998,88001,88004,88451,88456,88463,88469,88472,88475,88739,88744,88748,89013,89018,89022,89027,89032,89037,89042,89373,89376,89381,89386,89389,89393,89397,89402,89407,89412,89417,89422,89427,89431,89434,89439,89444,89447,89521,89526,89531,89536,89538,89541,89911,89916,89921,89926,89929,89932,90034,90039,90044,90147,90151,90156,90160,90164,90169,90174,90177,90182,90185,90188,90581,90586,90589,90592,90595,90598,91118,91122,91127,91132,91137,91140,91145,91148,91151,91533,91538,91540,91542,91545,91548,92060,92064,92125,92128,92131,92134,92138,92141,92146,92151,93076],[10,77009,77005],{"id":77010},"_4js进阶",[21,77012,77013],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[438,77015,77017],{"id":77016},"_41-作用域","4.1 作用域",[465,77019,77021],{"id":77020},"_411-局部作用域","4.1.1 局部作用域",[21,77023,77024],{},[1823,77025],{"alt":30,"src":77026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[21,77028,77029],{},[1823,77030],{"alt":30,"src":77031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1501,77033,77034,77037,77040],{},[17,77035,77036],{},"函数作用域在函数内部",[17,77038,77039],{},"块级作用域在{}",[17,77041,77042],{},"对象的那个{}不是作用域，不是块作用域",[465,77044,77046],{"id":77045},"_412-全局作用域","4.1.2 全局作用域",[21,77048,77049],{},[1823,77050],{"alt":30,"src":77051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[21,77053,77054],{},"window.a=10不要这样写",[465,77056,77058],{"id":77057},"_413-作用域链","4.1.3 作用域链",[21,77060,77061],{},"变量查找机制",[21,77063,77064],{},[1823,77065],{"alt":30,"src":77066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[438,77068,77070],{"id":77069},"_42-垃圾回收机制","4.2 垃圾回收机制",[465,77072,77074],{"id":77073},"_421-大体介绍","4.2.1 大体介绍",[21,77076,77077],{},"垃圾回收机制(Garbage Collection) 简称 GC",[21,77079,77080],{},[1823,77081],{"alt":30,"src":77082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[21,77084,77085],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[465,77087,77089],{"id":77088},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[21,77091,77092],{},"堆栈空间分配区别：",[14,77094,77095,77098],{},[17,77096,77097],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[17,77099,77100],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[21,77102,77103],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22332,77105,77107],{"id":77106},"_4221-引用计数","4.2.2.1 引用计数",[21,77109,77110],{},[1823,77111],{"alt":30,"src":77112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[21,77114,77115],{},[1823,77116],{"alt":30,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[21,77119,77120],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22332,77122,77124],{"id":77123},"_4222-标记清除法","4.2.2.2 标记清除法",[21,77126,77127],{},[1823,77128],{"alt":30,"src":77129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[21,77131,77132],{},[1823,77133],{"alt":30,"src":77134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[21,77136,77137],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[438,77139,77141],{"id":77140},"_43-闭包","4.3 闭包",[21,77143,77144],{},[1823,77145],{"alt":30,"src":77146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[21,77148,77149],{},"闭包：内层函数+外层函数的变量",[21,77151,77152],{},[1823,77153],{"alt":30,"src":77154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[21,77156,77157],{},"closure就是闭包",[21,77159,77160],{},[1823,77161],{"alt":30,"src":77162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[21,77164,77165],{},"内层函数必须包含外层函数的变量才是闭包",[21,77167,77168],{},[1823,77169],{"alt":30,"src":77170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[21,77172,77173],{},[1823,77174],{"alt":30,"src":77175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[21,77177,77178],{},"闭包可能会引起内存泄漏",[21,77180,77181],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[438,77183,77185],{"id":77184},"_44-变量提升","4.4 变量提升",[21,77187,77188],{},[1823,77189],{"alt":30,"src":77190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[21,77192,77193],{},[1823,77194],{"alt":30,"src":77195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[21,77197,77198],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[438,77200,77202],{"id":77201},"_45-函数进阶","4.5 函数进阶",[465,77204,77206],{"id":77205},"_451-函数提升","4.5.1 函数提升",[21,77208,77209],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[21,77211,77212],{},"只提升函数声明，不提升函数调用",[52139,77214,77215],{},"\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",[465,77217,77219],{"id":77218},"_452-函数参数","4.5.2 函数参数",[22332,77221,77223],{"id":77222},"_4521-动态参数","4.5.2.1 动态参数",[21,77225,77226],{},[1823,77227],{"alt":30,"src":77228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[21,77230,77231],{},[1823,77232],{"alt":30,"src":77233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[21,77235,77236],{},"箭头函数里边没有arguments",[22332,77238,77240],{"id":77239},"_4522-剩余参数","4.5.2.2 剩余参数",[21,77242,77243],{},[1823,77244],{"alt":30,"src":77245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[21,77247,77248],{},[1823,77249],{"alt":30,"src":77250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[21,77252,77253],{},"剩余参数使用的时候不需要写...",[21,77255,77256],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[21,77258,77259],{},"  function getSum(a,b,...arr) {",[21,77261,77262],{},"  console.log(11)",[21,77264,77265],{},"  }",[21,77267,77268],{},"  getSum(1,2,3,4)",[21,77270,77271],{},"  将1传给a，2传给b，剩下的传给剩余参数",[21,77273,77274],{},"  getSum(1,2)",[21,77276,77277],{},"  将1传给a，2传给b，剩余参数为一个空数组",[21,77279,77280],{},[1823,77281],{"alt":30,"src":77282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22332,77284,77286],{"id":77285},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[21,77288,77289],{},[1823,77290],{"alt":30,"src":77291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[21,77293,77294],{},[1823,77295],{"alt":30,"src":77296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[21,77298,77299],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[21,77301,77302],{},"展开运算符可以用于数组之间的合并：",[21,77304,77305],{},"const arr1 = [1, 2, 3]",[21,77307,77308],{},"const arr2 = [3, 4, 5]",[21,77310,77311],{},"const arr = [...arr1, ...arr2]",[21,77313,77314],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[21,77316,77317],{},"剩余参数：函数参数使用，得到真数组",[21,77319,77320],{},"展开运算符：数组中使用，数组展开",[465,77322,77324],{"id":77323},"_453-箭头函数","4.5.3 箭头函数",[22332,77326,77328],{"id":77327},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[21,77330,77331],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[21,77333,77334],{},"它不是万能的！！！",[21,77336,77337],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[21,77339,77340],{},[1823,77341],{"alt":30,"src":77342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[21,77344,528],{},[21,77346,77347],{},"① 只有一个形参的时候，可以省略小括号：",[21,77349,77350],{},"const fn=x=>{console.log(x)}",[21,77352,77353],{},"② 只有一行代码时可以省略大括号：",[21,77355,77356],{},"const fn=x=>console.log(11)",[21,77358,77359],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[21,77361,77362],{},"const fn=x=>x+x",[21,77364,77365],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[21,77367,77368],{},"⑤ 阻止表单默认提交：",[21,77370,77371],{},"const form = document.querySelector('form')",[21,77373,77374],{},"form.addEventListener('click', ev => ev.preventDefault())",[21,77376,77377],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[21,77379,77380],{},"const fn=uname=>({uname:uname})",[21,77382,77383],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[21,77385,77386],{},[1823,77387],{"alt":30,"src":77388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[21,77390,77391],{},[1823,77392],{"alt":30,"src":77393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[21,77395,77396],{},[1823,77397],{"alt":30,"src":77398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[21,77400,77401],{},"一定不要忘记用()，有()就理解为自带return",[22332,77403,77405],{"id":77404},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[21,77407,77408],{},"箭头函数是没有动态参数的arguments",[21,77410,77411],{},[1823,77412],{"alt":30,"src":77413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22332,77415,77417],{"id":77416},"_4533-箭头函数this","4.5.3.3 箭头函数this",[21,77419,11666],{},[14,77421,77422,77425,77428],{},[17,77423,77424],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[17,77426,77427],{},"事件回调函数使用箭头函数时，this 为全局的 window",[17,77429,77430],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[21,77432,77433],{},[1823,77434],{"alt":30,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[25,77437,77439],{"className":53393,"code":77438,"language":53395,"meta":30,"style":30},"  \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",[32,77440,77441,77449,77454,77459,77464,77469,77474,77478,77483,77487,77491,77496,77501,77506,77510,77514,77519,77524,77529],{"__ignoreMap":30},[35,77442,77443,77445,77447],{"class":37,"line":38},[35,77444,52470],{"class":359},[35,77446,52139],{"class":51626},[35,77448,51633],{"class":359},[35,77450,77451],{"class":37,"line":45},[35,77452,77453],{"class":359},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[35,77455,77456],{"class":37,"line":55},[35,77457,77458],{"class":359},"    console.log(this) \u002F\u002F指向window\n",[35,77460,77461],{"class":37,"line":65},[35,77462,77463],{"class":359},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[35,77465,77466],{"class":37,"line":74},[35,77467,77468],{"class":359},"    function fn() {\n",[35,77470,77471],{"class":37,"line":83},[35,77472,77473],{"class":359},"      console.log(this)  \u002F\u002F指向window\n",[35,77475,77476],{"class":37,"line":92},[35,77477,2528],{"class":359},[35,77479,77480],{"class":37,"line":101},[35,77481,77482],{"class":359},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[35,77484,77485],{"class":37,"line":110},[35,77486,141],{"emptyLinePlaceholder":140},[35,77488,77489],{"class":37,"line":119},[35,77490,71848],{"class":359},[35,77492,77493],{"class":37,"line":128},[35,77494,77495],{"class":359},"      name: 'andy',\n",[35,77497,77498],{"class":37,"line":137},[35,77499,77500],{"class":359},"      sayHai: function () {\n",[35,77502,77503],{"class":37,"line":144},[35,77504,77505],{"class":359},"        console.log(this)\n",[35,77507,77508],{"class":37,"line":150},[35,77509,52724],{"class":359},[35,77511,77512],{"class":37,"line":159},[35,77513,2528],{"class":359},[35,77515,77516],{"class":37,"line":168},[35,77517,77518],{"class":359},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[35,77520,77521],{"class":37,"line":177},[35,77522,77523],{"class":359},"    \u002F\u002F 2.箭头函数的this\n",[35,77525,77526],{"class":37,"line":182},[35,77527,77528],{"class":359},"    const fn = () => console.log(this)\n",[35,77530,77531,77533,77535],{"class":37,"line":188},[35,77532,52743],{"class":359},[35,77534,52139],{"class":51626},[35,77536,51633],{"class":359},[21,77538,77539],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[21,77541,77542],{},"const fn = () => console.log(this)",[21,77544,77545],{},"fn() \u002F\u002F指向window",[21,77547,77548],{},"\u002F\u002F 3.对象方法箭头函数 this",[21,77550,77551],{},"①",[21,77553,77554],{},"const obj = {",[21,77556,77557],{},"uname: 'pink老师',",[21,77559,77560],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[21,77562,1440],{},[21,77564,77565],{},"调用对象里边的函数",[21,77567,77568],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[21,77570,77571],{},"obj.sayHai()",[21,77573,77574],{},"②",[21,77576,77577],{},"const obj1 = {",[21,77579,77557],{},[21,77581,77582],{},"sayHai: function () {",[21,77584,77585],{},"let i = 10",[21,77587,77588],{},"const count = () => {",[21,77590,77591],{},"console.log(this)",[21,77593,77594],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[21,77596,77597],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[21,77599,1440],{},[21,77601,77602],{},"count()",[21,77604,1440],{},[21,77606,1440],{},[21,77608,77609],{},"obj1.sayHai()",[438,77611,77613],{"id":77612},"_46-解构赋值","4.6 解构赋值",[465,77615,77617],{"id":77616},"_461-数组解构","4.6.1 数组解构",[21,77619,77620],{},"以前要是使用数组中的值的话：",[21,77622,77623],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[21,77625,77626],{},"const arr=[100,60,80]",[21,77628,77629],{},"const max=arr[0]",[21,77631,77632],{},"const min=arr[1]",[21,77634,77635],{},"const avg=arr[2]",[21,77637,77638],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[21,77640,77641],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[21,77643,77644],{},"这个写法就类似于上边的那种用很多const的方法",[21,77646,77647],{},[1823,77648],{"alt":30,"src":77649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[25,77651,77653],{"className":50959,"code":77652,"language":50961,"meta":30,"style":30},"①变量之间交换值:\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",[32,77654,77655,77660,77665,77670,77675,77680,77684,77688,77693,77697,77702,77707,77711,77716,77721,77732,77742,77747,77752,77757,77761,77765],{"__ignoreMap":30},[35,77656,77657],{"class":37,"line":38},[35,77658,77659],{"class":359},"①变量之间交换值:\n",[35,77661,77662],{"class":37,"line":45},[35,77663,77664],{"class":359},"let a=1\n",[35,77666,77667],{"class":37,"line":55},[35,77668,77669],{"class":359},"let b=2;\n",[35,77671,77672],{"class":37,"line":65},[35,77673,77674],{"class":359},"必须加这行代码，不然就会报错\n",[35,77676,77677],{"class":37,"line":74},[35,77678,77679],{"class":359},"[b,a]=[a,b]\n",[35,77681,77682],{"class":37,"line":83},[35,77683,141],{"emptyLinePlaceholder":140},[35,77685,77686],{"class":37,"line":92},[35,77687,141],{"emptyLinePlaceholder":140},[35,77689,77690],{"class":37,"line":101},[35,77691,77692],{"class":359},"可以写成下面的方式：\n",[35,77694,77695],{"class":37,"line":110},[35,77696,77664],{"class":359},[35,77698,77699],{"class":37,"line":119},[35,77700,77701],{"class":359},"let b=2\n",[35,77703,77704],{"class":37,"line":128},[35,77705,77706],{"class":359},";[b,a]=[a,b]\n",[35,77708,77709],{"class":37,"line":137},[35,77710,141],{"emptyLinePlaceholder":140},[35,77712,77713],{"class":37,"line":144},[35,77714,77715],{"class":359},"②排序\n",[35,77717,77718],{"class":37,"line":150},[35,77719,77720],{"class":359},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[35,77722,77723,77726,77729],{"class":37,"line":159},[35,77724,77725],{"class":359},"for (let i = 0; i ",[35,77727,1404],{"class":77728},"s7hpK",[35,77730,77731],{"class":359}," arr1.length; i++) {\n",[35,77733,77734,77737,77739],{"class":37,"line":168},[35,77735,77736],{"class":359},"   for (let j = 0; j ",[35,77738,1404],{"class":77728},[35,77740,77741],{"class":359}," arr1.length - 1; j++) {\n",[35,77743,77744],{"class":37,"line":177},[35,77745,77746],{"class":359},"      if (arr1[j] > arr1[j + 1]) {\n",[35,77748,77749],{"class":37,"line":182},[35,77750,77751],{"class":359},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[35,77753,77754],{"class":37,"line":188},[35,77755,77756],{"class":359},"       }\n",[35,77758,77759],{"class":37,"line":197},[35,77760,4643],{"class":359},[35,77762,77763],{"class":37,"line":206},[35,77764,1926],{"class":359},[35,77766,77767],{"class":37,"line":215},[35,77768,77769],{"class":359},"console.log(arr1)\n",[21,77771,77772],{},"数组解构的细节：",[21,77774,77775],{},"①变量多，单元值少",[21,77777,77778],{},[1823,77779],{"alt":30,"src":77780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[21,77782,77783],{},"防止出现undefined的方法：",[21,77785,77786],{},"const [a=0,b=0] =[1]",[21,77788,77789],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[21,77791,77792],{},"②变量少，单元值多",[21,77794,77795],{},[1823,77796],{"alt":30,"src":77797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[21,77799,77800],{},"此时可以使用剩余参数来接收多余的值",[21,77802,77803],{},"const [a,b,...c]=[1,2,3,4]",[21,77805,77806],{},"console.log(c) 输出[3,4]",[21,77808,77809],{},"③可以按需导入，忽略某些返回值",[21,77811,77812],{},[1823,77813],{"alt":30,"src":77814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[21,77816,77817],{},"④支持多维数组的结构",[25,77819,77823],{"className":77820,"code":77821,"language":77822,"meta":30,"style":30},"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",[32,77824,77825,77853,77869,77884,77899],{"__ignoreMap":30},[35,77826,77827,77829,77831,77833,77835,77837,77839,77841,77844,77846,77848,77850],{"class":37,"line":38},[35,77828,7126],{"class":495},[35,77830,52159],{"class":359},[35,77832,544],{"class":495},[35,77834,52552],{"class":359},[35,77836,713],{"class":58},[35,77838,12769],{"class":359},[35,77840,574],{"class":58},[35,77842,77843],{"class":359},", [",[35,77845,568],{"class":58},[35,77847,12769],{"class":359},[35,77849,789],{"class":58},[35,77851,77852],{"class":359},"]]\n",[35,77854,77855,77858,77860,77862,77864,77866],{"class":37,"line":45},[35,77856,77857],{"class":359},"console.",[35,77859,58573],{"class":48},[35,77861,4185],{"class":359},[35,77863,687],{"class":58},[35,77865,4550],{"class":359},[35,77867,77868],{"class":41},"  \u002F\u002F1\n",[35,77870,77871,77873,77875,77877,77879,77881],{"class":37,"line":55},[35,77872,77857],{"class":359},[35,77874,58573],{"class":48},[35,77876,4185],{"class":359},[35,77878,713],{"class":58},[35,77880,4550],{"class":359},[35,77882,77883],{"class":41},"  \u002F\u002F2\n",[35,77885,77886,77888,77890,77892,77894,77896],{"class":37,"line":65},[35,77887,77857],{"class":359},[35,77889,58573],{"class":48},[35,77891,4185],{"class":359},[35,77893,574],{"class":58},[35,77895,4550],{"class":359},[35,77897,77898],{"class":41},"  \u002F\u002F[3,4]\n",[35,77900,77901,77903,77905,77907,77909,77911,77913,77915],{"class":37,"line":74},[35,77902,77857],{"class":359},[35,77904,58573],{"class":48},[35,77906,4185],{"class":359},[35,77908,574],{"class":58},[35,77910,5235],{"class":359},[35,77912,687],{"class":58},[35,77914,4550],{"class":359},[35,77916,77917],{"class":41},"  \u002F\u002F3\n",[25,77919,77921],{"className":77820,"code":77920,"language":77822,"meta":30,"style":30},"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",[32,77922,77923,77950,77961,77972],{"__ignoreMap":30},[35,77924,77925,77927,77930,77932,77934,77936,77938,77940,77942,77944,77946,77948],{"class":37,"line":38},[35,77926,7126],{"class":495},[35,77928,77929],{"class":359}," [a, b, c] ",[35,77931,544],{"class":495},[35,77933,52552],{"class":359},[35,77935,713],{"class":58},[35,77937,12769],{"class":359},[35,77939,574],{"class":58},[35,77941,77843],{"class":359},[35,77943,568],{"class":58},[35,77945,12769],{"class":359},[35,77947,789],{"class":58},[35,77949,77852],{"class":359},[35,77951,77952,77954,77956,77959],{"class":37,"line":45},[35,77953,77857],{"class":359},[35,77955,58573],{"class":48},[35,77957,77958],{"class":359},"(a)",[35,77960,77868],{"class":41},[35,77962,77963,77965,77967,77970],{"class":37,"line":55},[35,77964,77857],{"class":359},[35,77966,58573],{"class":48},[35,77968,77969],{"class":359},"(b)",[35,77971,77883],{"class":41},[35,77973,77974,77976,77978,77981],{"class":37,"line":65},[35,77975,77857],{"class":359},[35,77977,58573],{"class":48},[35,77979,77980],{"class":359},"(c)",[35,77982,77898],{"class":41},[25,77984,77986],{"className":77820,"code":77985,"language":77822,"meta":30,"style":30},"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",[32,77987,77988,78015,78025,78035,78045],{"__ignoreMap":30},[35,77989,77990,77992,77995,77997,77999,78001,78003,78005,78007,78009,78011,78013],{"class":37,"line":38},[35,77991,7126],{"class":495},[35,77993,77994],{"class":359}," [a, b, [c, d]] ",[35,77996,544],{"class":495},[35,77998,52552],{"class":359},[35,78000,713],{"class":58},[35,78002,12769],{"class":359},[35,78004,574],{"class":58},[35,78006,77843],{"class":359},[35,78008,568],{"class":58},[35,78010,12769],{"class":359},[35,78012,789],{"class":58},[35,78014,77852],{"class":359},[35,78016,78017,78019,78021,78023],{"class":37,"line":45},[35,78018,77857],{"class":359},[35,78020,58573],{"class":48},[35,78022,77958],{"class":359},[35,78024,77868],{"class":41},[35,78026,78027,78029,78031,78033],{"class":37,"line":55},[35,78028,77857],{"class":359},[35,78030,58573],{"class":48},[35,78032,77969],{"class":359},[35,78034,77883],{"class":41},[35,78036,78037,78039,78041,78043],{"class":37,"line":65},[35,78038,77857],{"class":359},[35,78040,58573],{"class":48},[35,78042,77980],{"class":359},[35,78044,77917],{"class":41},[35,78046,78047,78049,78051,78054],{"class":37,"line":74},[35,78048,77857],{"class":359},[35,78050,58573],{"class":48},[35,78052,78053],{"class":359},"(d)",[35,78055,78056],{"class":41},"  \u002F\u002F4\n",[465,78058,78060],{"id":78059},"_462-对象解构","4.6.2 对象解构",[21,78062,78063],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[21,78065,78066],{},"用的非常非常多！！！！！！",[22332,78068,78070],{"id":78069},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[21,78072,78073],{},"基本语法：",[14,78075,78076,78079,78082,78085],{},[17,78077,78078],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[17,78080,78081],{},"对象属性的值将被赋值给与属性名相同的变量",[17,78083,78084],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[17,78086,78087],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[25,78089,78091],{"className":50959,"code":78090,"language":50961,"meta":30,"style":30},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[32,78092,78093,78098,78103,78108,78112],{"__ignoreMap":30},[35,78094,78095],{"class":37,"line":38},[35,78096,78097],{"class":359},"const obj = {\n",[35,78099,78100],{"class":37,"line":45},[35,78101,78102],{"class":359},"   uname: 'pink老师',\n",[35,78104,78105],{"class":37,"line":55},[35,78106,78107],{"class":359},"   age: 18,\n",[35,78109,78110],{"class":37,"line":65},[35,78111,1926],{"class":359},[35,78113,78114],{"class":37,"line":74},[35,78115,78116],{"class":359},"const { uname, age } = obj\n",[21,78118,78119],{},"上方代码这样写等价于：",[21,78121,78122],{},"const uname等价于obj.uname",[21,78124,78125],{},"变量名可以重新改名：",[21,78127,78128],{},"const uname='red老师'",[21,78130,78131],{},"const user={",[21,78133,78134],{},"  uname:'pink老师',",[21,78136,78137],{},"  age:18",[21,78139,1440],{},[21,78141,78142],{},"const {uname,age}=user",[21,78144,78145],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[21,78147,78148],{},"const {旧变量名：新变量名}=对象",[21,78150,78151],{},"const {uname:username,age}=user",[22332,78153,78155],{"id":78154},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[21,78157,78158],{},[1823,78159],{"alt":30,"src":78160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22332,78162,78164],{"id":78163},"_4623-多级对象解构","4.6.2.3 多级对象解构",[21,78166,78167],{},[1823,78168],{"alt":30,"src":78169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[25,78171,78173],{"className":53393,"code":78172,"language":53395,"meta":30,"style":30},"  \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",[32,78174,78175,78183,78188,78193,78198,78203,78208,78213,78218,78223,78227,78232,78237],{"__ignoreMap":30},[35,78176,78177,78179,78181],{"class":37,"line":38},[35,78178,52470],{"class":359},[35,78180,52139],{"class":51626},[35,78182,51633],{"class":359},[35,78184,78185],{"class":37,"line":45},[35,78186,78187],{"class":359},"    const pig = {\n",[35,78189,78190],{"class":37,"line":55},[35,78191,78192],{"class":359},"      name: '佩奇',\n",[35,78194,78195],{"class":37,"line":65},[35,78196,78197],{"class":359},"      family: {\n",[35,78199,78200],{"class":37,"line":74},[35,78201,78202],{"class":359},"        mother: '猪妈妈',\n",[35,78204,78205],{"class":37,"line":83},[35,78206,78207],{"class":359},"        father: '猪爸爸',\n",[35,78209,78210],{"class":37,"line":92},[35,78211,78212],{"class":359},"        sister: '乔治'\n",[35,78214,78215],{"class":37,"line":101},[35,78216,78217],{"class":359},"      },\n",[35,78219,78220],{"class":37,"line":110},[35,78221,78222],{"class":359},"      age: 6\n",[35,78224,78225],{"class":37,"line":119},[35,78226,2528],{"class":359},[35,78228,78229],{"class":37,"line":128},[35,78230,78231],{"class":359},"    \u002F\u002F 多级对象解构\n",[35,78233,78234],{"class":37,"line":137},[35,78235,78236],{"class":359},"    const { name, family: { mother, father, sister }, age } = pig\n",[35,78238,78239,78241,78243],{"class":37,"line":144},[35,78240,52743],{"class":359},[35,78242,52139],{"class":51626},[35,78244,51633],{"class":359},[21,78246,78247],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[25,78249,78252],{"className":78250,"code":78251,"language":76772,"meta":30,"style":30},"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",[32,78253,78254,78259,78270,78282,78294,78303,78307,78318,78330,78340,78345,78349,78359,78370,78379,78383,78387,78398,78409,78418,78422,78427],{"__ignoreMap":30},[35,78255,78256],{"class":37,"line":38},[35,78257,78258],{"class":41},"    \u002F\u002F 这是后台传递过来的数据\n",[35,78260,78261,78263,78266,78268],{"class":37,"line":45},[35,78262,11555],{"class":495},[35,78264,78265],{"class":359}," msg ",[35,78267,544],{"class":495},[35,78269,15906],{"class":359},[35,78271,78272,78275,78277,78280],{"class":37,"line":55},[35,78273,78274],{"class":306},"      \"code\"",[35,78276,1353],{"class":495},[35,78278,78279],{"class":58}," 200",[35,78281,31792],{"class":359},[35,78283,78284,78287,78289,78292],{"class":37,"line":65},[35,78285,78286],{"class":306},"      \"msg\"",[35,78288,1353],{"class":495},[35,78290,78291],{"class":306}," \"获取新闻列表成功\"",[35,78293,31792],{"class":359},[35,78295,78296,78299,78301],{"class":37,"line":74},[35,78297,78298],{"class":306},"      \"data\"",[35,78300,1353],{"class":495},[35,78302,55773],{"class":359},[35,78304,78305],{"class":37,"line":83},[35,78306,2850],{"class":359},[35,78308,78309,78312,78314,78316],{"class":37,"line":92},[35,78310,78311],{"class":306},"          \"id\"",[35,78313,1353],{"class":495},[35,78315,25450],{"class":58},[35,78317,31792],{"class":359},[35,78319,78320,78323,78325,78328],{"class":37,"line":101},[35,78321,78322],{"class":306},"          \"title\"",[35,78324,1353],{"class":495},[35,78326,78327],{"class":306}," \"5G商用自己，三大运用商收入下降\"",[35,78329,31792],{"class":359},[35,78331,78332,78335,78337],{"class":37,"line":110},[35,78333,78334],{"class":306},"          \"count\"",[35,78336,1353],{"class":495},[35,78338,78339],{"class":58}," 58\n",[35,78341,78342],{"class":37,"line":119},[35,78343,78344],{"class":359},"        },\n",[35,78346,78347],{"class":37,"line":128},[35,78348,2850],{"class":359},[35,78350,78351,78353,78355,78357],{"class":37,"line":137},[35,78352,78311],{"class":306},[35,78354,1353],{"class":495},[35,78356,15089],{"class":58},[35,78358,31792],{"class":359},[35,78360,78361,78363,78365,78368],{"class":37,"line":144},[35,78362,78322],{"class":306},[35,78364,1353],{"class":495},[35,78366,78367],{"class":306}," \"国际媒体头条速览\"",[35,78369,31792],{"class":359},[35,78371,78372,78374,78376],{"class":37,"line":150},[35,78373,78334],{"class":306},[35,78375,1353],{"class":495},[35,78377,78378],{"class":58}," 56\n",[35,78380,78381],{"class":37,"line":159},[35,78382,78344],{"class":359},[35,78384,78385],{"class":37,"line":168},[35,78386,2850],{"class":359},[35,78388,78389,78391,78393,78396],{"class":37,"line":177},[35,78390,78311],{"class":306},[35,78392,1353],{"class":495},[35,78394,78395],{"class":58}," 3",[35,78397,31792],{"class":359},[35,78399,78400,78402,78404,78407],{"class":37,"line":182},[35,78401,78322],{"class":306},[35,78403,1353],{"class":495},[35,78405,78406],{"class":306}," \"乌克兰和俄罗斯持续冲突\"",[35,78408,31792],{"class":359},[35,78410,78411,78413,78415],{"class":37,"line":188},[35,78412,78334],{"class":306},[35,78414,1353],{"class":495},[35,78416,78417],{"class":58}," 1669\n",[35,78419,78420],{"class":37,"line":197},[35,78421,78344],{"class":359},[35,78423,78424],{"class":37,"line":206},[35,78425,78426],{"class":359},"      ]\n",[35,78428,78429],{"class":37,"line":215},[35,78430,2528],{"class":359},[21,78432,78433],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[21,78435,78436],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[21,78438,78439],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[21,78441,78442],{},"function({data}) {",[21,78444,78445],{},"console.log(data)",[21,78447,1440],{},[21,78449,78450],{},"render(msg)",[21,78452,78453],{},"实参传递给形参的时候解构了",[21,78455,78456],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[21,78458,78459],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[21,78461,78462],{},"function render({data:mydata}) {",[21,78464,78465],{},"  console.log(data)",[21,78467,1440],{},[465,78469,78471],{"id":78470},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[21,78473,78474],{},"有两种情况：一个是数组结构，一个是立即执行函数",[14,78476,78477],{},[17,78478,78479],{},"如果对一个数组进行遍历，有两种方式：",[21,78481,78482],{},"①法1",[21,78484,78485],{},"const arr=[1,2,3]",[21,78487,78488],{},"arr.map(function(item,index) {",[21,78490,78491],{},"  console.log(item)",[21,78493,52790],{},[21,78495,78496],{},[1823,78497],{"alt":30,"src":78498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[21,78500,78501],{},"②法2",[21,78503,78504],{},"const str='pink'",[21,78506,78507],{},"[1,2,3].map(function(item,index) {",[21,78509,78510],{},"console.log(item)",[21,78512,52790],{},[21,78514,78515],{},[1823,78516],{"alt":30,"src":78517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[21,78519,78520],{},"此时会报错",[21,78522,78523],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[21,78525,78510],{},[21,78527,52790],{},[21,78529,78530],{},"内部会当成这样处理，所以我们用分号进行隔开",[438,78532,78534],{"id":78533},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[21,78536,78537],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[21,78539,78540],{},"可以理解为加强版的for循环",[21,78542,78543],{},[1823,78544],{"alt":30,"src":78545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[21,78547,78548],{},"里边不写return，不返回数组，只遍历不返回",[21,78550,78551],{},"map是返回数组",[21,78553,78554],{},"forEach主要用于遍历数组对象",[25,78556,78558],{"className":53393,"code":78557,"language":53395,"meta":30,"style":30},"  \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",[32,78559,78560,78568,78573,78578,78583,78588,78592,78597],{"__ignoreMap":30},[35,78561,78562,78564,78566],{"class":37,"line":38},[35,78563,52470],{"class":359},[35,78565,52139],{"class":51626},[35,78567,51633],{"class":359},[35,78569,78570],{"class":37,"line":45},[35,78571,78572],{"class":359},"    const arr = ['red', 'green', 'pink']\n",[35,78574,78575],{"class":37,"line":55},[35,78576,78577],{"class":359},"    const result = arr.forEach(function (item, index) {\n",[35,78579,78580],{"class":37,"line":65},[35,78581,78582],{"class":359},"      console.log(item)\n",[35,78584,78585],{"class":37,"line":74},[35,78586,78587],{"class":359},"      console.log(index)\n",[35,78589,78590],{"class":37,"line":83},[35,78591,33787],{"class":359},[35,78593,78594],{"class":37,"line":92},[35,78595,78596],{"class":359},"    console.log(result)\n",[35,78598,78599,78601,78603],{"class":37,"line":101},[35,78600,52743],{"class":359},[35,78602,52139],{"class":51626},[35,78604,51633],{"class":359},[21,78606,78607],{},[1823,78608],{"alt":30,"src":78609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[438,78611,78613],{"id":78612},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[21,78615,78616],{},[1823,78617],{"alt":30,"src":78618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[21,78620,78621],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[25,78623,78625],{"className":53393,"code":78624,"language":53395,"meta":30,"style":30},"\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",[32,78626,78627,78635,78643,78648,78653,78657,78661,78666,78670,78675,78683],{"__ignoreMap":30},[35,78628,78629,78631,78633],{"class":37,"line":38},[35,78630,1404],{"class":359},[35,78632,52126],{"class":51626},[35,78634,51633],{"class":359},[35,78636,78637,78639,78641],{"class":37,"line":45},[35,78638,52470],{"class":359},[35,78640,52139],{"class":51626},[35,78642,51633],{"class":359},[35,78644,78645],{"class":37,"line":55},[35,78646,78647],{"class":359},"    const arr = [10, 20, 30]\n",[35,78649,78650],{"class":37,"line":65},[35,78651,78652],{"class":359},"    const newArr = arr.filter(function (item, index) {\n",[35,78654,78655],{"class":37,"line":74},[35,78656,78582],{"class":359},[35,78658,78659],{"class":37,"line":83},[35,78660,78587],{"class":359},[35,78662,78663],{"class":37,"line":92},[35,78664,78665],{"class":359},"      return item >= 20\n",[35,78667,78668],{"class":37,"line":101},[35,78669,33787],{"class":359},[35,78671,78672],{"class":37,"line":110},[35,78673,78674],{"class":359},"    console.log(newArr)\n",[35,78676,78677,78679,78681],{"class":37,"line":119},[35,78678,52743],{"class":359},[35,78680,52139],{"class":51626},[35,78682,51633],{"class":359},[35,78684,78685,78687,78689],{"class":37,"line":128},[35,78686,52111],{"class":359},[35,78688,52126],{"class":51626},[35,78690,51633],{"class":359},[21,78692,78693],{},"这个也可以写成箭头函数：",[25,78695,78697],{"className":50959,"code":78696,"language":50961,"meta":30,"style":30},"const newArr = arr.filter(item => item >= 20)\n",[32,78698,78699],{"__ignoreMap":30},[35,78700,78701],{"class":37,"line":38},[35,78702,78696],{"class":359},[438,78704,78706],{"id":78705},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[21,78708,78709],{},[1823,78710],{"alt":30,"src":78711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[21,78713,78714],{},"步骤：",[21,78716,78717],{},"①：渲染页面模块",[1501,78719,78720,78723],{},[17,78721,78722],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[17,78724,78725],{},"用forEach+字符串的形式",[21,78727,78728],{},"②：点击不同需求，显示不同页面内容",[1501,78730,78731,78734,78737,78740,78743],{},[17,78732,78733],{},"点击采取事件委托方式 .filter",[17,78735,78736],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[17,78738,78739],{},"筛选条件是根据点击的 data-index 来判断",[17,78741,78742],{},"可以使用对象解构，把事件对象解构",[17,78744,78745],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[25,78747,78749],{"className":50959,"code":78748,"language":50961,"meta":30,"style":30},"\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",[32,78750,78751,78761,78775,78779,78787,78801,78821,78833,78841,78847,78857,78867,78877,78881,78885,78891,78904,78916,78926,78938,78942,78946,78953,78966,78978,78995,79013,79026,79030,79034,79046,79056,79060,79064,79071,79112,79139,79149,79153,79157,79165,79177,79181,79185,79193,79205,79217,79228,79232,79236,79245,79257,79268,79272,79276,79285,79297,79309,79313,79317,79324,79334,79346,79358,79373,79377,79381,79389,79405,79415,79425,79435,79447,79451,79455,79465,79476,79486,79490,79498,79506,79510,79518,79533,79559,79584,79609,79628,79636,79650,79655,79660,79665,79670,79675,79683,79691,79696,79707,79712,79722,79732,79742,79752,79756,79760,79769,79778,79787,79796,79800,79804,79813,79822,79831,79840,79844,79848,79857,79866,79875,79884,79888,79892,79901,79910,79919,79928,79932,79936,79945,79954,79963,79972,79976,79980,79989,79998,80007,80016,80020,80024,80033,80042,80050,80059,80063,80067,80071,80076,80088,80093,80105,80109,80126,80154,80163,80168,80178,80188,80197,80202,80207,80211,80216,80233,80237,80242,80250,80255,80282,80287,80307,80312,80324,80329,80334,80339,80350,80364,80401,80419,80452,80469,80493,80497,80502,80508,80512,80516,80520,80528,80536,80540],{"__ignoreMap":30},[35,78752,78753,78755,78757,78759],{"class":37,"line":38},[35,78754,51623],{"class":359},[35,78756,51627],{"class":51626},[35,78758,51630],{"class":48},[35,78760,51633],{"class":359},[35,78762,78763,78765,78767,78769,78771,78773],{"class":37,"line":45},[35,78764,1404],{"class":359},[35,78766,50961],{"class":51626},[35,78768,51642],{"class":48},[35,78770,544],{"class":359},[35,78772,51647],{"class":306},[35,78774,51633],{"class":359},[35,78776,78777],{"class":37,"line":55},[35,78778,141],{"emptyLinePlaceholder":140},[35,78780,78781,78783,78785],{"class":37,"line":65},[35,78782,1404],{"class":359},[35,78784,51660],{"class":51626},[35,78786,51633],{"class":359},[35,78788,78789,78791,78793,78795,78797,78799],{"class":37,"line":74},[35,78790,52470],{"class":359},[35,78792,51670],{"class":51626},[35,78794,51673],{"class":48},[35,78796,544],{"class":359},[35,78798,51678],{"class":306},[35,78800,51633],{"class":359},[35,78802,78803,78805,78807,78809,78811,78813,78815,78817,78819],{"class":37,"line":83},[35,78804,52470],{"class":359},[35,78806,51670],{"class":51626},[35,78808,15254],{"class":48},[35,78810,544],{"class":359},[35,78812,51717],{"class":306},[35,78814,51697],{"class":48},[35,78816,544],{"class":359},[35,78818,51724],{"class":306},[35,78820,51633],{"class":359},[35,78822,78823,78825,78827,78829,78831],{"class":37,"line":92},[35,78824,52470],{"class":359},[35,78826,51733],{"class":51626},[35,78828,51736],{"class":359},[35,78830,51733],{"class":51626},[35,78832,51633],{"class":359},[35,78834,78835,78837,78839],{"class":37,"line":101},[35,78836,52470],{"class":359},[35,78838,416],{"class":51626},[35,78840,51633],{"class":359},[35,78842,78843,78845],{"class":37,"line":110},[35,78844,6737],{"class":51626},[35,78846,15906],{"class":359},[35,78848,78849,78851,78853,78855],{"class":37,"line":119},[35,78850,55021],{"class":58},[35,78852,51763],{"class":359},[35,78854,687],{"class":58},[35,78856,1655],{"class":359},[35,78858,78859,78861,78863,78865],{"class":37,"line":128},[35,78860,55032],{"class":58},[35,78862,51763],{"class":359},[35,78864,687],{"class":58},[35,78866,1655],{"class":359},[35,78868,78869,78871,78873,78875],{"class":37,"line":137},[35,78870,72921],{"class":58},[35,78872,51763],{"class":359},[35,78874,60831],{"class":58},[35,78876,1655],{"class":359},[35,78878,78879],{"class":37,"line":144},[35,78880,2528],{"class":359},[35,78882,78883],{"class":37,"line":150},[35,78884,141],{"emptyLinePlaceholder":140},[35,78886,78887,78889],{"class":37,"line":159},[35,78888,62449],{"class":48},[35,78890,15906],{"class":359},[35,78892,78893,78895,78897,78900,78902],{"class":37,"line":168},[35,78894,55097],{"class":58},[35,78896,51763],{"class":359},[35,78898,78899],{"class":58},"990",[35,78901,51818],{"class":495},[35,78903,1655],{"class":359},[35,78905,78906,78908,78910,78912,78914],{"class":37,"line":177},[35,78907,55032],{"class":58},[35,78909,51763],{"class":359},[35,78911,687],{"class":58},[35,78913,51882],{"class":58},[35,78915,1655],{"class":359},[35,78917,78918,78920,78922,78924],{"class":37,"line":182},[35,78919,55335],{"class":58},[35,78921,51763],{"class":359},[35,78923,51803],{"class":58},[35,78925,1655],{"class":359},[35,78927,78928,78931,78933,78936],{"class":37,"line":188},[35,78929,78930],{"class":58},"      flex-wrap",[35,78932,51763],{"class":359},[35,78934,78935],{"class":58},"wrap",[35,78937,1655],{"class":359},[35,78939,78940],{"class":37,"line":197},[35,78941,2528],{"class":359},[35,78943,78944],{"class":37,"line":206},[35,78945,141],{"emptyLinePlaceholder":140},[35,78947,78948,78951],{"class":37,"line":215},[35,78949,78950],{"class":48},"    .item",[35,78952,15906],{"class":359},[35,78954,78955,78957,78959,78962,78964],{"class":37,"line":224},[35,78956,55097],{"class":58},[35,78958,51763],{"class":359},[35,78960,78961],{"class":58},"240",[35,78963,51818],{"class":495},[35,78965,1655],{"class":359},[35,78967,78968,78970,78972,78974,78976],{"class":37,"line":233},[35,78969,62326],{"class":58},[35,78971,51763],{"class":359},[35,78973,940],{"class":58},[35,78975,51818],{"class":495},[35,78977,1655],{"class":359},[35,78979,78980,78982,78984,78986,78988,78991,78993],{"class":37,"line":238},[35,78981,55021],{"class":58},[35,78983,51763],{"class":359},[35,78985,1194],{"class":58},[35,78987,51818],{"class":495},[35,78989,78990],{"class":58}," 30",[35,78992,51818],{"class":495},[35,78994,1655],{"class":359},[35,78996,78997,78999,79001,79003,79006,79009,79011],{"class":37,"line":244},[35,78998,62186],{"class":58},[35,79000,51763],{"class":359},[35,79002,28449],{"class":58},[35,79004,79005],{"class":58}," ease",[35,79007,79008],{"class":58}," .5",[35,79010,1189],{"class":495},[35,79012,1655],{"class":359},[35,79014,79015,79018,79020,79022,79024],{"class":37,"line":253},[35,79016,79017],{"class":58},"      margin-bottom",[35,79019,51763],{"class":359},[35,79021,1194],{"class":58},[35,79023,51818],{"class":495},[35,79025,1655],{"class":359},[35,79027,79028],{"class":37,"line":262},[35,79029,2528],{"class":359},[35,79031,79032],{"class":37,"line":271},[35,79033,141],{"emptyLinePlaceholder":140},[35,79035,79036,79039,79041,79044],{"class":37,"line":280},[35,79037,79038],{"class":48},"    .item:nth-child",[35,79040,499],{"class":359},[35,79042,79043],{"class":58},"4n",[35,79045,12776],{"class":359},[35,79047,79048,79050,79052,79054],{"class":37,"line":289},[35,79049,62326],{"class":58},[35,79051,51763],{"class":359},[35,79053,687],{"class":58},[35,79055,1655],{"class":359},[35,79057,79058],{"class":37,"line":294},[35,79059,2528],{"class":359},[35,79061,79062],{"class":37,"line":300},[35,79063,141],{"emptyLinePlaceholder":140},[35,79065,79066,79069],{"class":37,"line":313},[35,79067,79068],{"class":48},"    .item:hover",[35,79070,15906],{"class":359},[35,79072,79073,79076,79078,79080,79082,79084,79086,79088,79090,79093,79095,79097,79099,79101,79103,79105,79107,79110],{"class":37,"line":324},[35,79074,79075],{"class":58},"      box-shadow",[35,79077,51763],{"class":359},[35,79079,687],{"class":58},[35,79081,51818],{"class":495},[35,79083,4427],{"class":58},[35,79085,51818],{"class":495},[35,79087,2489],{"class":58},[35,79089,51818],{"class":495},[35,79091,79092],{"class":58}," rgba",[35,79094,499],{"class":359},[35,79096,687],{"class":58},[35,79098,12769],{"class":359},[35,79100,687],{"class":58},[35,79102,12769],{"class":359},[35,79104,687],{"class":58},[35,79106,12769],{"class":359},[35,79108,79109],{"class":58},".2",[35,79111,3053],{"class":359},[35,79113,79114,79117,79119,79122,79124,79126,79128,79131,79133,79135,79137],{"class":37,"line":2955},[35,79115,79116],{"class":58},"      transform",[35,79118,51763],{"class":359},[35,79120,79121],{"class":58},"translate3d",[35,79123,499],{"class":359},[35,79125,687],{"class":58},[35,79127,12769],{"class":359},[35,79129,79130],{"class":58},"-4",[35,79132,51818],{"class":495},[35,79134,12769],{"class":359},[35,79136,687],{"class":58},[35,79138,3053],{"class":359},[35,79140,79141,79143,79145,79147],{"class":37,"line":8282},[35,79142,62351],{"class":58},[35,79144,51763],{"class":359},[35,79146,62356],{"class":58},[35,79148,1655],{"class":359},[35,79150,79151],{"class":37,"line":8306},[35,79152,2528],{"class":359},[35,79154,79155],{"class":37,"line":8311},[35,79156,141],{"emptyLinePlaceholder":140},[35,79158,79159,79161,79163],{"class":37,"line":8317},[35,79160,78950],{"class":48},[35,79162,55941],{"class":51626},[35,79164,15906],{"class":359},[35,79166,79167,79169,79171,79173,79175],{"class":37,"line":8344},[35,79168,55097],{"class":58},[35,79170,51763],{"class":359},[35,79172,807],{"class":58},[35,79174,823],{"class":495},[35,79176,1655],{"class":359},[35,79178,79179],{"class":37,"line":8349},[35,79180,2528],{"class":359},[35,79182,79183],{"class":37,"line":8355},[35,79184,141],{"emptyLinePlaceholder":140},[35,79186,79187,79189,79191],{"class":37,"line":8367},[35,79188,78950],{"class":48},[35,79190,62630],{"class":48},[35,79192,15906],{"class":359},[35,79194,79195,79197,79199,79201,79203],{"class":37,"line":8379},[35,79196,55248],{"class":58},[35,79198,51763],{"class":359},[35,79200,1144],{"class":58},[35,79202,51818],{"class":495},[35,79204,1655],{"class":359},[35,79206,79207,79209,79211,79213,79215],{"class":37,"line":8391},[35,79208,79017],{"class":58},[35,79210,51763],{"class":359},[35,79212,940],{"class":58},[35,79214,51818],{"class":495},[35,79216,1655],{"class":359},[35,79218,79219,79221,79223,79226],{"class":37,"line":10050},[35,79220,57742],{"class":58},[35,79222,51763],{"class":359},[35,79224,79225],{"class":58},"#666",[35,79227,1655],{"class":359},[35,79229,79230],{"class":37,"line":10075},[35,79231,2528],{"class":359},[35,79233,79234],{"class":37,"line":10098},[35,79235,141],{"emptyLinePlaceholder":140},[35,79237,79238,79240,79243],{"class":37,"line":10122},[35,79239,78950],{"class":48},[35,79241,79242],{"class":48}," .price",[35,79244,15906],{"class":359},[35,79246,79247,79249,79251,79253,79255],{"class":37,"line":10127},[35,79248,55248],{"class":58},[35,79250,51763],{"class":359},[35,79252,1244],{"class":58},[35,79254,51818],{"class":495},[35,79256,1655],{"class":359},[35,79258,79259,79261,79263,79266],{"class":37,"line":10132},[35,79260,57742],{"class":58},[35,79262,51763],{"class":359},[35,79264,79265],{"class":58},"firebrick",[35,79267,1655],{"class":359},[35,79269,79270],{"class":37,"line":10137},[35,79271,2528],{"class":359},[35,79273,79274],{"class":37,"line":10146},[35,79275,141],{"emptyLinePlaceholder":140},[35,79277,79278,79280,79283],{"class":37,"line":10151},[35,79279,78950],{"class":48},[35,79281,79282],{"class":48}," .price::before",[35,79284,15906],{"class":359},[35,79286,79287,79290,79292,79295],{"class":37,"line":10157},[35,79288,79289],{"class":58},"      content",[35,79291,51763],{"class":359},[35,79293,79294],{"class":306},"'￥'",[35,79296,1655],{"class":359},[35,79298,79299,79301,79303,79305,79307],{"class":37,"line":10178},[35,79300,55248],{"class":58},[35,79302,51763],{"class":359},[35,79304,1043],{"class":58},[35,79306,51818],{"class":495},[35,79308,1655],{"class":359},[35,79310,79311],{"class":37,"line":10184},[35,79312,2528],{"class":359},[35,79314,79315],{"class":37,"line":10198},[35,79316,141],{"emptyLinePlaceholder":140},[35,79318,79319,79322],{"class":37,"line":10204},[35,79320,79321],{"class":48},"    .filter",[35,79323,15906],{"class":359},[35,79325,79326,79328,79330,79332],{"class":37,"line":10231},[35,79327,55335],{"class":58},[35,79329,51763],{"class":359},[35,79331,51803],{"class":58},[35,79333,1655],{"class":359},[35,79335,79336,79338,79340,79342,79344],{"class":37,"line":10240},[35,79337,55097],{"class":58},[35,79339,51763],{"class":359},[35,79341,78899],{"class":58},[35,79343,51818],{"class":495},[35,79345,1655],{"class":359},[35,79347,79348,79350,79352,79354,79356],{"class":37,"line":10246},[35,79349,55032],{"class":58},[35,79351,51763],{"class":359},[35,79353,687],{"class":58},[35,79355,51882],{"class":58},[35,79357,1655],{"class":359},[35,79359,79360,79362,79364,79366,79368,79370],{"class":37,"line":10254},[35,79361,55021],{"class":58},[35,79363,51763],{"class":359},[35,79365,1150],{"class":58},[35,79367,51818],{"class":495},[35,79369,78990],{"class":58},[35,79371,79372],{"class":495},"px\n",[35,79374,79375],{"class":37,"line":10259},[35,79376,2528],{"class":359},[35,79378,79379],{"class":37,"line":16938},[35,79380,141],{"emptyLinePlaceholder":140},[35,79382,79383,79385,79387],{"class":37,"line":16944},[35,79384,79321],{"class":48},[35,79386,1759],{"class":51626},[35,79388,15906],{"class":359},[35,79390,79391,79393,79395,79397,79399,79401,79403],{"class":37,"line":16967},[35,79392,55021],{"class":58},[35,79394,51763],{"class":359},[35,79396,940],{"class":58},[35,79398,51818],{"class":495},[35,79400,9284],{"class":58},[35,79402,51818],{"class":495},[35,79404,1655],{"class":359},[35,79406,79407,79409,79411,79413],{"class":37,"line":16973},[35,79408,62047],{"class":58},[35,79410,51763],{"class":359},[35,79412,62144],{"class":58},[35,79414,1655],{"class":359},[35,79416,79417,79419,79421,79423],{"class":37,"line":16996},[35,79418,57742],{"class":58},[35,79420,51763],{"class":359},[35,79422,79225],{"class":58},[35,79424,1655],{"class":359},[35,79426,79427,79429,79431,79433],{"class":37,"line":17010},[35,79428,64296],{"class":58},[35,79430,51763],{"class":359},[35,79432,55063],{"class":58},[35,79434,1655],{"class":359},[35,79436,79437,79439,79441,79443,79445],{"class":37,"line":17030},[35,79438,62076],{"class":58},[35,79440,51763],{"class":359},[35,79442,1194],{"class":58},[35,79444,51818],{"class":495},[35,79446,1655],{"class":359},[35,79448,79449],{"class":37,"line":17036},[35,79450,2528],{"class":359},[35,79452,79453],{"class":37,"line":17047},[35,79454,141],{"emptyLinePlaceholder":140},[35,79456,79457,79459,79461,79463],{"class":37,"line":17070},[35,79458,79321],{"class":48},[35,79460,1759],{"class":51626},[35,79462,62226],{"class":48},[35,79464,15906],{"class":359},[35,79466,79467,79469,79471,79474],{"class":37,"line":17092},[35,79468,55210],{"class":58},[35,79470,51763],{"class":359},[35,79472,79473],{"class":58},"#05943c",[35,79475,1655],{"class":359},[35,79477,79478,79480,79482,79484],{"class":37,"line":17097},[35,79479,57742],{"class":58},[35,79481,51763],{"class":359},[35,79483,61168],{"class":58},[35,79485,1655],{"class":359},[35,79487,79488],{"class":37,"line":17103},[35,79489,2528],{"class":359},[35,79491,79492,79494,79496],{"class":37,"line":17117},[35,79493,52743],{"class":359},[35,79495,416],{"class":51626},[35,79497,51633],{"class":359},[35,79499,79500,79502,79504],{"class":37,"line":17130},[35,79501,52111],{"class":359},[35,79503,51660],{"class":51626},[35,79505,51633],{"class":359},[35,79507,79508],{"class":37,"line":17135},[35,79509,141],{"emptyLinePlaceholder":140},[35,79511,79512,79514,79516],{"class":37,"line":17149},[35,79513,1404],{"class":359},[35,79515,52126],{"class":51626},[35,79517,51633],{"class":359},[35,79519,79520,79522,79524,79526,79528,79531],{"class":37,"line":17154},[35,79521,52470],{"class":359},[35,79523,51937],{"class":51626},[35,79525,53812],{"class":48},[35,79527,544],{"class":359},[35,79529,79530],{"class":306},"\"filter\"",[35,79532,51633],{"class":359},[35,79534,79535,79537,79539,79541,79543,79545,79548,79550,79552,79555,79557],{"class":37,"line":17160},[35,79536,51667],{"class":359},[35,79538,734],{"class":51626},[35,79540,61383],{"class":48},[35,79542,544],{"class":359},[35,79544,61388],{"class":306},[35,79546,79547],{"class":48}," data-index",[35,79549,544],{"class":359},[35,79551,4012],{"class":306},[35,79553,79554],{"class":359},">0-100元\u003C\u002F",[35,79556,734],{"class":51626},[35,79558,51633],{"class":359},[35,79560,79561,79563,79565,79567,79569,79571,79573,79575,79577,79580,79582],{"class":37,"line":17165},[35,79562,51667],{"class":359},[35,79564,734],{"class":51626},[35,79566,61383],{"class":48},[35,79568,544],{"class":359},[35,79570,61388],{"class":306},[35,79572,79547],{"class":48},[35,79574,544],{"class":359},[35,79576,4035],{"class":306},[35,79578,79579],{"class":359},">100-300元\u003C\u002F",[35,79581,734],{"class":51626},[35,79583,51633],{"class":359},[35,79585,79586,79588,79590,79592,79594,79596,79598,79600,79602,79605,79607],{"class":37,"line":17179},[35,79587,51667],{"class":359},[35,79589,734],{"class":51626},[35,79591,61383],{"class":48},[35,79593,544],{"class":359},[35,79595,61388],{"class":306},[35,79597,79547],{"class":48},[35,79599,544],{"class":359},[35,79601,4048],{"class":306},[35,79603,79604],{"class":359},">300元以上\u003C\u002F",[35,79606,734],{"class":51626},[35,79608,51633],{"class":359},[35,79610,79611,79613,79615,79617,79619,79621,79624,79626],{"class":37,"line":17184},[35,79612,51667],{"class":359},[35,79614,734],{"class":51626},[35,79616,61383],{"class":48},[35,79618,544],{"class":359},[35,79620,61388],{"class":306},[35,79622,79623],{"class":359},">全部区间\u003C\u002F",[35,79625,734],{"class":51626},[35,79627,51633],{"class":359},[35,79629,79630,79632,79634],{"class":37,"line":17189},[35,79631,52743],{"class":359},[35,79633,51937],{"class":51626},[35,79635,51633],{"class":359},[35,79637,79638,79640,79642,79644,79646,79648],{"class":37,"line":17203},[35,79639,52470],{"class":359},[35,79641,51937],{"class":51626},[35,79643,53812],{"class":48},[35,79645,544],{"class":359},[35,79647,62934],{"class":306},[35,79649,51633],{"class":359},[35,79651,79652],{"class":37,"line":17215},[35,79653,79654],{"class":41},"    \u003C!-- \u003Cdiv class=\"item\">\n",[35,79656,79657],{"class":37,"line":17220},[35,79658,79659],{"class":41},"      \u003Cimg src=\"\" alt=\"\">\n",[35,79661,79662],{"class":37,"line":17233},[35,79663,79664],{"class":41},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[35,79666,79667],{"class":37,"line":17238},[35,79668,79669],{"class":41},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[35,79671,79672],{"class":37,"line":17243},[35,79673,79674],{"class":41},"    \u003C\u002Fdiv> -->\n",[35,79676,79677,79679,79681],{"class":37,"line":17248},[35,79678,52743],{"class":359},[35,79680,51937],{"class":51626},[35,79682,51633],{"class":359},[35,79684,79685,79687,79689],{"class":37,"line":17261},[35,79686,52470],{"class":359},[35,79688,52139],{"class":51626},[35,79690,51633],{"class":359},[35,79692,79693],{"class":37,"line":17266},[35,79694,79695],{"class":41},"    \u002F\u002F 2. 初始化数据\n",[35,79697,79698,79700,79703,79705],{"class":37,"line":32959},[35,79699,11555],{"class":495},[35,79701,79702],{"class":58}," goodsList",[35,79704,13898],{"class":495},[35,79706,55773],{"class":359},[35,79708,79709],{"class":37,"line":32965},[35,79710,79711],{"class":359},"      {\n",[35,79713,79714,79717,79720],{"class":37,"line":32971},[35,79715,79716],{"class":359},"        id: ",[35,79718,79719],{"class":306},"'4001172'",[35,79721,31792],{"class":359},[35,79723,79724,79727,79730],{"class":37,"line":32977},[35,79725,79726],{"class":359},"        name: ",[35,79728,79729],{"class":306},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[35,79731,31792],{"class":359},[35,79733,79734,79737,79740],{"class":37,"line":32983},[35,79735,79736],{"class":359},"        price: ",[35,79738,79739],{"class":306},"'289.00'",[35,79741,31792],{"class":359},[35,79743,79744,79747,79750],{"class":37,"line":32994},[35,79745,79746],{"class":359},"        picture: ",[35,79748,79749],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[35,79751,31792],{"class":359},[35,79753,79754],{"class":37,"line":33000},[35,79755,78217],{"class":359},[35,79757,79758],{"class":37,"line":33020},[35,79759,79711],{"class":359},[35,79761,79762,79764,79767],{"class":37,"line":33026},[35,79763,79716],{"class":359},[35,79765,79766],{"class":306},"'4001594'",[35,79768,31792],{"class":359},[35,79770,79771,79773,79776],{"class":37,"line":33037},[35,79772,79726],{"class":359},[35,79774,79775],{"class":306},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[35,79777,31792],{"class":359},[35,79779,79780,79782,79785],{"class":37,"line":33043},[35,79781,79736],{"class":359},[35,79783,79784],{"class":306},"'288.00'",[35,79786,31792],{"class":359},[35,79788,79789,79791,79794],{"class":37,"line":33049},[35,79790,79746],{"class":359},[35,79792,79793],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[35,79795,31792],{"class":359},[35,79797,79798],{"class":37,"line":33055},[35,79799,78217],{"class":359},[35,79801,79802],{"class":37,"line":33061},[35,79803,79711],{"class":359},[35,79805,79806,79808,79811],{"class":37,"line":33067},[35,79807,79716],{"class":359},[35,79809,79810],{"class":306},"'4001009'",[35,79812,31792],{"class":359},[35,79814,79815,79817,79820],{"class":37,"line":33073},[35,79816,79726],{"class":359},[35,79818,79819],{"class":306},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[35,79821,31792],{"class":359},[35,79823,79824,79826,79829],{"class":37,"line":33079},[35,79825,79736],{"class":359},[35,79827,79828],{"class":306},"'109.00'",[35,79830,31792],{"class":359},[35,79832,79833,79835,79838],{"class":37,"line":33099},[35,79834,79746],{"class":359},[35,79836,79837],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[35,79839,31792],{"class":359},[35,79841,79842],{"class":37,"line":33105},[35,79843,78217],{"class":359},[35,79845,79846],{"class":37,"line":33121},[35,79847,79711],{"class":359},[35,79849,79850,79852,79855],{"class":37,"line":33127},[35,79851,79716],{"class":359},[35,79853,79854],{"class":306},"'4001874'",[35,79856,31792],{"class":359},[35,79858,79859,79861,79864],{"class":37,"line":33141},[35,79860,79726],{"class":359},[35,79862,79863],{"class":306},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[35,79865,31792],{"class":359},[35,79867,79868,79870,79873],{"class":37,"line":33147},[35,79869,79736],{"class":359},[35,79871,79872],{"class":306},"'488.00'",[35,79874,31792],{"class":359},[35,79876,79877,79879,79882],{"class":37,"line":33162},[35,79878,79746],{"class":359},[35,79880,79881],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[35,79883,31792],{"class":359},[35,79885,79886],{"class":37,"line":33168},[35,79887,78217],{"class":359},[35,79889,79890],{"class":37,"line":33177},[35,79891,79711],{"class":359},[35,79893,79894,79896,79899],{"class":37,"line":33183},[35,79895,79716],{"class":359},[35,79897,79898],{"class":306},"'4001649'",[35,79900,31792],{"class":359},[35,79902,79903,79905,79908],{"class":37,"line":33192},[35,79904,79726],{"class":359},[35,79906,79907],{"class":306},"'大师监制龙泉青瓷茶叶罐'",[35,79909,31792],{"class":359},[35,79911,79912,79914,79917],{"class":37,"line":33198},[35,79913,79736],{"class":359},[35,79915,79916],{"class":306},"'139.00'",[35,79918,31792],{"class":359},[35,79920,79921,79923,79926],{"class":37,"line":33204},[35,79922,79746],{"class":359},[35,79924,79925],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[35,79927,31792],{"class":359},[35,79929,79930],{"class":37,"line":33213},[35,79931,78217],{"class":359},[35,79933,79934],{"class":37,"line":33219},[35,79935,79711],{"class":359},[35,79937,79938,79940,79943],{"class":37,"line":33230},[35,79939,79716],{"class":359},[35,79941,79942],{"class":306},"'3997185'",[35,79944,31792],{"class":359},[35,79946,79947,79949,79952],{"class":37,"line":33236},[35,79948,79726],{"class":359},[35,79950,79951],{"class":306},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[35,79953,31792],{"class":359},[35,79955,79956,79958,79961],{"class":37,"line":33255},[35,79957,79736],{"class":359},[35,79959,79960],{"class":306},"'108.00'",[35,79962,31792],{"class":359},[35,79964,79965,79967,79970],{"class":37,"line":33261},[35,79966,79746],{"class":359},[35,79968,79969],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[35,79971,31792],{"class":359},[35,79973,79974],{"class":37,"line":33272},[35,79975,78217],{"class":359},[35,79977,79978],{"class":37,"line":33278},[35,79979,79711],{"class":359},[35,79981,79982,79984,79987],{"class":37,"line":33298},[35,79983,79716],{"class":359},[35,79985,79986],{"class":306},"'3997403'",[35,79988,31792],{"class":359},[35,79990,79991,79993,79996],{"class":37,"line":33314},[35,79992,79726],{"class":359},[35,79994,79995],{"class":306},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[35,79997,31792],{"class":359},[35,79999,80000,80002,80005],{"class":37,"line":33320},[35,80001,79736],{"class":359},[35,80003,80004],{"class":306},"'100.00'",[35,80006,31792],{"class":359},[35,80008,80009,80011,80014],{"class":37,"line":33334},[35,80010,79746],{"class":359},[35,80012,80013],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[35,80015,31792],{"class":359},[35,80017,80018],{"class":37,"line":33340},[35,80019,78217],{"class":359},[35,80021,80022],{"class":37,"line":33346},[35,80023,79711],{"class":359},[35,80025,80026,80028,80031],{"class":37,"line":33357},[35,80027,79716],{"class":359},[35,80029,80030],{"class":306},"'3998274'",[35,80032,31792],{"class":359},[35,80034,80035,80037,80040],{"class":37,"line":33363},[35,80036,79726],{"class":359},[35,80038,80039],{"class":306},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[35,80041,31792],{"class":359},[35,80043,80044,80046,80048],{"class":37,"line":33369},[35,80045,79736],{"class":359},[35,80047,79916],{"class":306},[35,80049,31792],{"class":359},[35,80051,80052,80054,80057],{"class":37,"line":33379},[35,80053,79746],{"class":359},[35,80055,80056],{"class":306},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[35,80058,31792],{"class":359},[35,80060,80061],{"class":37,"line":33385},[35,80062,78217],{"class":359},[35,80064,80065],{"class":37,"line":33396},[35,80066,53435],{"class":359},[35,80068,80069],{"class":37,"line":33402},[35,80070,141],{"emptyLinePlaceholder":140},[35,80072,80073],{"class":37,"line":33412},[35,80074,80075],{"class":41},"    \u002F\u002F 1.渲染函数\n",[35,80077,80078,80080,80082,80084,80086],{"class":37,"line":33417},[35,80079,70410],{"class":495},[35,80081,70413],{"class":48},[35,80083,499],{"class":359},[35,80085,4214],{"class":5550},[35,80087,12776],{"class":359},[35,80089,80090],{"class":37,"line":33423},[35,80091,80092],{"class":41},"      \u002F\u002F 声明空字符串\n",[35,80094,80095,80098,80101,80103],{"class":37,"line":33472},[35,80096,80097],{"class":495},"      let",[35,80099,80100],{"class":359}," str ",[35,80102,544],{"class":495},[35,80104,70430],{"class":306},[35,80106,80107],{"class":37,"line":33519},[35,80108,70435],{"class":41},[35,80110,80111,80113,80116,80118,80121,80124],{"class":37,"line":33524},[35,80112,58333],{"class":359},[35,80114,80115],{"class":48},"forEach",[35,80117,499],{"class":359},[35,80119,80120],{"class":5550},"item",[35,80122,80123],{"class":495}," =>",[35,80125,15906],{"class":359},[35,80127,80128,80130,80133,80136,80138,80141,80143,80146,80149,80151],{"class":37,"line":33530},[35,80129,61596],{"class":495},[35,80131,80132],{"class":359}," { ",[35,80134,80135],{"class":58},"name",[35,80137,12769],{"class":359},[35,80139,80140],{"class":58},"price",[35,80142,12769],{"class":359},[35,80144,80145],{"class":58},"picture",[35,80147,80148],{"class":359}," } ",[35,80150,544],{"class":495},[35,80152,80153],{"class":359}," item\n",[35,80155,80156,80159,80161],{"class":37,"line":33549},[35,80157,80158],{"class":359},"        str ",[35,80160,9811],{"class":495},[35,80162,70494],{"class":306},[35,80164,80165],{"class":37,"line":33555},[35,80166,80167],{"class":306},"          \u003Cdiv class=\"item\">\n",[35,80169,80170,80173,80175],{"class":37,"line":33575},[35,80171,80172],{"class":306},"            \u003Cimg src=\"${",[35,80174,80145],{"class":359},[35,80176,80177],{"class":306},"}\" alt=\"\">\n",[35,80179,80180,80183,80185],{"class":37,"line":33581},[35,80181,80182],{"class":306},"            \u003Cp class=\"name\">${",[35,80184,80135],{"class":359},[35,80186,80187],{"class":306},"}\u003C\u002Fp>\n",[35,80189,80190,80193,80195],{"class":37,"line":33587},[35,80191,80192],{"class":306},"            \u003Cp class=\"price\">${",[35,80194,80140],{"class":359},[35,80196,80187],{"class":306},[35,80198,80199],{"class":37,"line":33597},[35,80200,80201],{"class":306},"          \u003C\u002Fdiv>\n",[35,80203,80204],{"class":37,"line":33602},[35,80205,80206],{"class":306},"        `\n",[35,80208,80209],{"class":37,"line":33608},[35,80210,65141],{"class":359},[35,80212,80213],{"class":37,"line":33624},[35,80214,80215],{"class":41},"      \u002F\u002F 追加给List\n",[35,80217,80218,80220,80222,80224,80227,80229,80231],{"class":37,"line":33669},[35,80219,56097],{"class":359},[35,80221,54725],{"class":48},[35,80223,499],{"class":359},[35,80225,80226],{"class":306},"'.list'",[35,80228,74574],{"class":359},[35,80230,544],{"class":495},[35,80232,74310],{"class":359},[35,80234,80235],{"class":37,"line":33675},[35,80236,2528],{"class":359},[35,80238,80239],{"class":37,"line":33681},[35,80240,80241],{"class":41},"    \u002F\u002F 页面一打开就需要渲染\n",[35,80243,80244,80247],{"class":37,"line":33687},[35,80245,80246],{"class":48},"    render",[35,80248,80249],{"class":359},"(goodsList)\n",[35,80251,80252],{"class":37,"line":33698},[35,80253,80254],{"class":41},"    \u002F\u002F 2.过滤筛选\n",[35,80256,80257,80259,80261,80263,80266,80268,80270,80272,80274,80276,80278,80280],{"class":37,"line":33704},[35,80258,52733],{"class":359},[35,80260,54725],{"class":48},[35,80262,499],{"class":359},[35,80264,80265],{"class":306},"'.filter'",[35,80267,31152],{"class":359},[35,80269,58139],{"class":48},[35,80271,499],{"class":359},[35,80273,58144],{"class":306},[35,80275,12769],{"class":359},[35,80277,571],{"class":5550},[35,80279,80123],{"class":495},[35,80281,15906],{"class":359},[35,80283,80284],{"class":37,"line":33710},[35,80285,80286],{"class":41},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[35,80288,80289,80291,80293,80296,80298,80300,80302,80304],{"class":37,"line":33716},[35,80290,58554],{"class":495},[35,80292,80132],{"class":359},[35,80294,80295],{"class":58},"tagName",[35,80297,12769],{"class":359},[35,80299,31863],{"class":58},[35,80301,80148],{"class":359},[35,80303,544],{"class":495},[35,80305,80306],{"class":359}," e.target\n",[35,80308,80309],{"class":37,"line":33734},[35,80310,80311],{"class":41},"      \u002F\u002F 判断\n",[35,80313,80314,80316,80318,80320,80322],{"class":37,"line":33748},[35,80315,54806],{"class":495},[35,80317,67360],{"class":359},[35,80319,54812],{"class":495},[35,80321,68582],{"class":306},[35,80323,12776],{"class":359},[35,80325,80326],{"class":37,"line":33757},[35,80327,80328],{"class":41},"        \u002F\u002F console.log(11)\n",[35,80330,80331],{"class":37,"line":33766},[35,80332,80333],{"class":41},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[35,80335,80336],{"class":37,"line":33775},[35,80337,80338],{"class":41},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[35,80340,80341,80343,80345,80347],{"class":37,"line":33784},[35,80342,52156],{"class":495},[35,80344,52159],{"class":359},[35,80346,544],{"class":495},[35,80348,80349],{"class":359}," goodsList\n",[35,80351,80352,80354,80357,80359,80362],{"class":37,"line":33790},[35,80353,2837],{"class":495},[35,80355,80356],{"class":359}," (dataset.index ",[35,80358,54812],{"class":495},[35,80360,80361],{"class":306}," '1'",[35,80363,12776],{"class":359},[35,80365,80366,80369,80371,80374,80377,80379,80381,80383,80386,80388,80390,80393,80395,80397,80399],{"class":37,"line":33796},[35,80367,80368],{"class":359},"          arr ",[35,80370,544],{"class":495},[35,80372,80373],{"class":359}," goodsList.",[35,80375,80376],{"class":48},"filter",[35,80378,499],{"class":359},[35,80380,80120],{"class":5550},[35,80382,80123],{"class":495},[35,80384,80385],{"class":359}," item.price ",[35,80387,2060],{"class":495},[35,80389,4427],{"class":58},[35,80391,80392],{"class":495}," &&",[35,80394,80385],{"class":359},[35,80396,1949],{"class":495},[35,80398,6088],{"class":58},[35,80400,505],{"class":359},[35,80402,80403,80406,80408,80410,80412,80414,80417],{"class":37,"line":33804},[35,80404,80405],{"class":359},"        } ",[35,80407,2051],{"class":495},[35,80409,2054],{"class":495},[35,80411,80356],{"class":359},[35,80413,54812],{"class":495},[35,80415,80416],{"class":306}," '2'",[35,80418,12776],{"class":359},[35,80420,80421,80423,80425,80427,80429,80431,80433,80435,80437,80439,80441,80443,80445,80447,80450],{"class":37,"line":33809},[35,80422,80368],{"class":359},[35,80424,544],{"class":495},[35,80426,80373],{"class":359},[35,80428,80376],{"class":48},[35,80430,499],{"class":359},[35,80432,80120],{"class":5550},[35,80434,80123],{"class":495},[35,80436,80385],{"class":359},[35,80438,2060],{"class":495},[35,80440,6088],{"class":58},[35,80442,80392],{"class":495},[35,80444,80385],{"class":359},[35,80446,1949],{"class":495},[35,80448,80449],{"class":58}," 300",[35,80451,505],{"class":359},[35,80453,80454,80456,80458,80460,80462,80464,80467],{"class":37,"line":33815},[35,80455,80405],{"class":359},[35,80457,2051],{"class":495},[35,80459,2054],{"class":495},[35,80461,80356],{"class":359},[35,80463,54812],{"class":495},[35,80465,80466],{"class":306}," '3'",[35,80468,12776],{"class":359},[35,80470,80471,80473,80475,80477,80479,80481,80483,80485,80487,80489,80491],{"class":37,"line":33826},[35,80472,80368],{"class":359},[35,80474,544],{"class":495},[35,80476,80373],{"class":359},[35,80478,80376],{"class":48},[35,80480,499],{"class":359},[35,80482,80120],{"class":5550},[35,80484,80123],{"class":495},[35,80486,80385],{"class":359},[35,80488,2060],{"class":495},[35,80490,80449],{"class":58},[35,80492,505],{"class":359},[35,80494,80495],{"class":37,"line":33832},[35,80496,2869],{"class":359},[35,80498,80499],{"class":37,"line":33852},[35,80500,80501],{"class":41},"        \u002F\u002F 渲染函数\n",[35,80503,80504,80506],{"class":37,"line":33858},[35,80505,70733],{"class":48},[35,80507,52738],{"class":359},[35,80509,80510],{"class":37,"line":33864},[35,80511,52724],{"class":359},[35,80513,80514],{"class":37,"line":33870},[35,80515,141],{"emptyLinePlaceholder":140},[35,80517,80518],{"class":37,"line":33887},[35,80519,33787],{"class":359},[35,80521,80522,80524,80526],{"class":37,"line":33893},[35,80523,52743],{"class":359},[35,80525,52139],{"class":51626},[35,80527,51633],{"class":359},[35,80529,80530,80532,80534],{"class":37,"line":33899},[35,80531,52111],{"class":359},[35,80533,52126],{"class":51626},[35,80535,51633],{"class":359},[35,80537,80538],{"class":37,"line":33905},[35,80539,141],{"emptyLinePlaceholder":140},[35,80541,80542,80544,80546],{"class":37,"line":33911},[35,80543,52111],{"class":359},[35,80545,50961],{"class":51626},[35,80547,51633],{"class":359},[438,80549,80551],{"id":80550},"_410-深入了解对象","4.10 深入了解对象",[465,80553,80555],{"id":80554},"_4101-创建对象","4.10.1 创建对象",[21,80557,80558],{},[1823,80559],{"alt":30,"src":80560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[21,80562,80563],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[465,80565,80567],{"id":80566},"_4102-构造函数","4.10.2 构造函数",[21,80569,80570,80573],{},[645,80571,80572],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[21,80575,80576,80579],{},[645,80577,80578],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[25,80581,80583],{"className":50959,"code":80582,"language":50961,"meta":30,"style":30},"\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",[32,80584,80585,80593,80598,80619,80632,80644,80656,80660,80665,80692,80697,80724],{"__ignoreMap":30},[35,80586,80587,80589,80591],{"class":37,"line":38},[35,80588,1404],{"class":359},[35,80590,52139],{"class":51626},[35,80592,51633],{"class":359},[35,80594,80595],{"class":37,"line":45},[35,80596,80597],{"class":41},"\u002F\u002F例：\n",[35,80599,80600,80602,80605,80607,80609,80611,80613,80615,80617],{"class":37,"line":55},[35,80601,54775],{"class":495},[35,80603,80604],{"class":48}," Pig",[35,80606,499],{"class":359},[35,80608,80135],{"class":5550},[35,80610,872],{"class":359},[35,80612,70546],{"class":5550},[35,80614,872],{"class":359},[35,80616,70563],{"class":5550},[35,80618,12776],{"class":359},[35,80620,80621,80624,80627,80629],{"class":37,"line":65},[35,80622,80623],{"class":58},"    this",[35,80625,80626],{"class":359},".name",[35,80628,544],{"class":495},[35,80630,80631],{"class":359},"name\n",[35,80633,80634,80636,80639,80641],{"class":37,"line":74},[35,80635,80623],{"class":58},[35,80637,80638],{"class":359},".age",[35,80640,544],{"class":495},[35,80642,80643],{"class":359},"age\n",[35,80645,80646,80648,80651,80653],{"class":37,"line":83},[35,80647,80623],{"class":58},[35,80649,80650],{"class":359},".gender",[35,80652,544],{"class":495},[35,80654,80655],{"class":359},"gender    \n",[35,80657,80658],{"class":37,"line":92},[35,80659,1926],{"class":359},[35,80661,80662],{"class":37,"line":101},[35,80663,80664],{"class":41},"\u002F\u002F创建佩奇对象\n",[35,80666,80667,80669,80672,80674,80676,80678,80681,80683,80685,80687,80690],{"class":37,"line":110},[35,80668,7126],{"class":495},[35,80670,80671],{"class":58}," Peppa",[35,80673,12051],{"class":495},[35,80675,80604],{"class":48},[35,80677,499],{"class":359},[35,80679,80680],{"class":306},"'佩奇'",[35,80682,872],{"class":359},[35,80684,408],{"class":58},[35,80686,872],{"class":359},[35,80688,80689],{"class":306},"'女'",[35,80691,505],{"class":359},[35,80693,80694],{"class":37,"line":119},[35,80695,80696],{"class":41},"\u002F\u002F创建乔治对象\n",[35,80698,80699,80701,80704,80706,80708,80710,80713,80715,80717,80719,80722],{"class":37,"line":128},[35,80700,7126],{"class":495},[35,80702,80703],{"class":58}," George",[35,80705,12051],{"class":495},[35,80707,80604],{"class":48},[35,80709,499],{"class":359},[35,80711,80712],{"class":306},"'乔治'",[35,80714,872],{"class":359},[35,80716,568],{"class":58},[35,80718,872],{"class":359},[35,80720,80721],{"class":306},"'男'",[35,80723,505],{"class":359},[35,80725,80726,80728,80730],{"class":37,"line":137},[35,80727,52111],{"class":359},[35,80729,52139],{"class":51626},[35,80731,51633],{"class":359},[21,80733,80734],{},[1823,80735],{"alt":30,"src":80736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[21,80738,80739],{},[1823,80740],{"alt":30,"src":80741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[21,80743,80744],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[21,80746,80747],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[21,80749,80750],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[21,80752,80753],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[21,80755,80756],{},"这里用等号是因为：对象.属性=值",[21,80758,80759],{},"①利用对象字面量创建对象",[21,80761,80762],{},"const o={",[21,80764,80765],{},"name:'pink'",[21,80767,80768],{},"} ②利用new Object创建对象",[21,80770,80771],{},"const o=new Object({name:'pink'})",[21,80773,80774],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[21,80776,80777],{},"构造函数创建对象的执行过程：",[21,80779,80780],{},[1823,80781],{"alt":30,"src":80782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[465,80784,80786],{"id":80785},"_4103-实例成员","4.10.3 实例成员",[21,80788,80789],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[14,80791,80792,80795,80798],{},[17,80793,80794],{},"实例对象的属性和方法即为实例成员",[17,80796,80797],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[17,80799,80800],{},"构造函数创建的实例对象彼此独立互不影响",[465,80802,80804],{"id":80803},"_4104-静态成员","4.10.4 静态成员",[21,80806,80807],{},[1823,80808],{"alt":30,"src":80809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[21,80811,80812],{},"静态成员有Date.now() Math.PI Math.random()",[21,80814,80815],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[21,80817,80818],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[21,80820,80821],{},"function Pig(name) n {",[21,80823,80824],{},"this.name=name",[21,80826,1440],{},[21,80828,80829],{},"Pig.eyes=2",[21,80831,80832],{},"Pig.sayHai=function () { console.log(this) }",[21,80834,80835],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[21,80837,80838],{},"console.log(Pig.eyes) \u002F\u002F2",[21,80840,11666],{},[14,80842,80843,80846,80849,80852,80855],{},[17,80844,80845],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[17,80847,80848],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[17,80850,80851],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[17,80853,80854],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[17,80856,80857],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[21,80859,80860],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[465,80862,80864],{"id":80863},"_4105-内置构造函数","4.10.5 内置构造函数",[21,80866,80867],{},"内置构造函数包含：",[21,80869,80870],{},[1823,80871],{"alt":30,"src":80872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[21,80874,80875],{},[1823,80876],{"alt":30,"src":80877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[21,80879,80880],{},"这些基本数据类型，js对他们进行了包装",[52139,80882,80883],{},"\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",[22332,80885,80887],{"id":80886},"_41051-object","4.10.5.1 Object",[21,80889,80890],{},"Object 是内置的构造函数，用于创建普通对象",[21,80892,80893],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[25,80895,80897],{"className":50959,"code":80896,"language":50961,"meta":30,"style":30},"const user=new Object({name:'小明',age:15})\n",[32,80898,80899],{"__ignoreMap":30},[35,80900,80901],{"class":37,"line":38},[35,80902,80896],{"class":359},[21,80904,80905],{},"三个常用的静态方法：",[23244,80907,80909],{"id":80908},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[21,80911,80912],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[21,80914,80915],{},[1823,80916],{"alt":30,"src":80917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[21,80919,80920],{},[1823,80921],{"alt":30,"src":80922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[25,80924,80926],{"className":53393,"code":80925,"language":53395,"meta":30,"style":30},"\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",[32,80927,80928,80936,80944,80949,80954,80959,80964,80969,80974,80982],{"__ignoreMap":30},[35,80929,80930,80932,80934],{"class":37,"line":38},[35,80931,1404],{"class":359},[35,80933,52126],{"class":51626},[35,80935,51633],{"class":359},[35,80937,80938,80940,80942],{"class":37,"line":45},[35,80939,52470],{"class":359},[35,80941,52139],{"class":51626},[35,80943,51633],{"class":359},[35,80945,80946],{"class":37,"line":55},[35,80947,80948],{"class":359},"    const o = { name: 'pink', age: 6 }\n",[35,80950,80951],{"class":37,"line":65},[35,80952,80953],{"class":359},"    \u002F\u002F 获得所有属性名\n",[35,80955,80956],{"class":37,"line":74},[35,80957,80958],{"class":359},"    const arr = Object.keys(o)\n",[35,80960,80961],{"class":37,"line":83},[35,80962,80963],{"class":359},"    console.log(arr)\n",[35,80965,80966],{"class":37,"line":92},[35,80967,80968],{"class":359},"    \u002F\u002F 获得所有属性值\n",[35,80970,80971],{"class":37,"line":101},[35,80972,80973],{"class":359},"    console.log(Object.values(o))\n",[35,80975,80976,80978,80980],{"class":37,"line":110},[35,80977,52743],{"class":359},[35,80979,52139],{"class":51626},[35,80981,51633],{"class":359},[35,80983,80984,80986,80988],{"class":37,"line":119},[35,80985,52111],{"class":359},[35,80987,52126],{"class":51626},[35,80989,51633],{"class":359},[23244,80991,80993],{"id":80992},"_410512-object-assign","4.10.5.1.2 Object. assign",[21,80995,80996],{},"Object.assign(oo,o)",[21,80998,80999],{},"后的东西添加给前 是追加",[21,81001,81002],{},[1823,81003],{"alt":30,"src":81004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[21,81006,81007],{},[1823,81008],{"alt":30,"src":81009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[25,81011,81013],{"className":53393,"code":81012,"language":53395,"meta":30,"style":30},"\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",[32,81014,81015,81023,81031,81035,81039,81043,81047,81051,81055,81060,81065,81070,81075,81080,81088],{"__ignoreMap":30},[35,81016,81017,81019,81021],{"class":37,"line":38},[35,81018,1404],{"class":359},[35,81020,52126],{"class":51626},[35,81022,51633],{"class":359},[35,81024,81025,81027,81029],{"class":37,"line":45},[35,81026,52470],{"class":359},[35,81028,52139],{"class":51626},[35,81030,51633],{"class":359},[35,81032,81033],{"class":37,"line":55},[35,81034,80948],{"class":359},[35,81036,81037],{"class":37,"line":65},[35,81038,80953],{"class":359},[35,81040,81041],{"class":37,"line":74},[35,81042,80958],{"class":359},[35,81044,81045],{"class":37,"line":83},[35,81046,80963],{"class":359},[35,81048,81049],{"class":37,"line":92},[35,81050,80968],{"class":359},[35,81052,81053],{"class":37,"line":101},[35,81054,80973],{"class":359},[35,81056,81057],{"class":37,"line":110},[35,81058,81059],{"class":359},"    const oo = {}\n",[35,81061,81062],{"class":37,"line":119},[35,81063,81064],{"class":359},"    Object.assign(oo, o)\n",[35,81066,81067],{"class":37,"line":128},[35,81068,81069],{"class":359},"    console.log(oo)\n",[35,81071,81072],{"class":37,"line":137},[35,81073,81074],{"class":359},"    Object.assign(o, { gender: '女' })\n",[35,81076,81077],{"class":37,"line":144},[35,81078,81079],{"class":359},"    console.log(o)\n",[35,81081,81082,81084,81086],{"class":37,"line":150},[35,81083,52743],{"class":359},[35,81085,52139],{"class":51626},[35,81087,51633],{"class":359},[35,81089,81090,81092,81094],{"class":37,"line":159},[35,81091,52111],{"class":359},[35,81093,52126],{"class":51626},[35,81095,51633],{"class":359},[21,81097,81098],{},[1823,81099],{"alt":30,"src":81100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22332,81102,81104],{"id":81103},"_41052-array","4.10.5.2 Array",[21,81106,81107],{},"Array 是内置的构造函数，用于创建数组",[21,81109,81110],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[25,81112,81114],{"className":50959,"code":81113,"language":50961,"meta":30,"style":30},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[32,81115,81116,81121],{"__ignoreMap":30},[35,81117,81118],{"class":37,"line":38},[35,81119,81120],{"class":359},"const arr=new Array(3,5)\n",[35,81122,81123],{"class":37,"line":45},[35,81124,81125],{"class":359},"console.log(arr)  \u002F\u002F[3,5]\n",[21,81127,81128],{},"Array的实例方法，这个方法是实例成员",[21,81130,81131],{},[1823,81132],{"alt":30,"src":81133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23244,81135,81137],{"id":81136},"_410521-reduce","4.10.5.2.1 reduce",[21,81139,81140],{},[1823,81141],{"alt":30,"src":81142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[25,81144,81146],{"className":53393,"code":81145,"language":53395,"meta":30,"style":30},"\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",[32,81147,81148,81156,81164,81169,81174,81179,81184,81188,81193,81198,81203,81207,81212,81217,81221,81226,81231,81236,81244],{"__ignoreMap":30},[35,81149,81150,81152,81154],{"class":37,"line":38},[35,81151,1404],{"class":359},[35,81153,52126],{"class":51626},[35,81155,51633],{"class":359},[35,81157,81158,81160,81162],{"class":37,"line":45},[35,81159,52470],{"class":359},[35,81161,52139],{"class":51626},[35,81163,51633],{"class":359},[35,81165,81166],{"class":37,"line":55},[35,81167,81168],{"class":359},"    const arr = [1, 5, 8]\n",[35,81170,81171],{"class":37,"line":65},[35,81172,81173],{"class":359},"    \u002F\u002F 1.没有初始值\n",[35,81175,81176],{"class":37,"line":74},[35,81177,81178],{"class":359},"    const total = arr.reduce(function (prev, current) {\n",[35,81180,81181],{"class":37,"line":83},[35,81182,81183],{"class":359},"      return prev + current\n",[35,81185,81186],{"class":37,"line":92},[35,81187,33787],{"class":359},[35,81189,81190],{"class":37,"line":101},[35,81191,81192],{"class":359},"    console.log(total)   \u002F\u002F14\n",[35,81194,81195],{"class":37,"line":110},[35,81196,81197],{"class":359},"    \u002F\u002F 2.有初始值\n",[35,81199,81200],{"class":37,"line":119},[35,81201,81202],{"class":359},"    const total1 = arr.reduce(function (prev, current) {\n",[35,81204,81205],{"class":37,"line":128},[35,81206,81183],{"class":359},[35,81208,81209],{"class":37,"line":137},[35,81210,81211],{"class":359},"    }, 10)\n",[35,81213,81214],{"class":37,"line":144},[35,81215,81216],{"class":359},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[35,81218,81219],{"class":37,"line":150},[35,81220,141],{"emptyLinePlaceholder":140},[35,81222,81223],{"class":37,"line":159},[35,81224,81225],{"class":359},"    \u002F\u002F 3.箭头函数写法\n",[35,81227,81228],{"class":37,"line":168},[35,81229,81230],{"class":359},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[35,81232,81233],{"class":37,"line":177},[35,81234,81235],{"class":359},"    console.log(total2)   \u002F\u002F24\n",[35,81237,81238,81240,81242],{"class":37,"line":182},[35,81239,52743],{"class":359},[35,81241,52139],{"class":51626},[35,81243,51633],{"class":359},[35,81245,81246,81248,81250],{"class":37,"line":188},[35,81247,52111],{"class":359},[35,81249,52126],{"class":51626},[35,81251,51633],{"class":359},[21,81253,81254],{},"执行过程：",[14,81256,81257,81260,81263],{},[17,81258,81259],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[17,81261,81262],{},"每一次循环，把返回值给作为下一次循环的上一次值",[17,81264,81265],{},"如果有起始值，则起始值作为上一次值",[25,81267,81269],{"className":53393,"code":81268,"language":53395,"meta":30,"style":30},"\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",[32,81270,81271,81279,81287,81291,81295,81299,81303,81307,81311,81316,81321,81326,81331,81336,81340,81344,81348,81352,81356,81360,81365,81369,81374,81378,81383,81388,81392,81396,81400,81408],{"__ignoreMap":30},[35,81272,81273,81275,81277],{"class":37,"line":38},[35,81274,1404],{"class":359},[35,81276,52126],{"class":51626},[35,81278,51633],{"class":359},[35,81280,81281,81283,81285],{"class":37,"line":45},[35,81282,52470],{"class":359},[35,81284,52139],{"class":51626},[35,81286,51633],{"class":359},[35,81288,81289],{"class":37,"line":55},[35,81290,81168],{"class":359},[35,81292,81293],{"class":37,"line":65},[35,81294,81173],{"class":359},[35,81296,81297],{"class":37,"line":74},[35,81298,81178],{"class":359},[35,81300,81301],{"class":37,"line":83},[35,81302,81183],{"class":359},[35,81304,81305],{"class":37,"line":92},[35,81306,33787],{"class":359},[35,81308,81309],{"class":37,"line":101},[35,81310,81192],{"class":359},[35,81312,81313],{"class":37,"line":110},[35,81314,81315],{"class":359},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[35,81317,81318],{"class":37,"line":119},[35,81319,81320],{"class":359},"    \u002F\u002F     1              5                    6\n",[35,81322,81323],{"class":37,"line":128},[35,81324,81325],{"class":359},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[35,81327,81328],{"class":37,"line":137},[35,81329,81330],{"class":359},"    \u002F\u002F     6              8                    14\n",[35,81332,81333],{"class":37,"line":144},[35,81334,81335],{"class":359},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[35,81337,81338],{"class":37,"line":150},[35,81339,81197],{"class":359},[35,81341,81342],{"class":37,"line":159},[35,81343,81202],{"class":359},[35,81345,81346],{"class":37,"line":168},[35,81347,81183],{"class":359},[35,81349,81350],{"class":37,"line":177},[35,81351,81211],{"class":359},[35,81353,81354],{"class":37,"line":182},[35,81355,81216],{"class":359},[35,81357,81358],{"class":37,"line":188},[35,81359,81315],{"class":359},[35,81361,81362],{"class":37,"line":197},[35,81363,81364],{"class":359},"    \u002F\u002F     10             1                     11\n",[35,81366,81367],{"class":37,"line":206},[35,81368,81325],{"class":359},[35,81370,81371],{"class":37,"line":215},[35,81372,81373],{"class":359},"    \u002F\u002F     11             5                    16\n",[35,81375,81376],{"class":37,"line":224},[35,81377,81325],{"class":359},[35,81379,81380],{"class":37,"line":233},[35,81381,81382],{"class":359},"    \u002F\u002F     16             8                    24\n",[35,81384,81385],{"class":37,"line":238},[35,81386,81387],{"class":359},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[35,81389,81390],{"class":37,"line":244},[35,81391,81225],{"class":359},[35,81393,81394],{"class":37,"line":253},[35,81395,81230],{"class":359},[35,81397,81398],{"class":37,"line":262},[35,81399,81235],{"class":359},[35,81401,81402,81404,81406],{"class":37,"line":271},[35,81403,52743],{"class":359},[35,81405,52139],{"class":51626},[35,81407,51633],{"class":359},[35,81409,81410,81412,81414],{"class":37,"line":280},[35,81411,52111],{"class":359},[35,81413,52126],{"class":51626},[35,81415,51633],{"class":359},[23244,81417,81419],{"id":81418},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[21,81421,81422],{},[1823,81423],{"alt":30,"src":81424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[25,81426,81428],{"className":53393,"code":81427,"language":53395,"meta":30,"style":30},"\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",[32,81429,81430,81438,81446,81451,81456,81461,81466,81470,81475,81480,81485,81490,81495,81500,81504,81509,81513,81518,81526],{"__ignoreMap":30},[35,81431,81432,81434,81436],{"class":37,"line":38},[35,81433,1404],{"class":359},[35,81435,52126],{"class":51626},[35,81437,51633],{"class":359},[35,81439,81440,81442,81444],{"class":37,"line":45},[35,81441,52470],{"class":359},[35,81443,52139],{"class":51626},[35,81445,51633],{"class":359},[35,81447,81448],{"class":37,"line":55},[35,81449,81450],{"class":359},"    const arr = [\n",[35,81452,81453],{"class":37,"line":65},[35,81454,81455],{"class":359},"      { name: '张三', salary: 10000 },\n",[35,81457,81458],{"class":37,"line":74},[35,81459,81460],{"class":359},"      { name: '李四', salary: 10000 },\n",[35,81462,81463],{"class":37,"line":83},[35,81464,81465],{"class":359},"      { name: '王五', salary: 10000 }\n",[35,81467,81468],{"class":37,"line":92},[35,81469,53435],{"class":359},[35,81471,81472],{"class":37,"line":101},[35,81473,81474],{"class":359},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[35,81476,81477],{"class":37,"line":110},[35,81478,81479],{"class":359},"    \u002F\u002F prev是累计值\n",[35,81481,81482],{"class":37,"line":119},[35,81483,81484],{"class":359},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[35,81486,81487],{"class":37,"line":128},[35,81488,81489],{"class":359},"    console.log(total)\n",[35,81491,81492],{"class":37,"line":137},[35,81493,81494],{"class":359},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[35,81496,81497],{"class":37,"line":144},[35,81498,81499],{"class":359},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[35,81501,81502],{"class":37,"line":150},[35,81503,81494],{"class":359},[35,81505,81506],{"class":37,"line":159},[35,81507,81508],{"class":359},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[35,81510,81511],{"class":37,"line":168},[35,81512,81494],{"class":359},[35,81514,81515],{"class":37,"line":177},[35,81516,81517],{"class":359},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[35,81519,81520,81522,81524],{"class":37,"line":182},[35,81521,52743],{"class":359},[35,81523,52139],{"class":51626},[35,81525,51633],{"class":359},[35,81527,81528,81530,81532],{"class":37,"line":188},[35,81529,52111],{"class":359},[35,81531,52126],{"class":51626},[35,81533,51633],{"class":359},[23244,81535,81537],{"id":81536},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[21,81539,81540],{},[1823,81541],{"alt":30,"src":81542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[21,81544,81545],{},[1823,81546],{"alt":30,"src":81547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[14,81549,81550],{},[17,81551,81552],{},"find()",[21,81554,81555],{},"循环查找，找到第一个就ok",[21,81557,81558],{},[734,81559,81562],{"href":81560,"rel":81561},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24198],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[25,81564,81566],{"className":50959,"code":81565,"language":50961,"meta":30,"style":30},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[32,81567,81568,81573,81578],{"__ignoreMap":30},[35,81569,81570],{"class":37,"line":38},[35,81571,81572],{"class":359},"const array1 = [5, 12, 8, 130, 44]\n",[35,81574,81575],{"class":37,"line":45},[35,81576,81577],{"class":359},"const found = array1.find((element) => element > 10)\n",[35,81579,81580],{"class":37,"line":55},[35,81581,81582],{"class":359},"console.log(found)  \u002F\u002F12\n",[21,81584,81585,81587,81588,81593,81594,81597,81598,81600,81601,81606,81607,81609,81610,81612,81613,81615,81616],{},[32,81586,81552],{}," 方法是一个",[734,81589,81592],{"href":81590,"rel":81591},"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",[24198],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[32,81595,81596],{},"callbackFn"," 函数，直到 ",[32,81599,81596],{}," 返回一个",[734,81602,81605],{"href":81603,"rel":81604},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24198],"真值","。然后 ",[32,81608,81552],{}," 返回该元素并停止迭代数组。如果 ",[32,81611,81596],{}," 从未返回真值，则 ",[32,81614,81552],{}," 返回 ",[32,81617,81618],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[25,81620,81622],{"className":53393,"code":81621,"language":53395,"meta":30,"style":30},"\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",[32,81623,81624,81632,81640,81645,81650,81655,81659,81664,81669,81673,81678,81683,81687,81691,81696,81701,81705,81709,81714,81719,81724,81729,81734,81738,81743,81748,81753,81758,81762,81767,81775],{"__ignoreMap":30},[35,81625,81626,81628,81630],{"class":37,"line":38},[35,81627,1404],{"class":359},[35,81629,52126],{"class":51626},[35,81631,51633],{"class":359},[35,81633,81634,81636,81638],{"class":37,"line":45},[35,81635,52470],{"class":359},[35,81637,52139],{"class":51626},[35,81639,51633],{"class":359},[35,81641,81642],{"class":37,"line":55},[35,81643,81644],{"class":359},"    const arr = ['red', 'blue', 'green']\n",[35,81646,81647],{"class":37,"line":65},[35,81648,81649],{"class":359},"    const found = arr.find(item => item === 'pink')\n",[35,81651,81652],{"class":37,"line":74},[35,81653,81654],{"class":359},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[35,81656,81657],{"class":37,"line":83},[35,81658,141],{"emptyLinePlaceholder":140},[35,81660,81661],{"class":37,"line":92},[35,81662,81663],{"class":359},"    \u002F\u002F 使用场景，用于查找数据\n",[35,81665,81666],{"class":37,"line":101},[35,81667,81668],{"class":359},"    const arr1 = [\n",[35,81670,81671],{"class":37,"line":110},[35,81672,79711],{"class":359},[35,81674,81675],{"class":37,"line":119},[35,81676,81677],{"class":359},"        name: '小米',\n",[35,81679,81680],{"class":37,"line":128},[35,81681,81682],{"class":359},"        price: 1999\n",[35,81684,81685],{"class":37,"line":137},[35,81686,78217],{"class":359},[35,81688,81689],{"class":37,"line":144},[35,81690,79711],{"class":359},[35,81692,81693],{"class":37,"line":150},[35,81694,81695],{"class":359},"        name: '华为',\n",[35,81697,81698],{"class":37,"line":159},[35,81699,81700],{"class":359},"        price: 3999\n",[35,81702,81703],{"class":37,"line":168},[35,81704,52724],{"class":359},[35,81706,81707],{"class":37,"line":177},[35,81708,53435],{"class":359},[35,81710,81711],{"class":37,"line":182},[35,81712,81713],{"class":359},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[35,81715,81716],{"class":37,"line":188},[35,81717,81718],{"class":359},"    \u002F\u002F const found1 = arr1.find(item => {\n",[35,81720,81721],{"class":37,"line":197},[35,81722,81723],{"class":359},"    \u002F\u002F   if (item.name === '小米') {\n",[35,81725,81726],{"class":37,"line":206},[35,81727,81728],{"class":359},"    \u002F\u002F     return item\n",[35,81730,81731],{"class":37,"line":215},[35,81732,81733],{"class":359},"    \u002F\u002F   }\n",[35,81735,81736],{"class":37,"line":224},[35,81737,63616],{"class":359},[35,81739,81740],{"class":37,"line":233},[35,81741,81742],{"class":359},"    \u002F\u002F 另一种写法\n",[35,81744,81745],{"class":37,"line":238},[35,81746,81747],{"class":359},"    const found1 = arr1.find(item => {\n",[35,81749,81750],{"class":37,"line":244},[35,81751,81752],{"class":359},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[35,81754,81755],{"class":37,"line":253},[35,81756,81757],{"class":359},"      return item.name = '小米'\n",[35,81759,81760],{"class":37,"line":262},[35,81761,33787],{"class":359},[35,81763,81764],{"class":37,"line":271},[35,81765,81766],{"class":359},"    console.log(found1)\n",[35,81768,81769,81771,81773],{"class":37,"line":280},[35,81770,52743],{"class":359},[35,81772,52139],{"class":51626},[35,81774,51633],{"class":359},[35,81776,81777,81779,81781],{"class":37,"line":289},[35,81778,52111],{"class":359},[35,81780,52126],{"class":51626},[35,81782,51633],{"class":359},[21,81784,81785],{},[1823,81786],{"alt":30,"src":81787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[21,81789,81790],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[14,81792,81793],{"start":45},[17,81794,81795],{},"every()返回的是布尔值",[21,81797,81798],{},[734,81799,81802],{"href":81800,"rel":81801},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24198],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[21,81804,81805],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[21,81807,81808],{},"some是只有有一个就没问题",[21,81810,81811],{},"every是必须全是才行",[25,81813,81817],{"className":81814,"code":81815,"language":81816,"meta":30,"style":30},"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",[32,81818,81819,81835,81849,81853,81862],{"__ignoreMap":30},[35,81820,81821,81823,81826,81828,81830,81833],{"class":37,"line":38},[35,81822,54775],{"class":495},[35,81824,81825],{"class":359}," isBigEnough(element, ",[35,81827,74383],{"class":495},[35,81829,12769],{"class":359},[35,81831,81832],{"class":495},"array",[35,81834,12776],{"class":359},[35,81836,81837,81840,81843,81845,81847],{"class":37,"line":45},[35,81838,81839],{"class":495},"  return",[35,81841,81842],{"class":359}," element ",[35,81844,2060],{"class":495},[35,81846,2379],{"class":58},[35,81848,1655],{"class":359},[35,81850,81851],{"class":37,"line":55},[35,81852,1926],{"class":359},[35,81854,81855,81858,81860],{"class":37,"line":65},[35,81856,81857],{"class":359},"[12, 5, 8, 130, 44].every(isBigEnough); ",[35,81859,33655],{"class":495},[35,81861,54842],{"class":359},[35,81863,81864,81867,81869],{"class":37,"line":74},[35,81865,81866],{"class":359},"[12, 54, 18, 130, 44].every(isBigEnough); ",[35,81868,33655],{"class":495},[35,81870,58266],{"class":359},[25,81872,81874],{"className":53393,"code":81873,"language":53395,"meta":30,"style":30},"\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",[32,81875,81876,81884,81892,81897,81901,81906,81911,81919],{"__ignoreMap":30},[35,81877,81878,81880,81882],{"class":37,"line":38},[35,81879,1404],{"class":359},[35,81881,52126],{"class":51626},[35,81883,51633],{"class":359},[35,81885,81886,81888,81890],{"class":37,"line":45},[35,81887,52470],{"class":359},[35,81889,52139],{"class":51626},[35,81891,51633],{"class":359},[35,81893,81894],{"class":37,"line":55},[35,81895,81896],{"class":359},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[35,81898,81899],{"class":37,"line":65},[35,81900,78647],{"class":359},[35,81902,81903],{"class":37,"line":74},[35,81904,81905],{"class":359},"    const flag = arr.every(item => item >= 10)\n",[35,81907,81908],{"class":37,"line":83},[35,81909,81910],{"class":359},"    console.log(flag)    \u002F\u002Ftrue\n",[35,81912,81913,81915,81917],{"class":37,"line":92},[35,81914,52743],{"class":359},[35,81916,52139],{"class":51626},[35,81918,51633],{"class":359},[35,81920,81921,81923,81925],{"class":37,"line":101},[35,81922,52111],{"class":359},[35,81924,52126],{"class":51626},[35,81926,51633],{"class":359},[25,81928,81930],{"className":53393,"code":81929,"language":53395,"meta":30,"style":30},"\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",[32,81931,81932,81940,81948,81952,81957,81962,81967,81975],{"__ignoreMap":30},[35,81933,81934,81936,81938],{"class":37,"line":38},[35,81935,1404],{"class":359},[35,81937,52126],{"class":51626},[35,81939,51633],{"class":359},[35,81941,81942,81944,81946],{"class":37,"line":45},[35,81943,52470],{"class":359},[35,81945,52139],{"class":51626},[35,81947,51633],{"class":359},[35,81949,81950],{"class":37,"line":55},[35,81951,81896],{"class":359},[35,81953,81954],{"class":37,"line":65},[35,81955,81956],{"class":359},"    const arr = [10, 0, 5]\n",[35,81958,81959],{"class":37,"line":74},[35,81960,81961],{"class":359},"    const flag = arr.some(item => item >= 10)\n",[35,81963,81964],{"class":37,"line":83},[35,81965,81966],{"class":359},"    console.log(flag)   \u002F\u002Ftrue\n",[35,81968,81969,81971,81973],{"class":37,"line":92},[35,81970,52743],{"class":359},[35,81972,52139],{"class":51626},[35,81974,51633],{"class":359},[35,81976,81977,81979,81981],{"class":37,"line":101},[35,81978,52111],{"class":359},[35,81980,52126],{"class":51626},[35,81982,51633],{"class":359},[23244,81984,81986],{"id":81985},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[21,81988,81989],{},[1823,81990],{"alt":30,"src":81991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[25,81993,81995],{"className":50959,"code":81994,"language":50961,"meta":30,"style":30},"\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",[32,81996,81997,82007,82021,82025,82033,82047,82067,82079,82087,82094,82106,82118,82130,82142,82152,82162,82166,82174,82182,82186,82194,82206,82214,82236,82241,82246,82279,82287,82295,82299],{"__ignoreMap":30},[35,81998,81999,82001,82003,82005],{"class":37,"line":38},[35,82000,51623],{"class":359},[35,82002,51627],{"class":51626},[35,82004,51630],{"class":48},[35,82006,51633],{"class":359},[35,82008,82009,82011,82013,82015,82017,82019],{"class":37,"line":45},[35,82010,1404],{"class":359},[35,82012,50961],{"class":51626},[35,82014,51642],{"class":48},[35,82016,544],{"class":359},[35,82018,51647],{"class":306},[35,82020,51633],{"class":359},[35,82022,82023],{"class":37,"line":55},[35,82024,141],{"emptyLinePlaceholder":140},[35,82026,82027,82029,82031],{"class":37,"line":65},[35,82028,1404],{"class":359},[35,82030,51660],{"class":51626},[35,82032,51633],{"class":359},[35,82034,82035,82037,82039,82041,82043,82045],{"class":37,"line":74},[35,82036,52470],{"class":359},[35,82038,51670],{"class":51626},[35,82040,51673],{"class":48},[35,82042,544],{"class":359},[35,82044,51678],{"class":306},[35,82046,51633],{"class":359},[35,82048,82049,82051,82053,82055,82057,82059,82061,82063,82065],{"class":37,"line":83},[35,82050,52470],{"class":359},[35,82052,51670],{"class":51626},[35,82054,15254],{"class":48},[35,82056,544],{"class":359},[35,82058,51717],{"class":306},[35,82060,51697],{"class":48},[35,82062,544],{"class":359},[35,82064,51724],{"class":306},[35,82066,51633],{"class":359},[35,82068,82069,82071,82073,82075,82077],{"class":37,"line":92},[35,82070,52470],{"class":359},[35,82072,51733],{"class":51626},[35,82074,51736],{"class":359},[35,82076,51733],{"class":51626},[35,82078,51633],{"class":359},[35,82080,82081,82083,82085],{"class":37,"line":101},[35,82082,52470],{"class":359},[35,82084,416],{"class":51626},[35,82086,51633],{"class":359},[35,82088,82089,82092],{"class":37,"line":110},[35,82090,82091],{"class":51626},"    div",[35,82093,15906],{"class":359},[35,82095,82096,82098,82100,82102,82104],{"class":37,"line":119},[35,82097,55097],{"class":58},[35,82099,51763],{"class":359},[35,82101,2072],{"class":58},[35,82103,51818],{"class":495},[35,82105,1655],{"class":359},[35,82107,82108,82110,82112,82114,82116],{"class":37,"line":128},[35,82109,55111],{"class":58},[35,82111,51763],{"class":359},[35,82113,895],{"class":58},[35,82115,51818],{"class":495},[35,82117,1655],{"class":359},[35,82119,82120,82122,82124,82126,82128],{"class":37,"line":137},[35,82121,57685],{"class":58},[35,82123,51763],{"class":359},[35,82125,895],{"class":58},[35,82127,51818],{"class":495},[35,82129,1655],{"class":359},[35,82131,82132,82134,82136,82138,82140],{"class":37,"line":144},[35,82133,65459],{"class":58},[35,82135,51763],{"class":359},[35,82137,992],{"class":58},[35,82139,51818],{"class":495},[35,82141,1655],{"class":359},[35,82143,82144,82146,82148,82150],{"class":37,"line":150},[35,82145,57612],{"class":58},[35,82147,51763],{"class":359},[35,82149,51918],{"class":58},[35,82151,1655],{"class":359},[35,82153,82154,82156,82158,82160],{"class":37,"line":159},[35,82155,55210],{"class":58},[35,82157,51763],{"class":359},[35,82159,51971],{"class":58},[35,82161,1655],{"class":359},[35,82163,82164],{"class":37,"line":168},[35,82165,2528],{"class":359},[35,82167,82168,82170,82172],{"class":37,"line":177},[35,82169,52743],{"class":359},[35,82171,416],{"class":51626},[35,82173,51633],{"class":359},[35,82175,82176,82178,82180],{"class":37,"line":182},[35,82177,52111],{"class":359},[35,82179,51660],{"class":51626},[35,82181,51633],{"class":359},[35,82183,82184],{"class":37,"line":188},[35,82185,141],{"emptyLinePlaceholder":140},[35,82187,82188,82190,82192],{"class":37,"line":197},[35,82189,1404],{"class":359},[35,82191,52126],{"class":51626},[35,82193,51633],{"class":359},[35,82195,82196,82198,82200,82202,82204],{"class":37,"line":206},[35,82197,52470],{"class":359},[35,82199,51937],{"class":51626},[35,82201,55640],{"class":359},[35,82203,51937],{"class":51626},[35,82205,51633],{"class":359},[35,82207,82208,82210,82212],{"class":37,"line":215},[35,82209,52470],{"class":359},[35,82211,52139],{"class":51626},[35,82213,51633],{"class":359},[35,82215,82216,82218,82221,82223,82226,82229,82231,82234],{"class":37,"line":224},[35,82217,11555],{"class":495},[35,82219,82220],{"class":58}," spec",[35,82222,13898],{"class":495},[35,82224,82225],{"class":359}," { size: ",[35,82227,82228],{"class":306},"'40cm*40cm'",[35,82230,55790],{"class":359},[35,82232,82233],{"class":306},"'黑色'",[35,82235,55930],{"class":359},[35,82237,82238],{"class":37,"line":233},[35,82239,82240],{"class":41},"    \u002F\u002F const arr = Object.values(spec)\n",[35,82242,82243],{"class":37,"line":238},[35,82244,82245],{"class":41},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[35,82247,82248,82250,82252,82254,82257,82259,82261,82264,82267,82270,82272,82274,82277],{"class":37,"line":244},[35,82249,52733],{"class":359},[35,82251,54725],{"class":48},[35,82253,499],{"class":359},[35,82255,82256],{"class":306},"'div'",[35,82258,74574],{"class":359},[35,82260,544],{"class":495},[35,82262,82263],{"class":359}," Object.",[35,82265,82266],{"class":48},"values",[35,82268,82269],{"class":359},"(spec).",[35,82271,74548],{"class":48},[35,82273,499],{"class":359},[35,82275,82276],{"class":306},"'\u002F'",[35,82278,505],{"class":359},[35,82280,82281,82283,82285],{"class":37,"line":253},[35,82282,52743],{"class":359},[35,82284,52139],{"class":51626},[35,82286,51633],{"class":359},[35,82288,82289,82291,82293],{"class":37,"line":262},[35,82290,52111],{"class":359},[35,82292,52126],{"class":51626},[35,82294,51633],{"class":359},[35,82296,82297],{"class":37,"line":271},[35,82298,141],{"emptyLinePlaceholder":140},[35,82300,82301,82303,82305],{"class":37,"line":280},[35,82302,52111],{"class":359},[35,82304,50961],{"class":51626},[35,82306,51633],{"class":359},[21,82308,82309],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23244,82311,82313],{"id":82312},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[21,82315,82316],{},"静态方法，将伪数组转换为真数组",[21,82318,82319],{},[1823,82320],{"alt":30,"src":82321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[25,82323,82325],{"className":53393,"code":82324,"language":53395,"meta":30,"style":30},"\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",[32,82326,82327,82335,82343,82355,82367,82379,82387,82395,82400,82405,82410,82415,82423],{"__ignoreMap":30},[35,82328,82329,82331,82333],{"class":37,"line":38},[35,82330,1404],{"class":359},[35,82332,52126],{"class":51626},[35,82334,51633],{"class":359},[35,82336,82337,82339,82341],{"class":37,"line":45},[35,82338,52470],{"class":359},[35,82340,1501],{"class":51626},[35,82342,51633],{"class":359},[35,82344,82345,82347,82349,82351,82353],{"class":37,"line":55},[35,82346,51667],{"class":359},[35,82348,17],{"class":51626},[35,82350,55640],{"class":359},[35,82352,17],{"class":51626},[35,82354,51633],{"class":359},[35,82356,82357,82359,82361,82363,82365],{"class":37,"line":65},[35,82358,51667],{"class":359},[35,82360,17],{"class":51626},[35,82362,55640],{"class":359},[35,82364,17],{"class":51626},[35,82366,51633],{"class":359},[35,82368,82369,82371,82373,82375,82377],{"class":37,"line":74},[35,82370,51667],{"class":359},[35,82372,17],{"class":51626},[35,82374,55640],{"class":359},[35,82376,17],{"class":51626},[35,82378,51633],{"class":359},[35,82380,82381,82383,82385],{"class":37,"line":83},[35,82382,52743],{"class":359},[35,82384,1501],{"class":51626},[35,82386,51633],{"class":359},[35,82388,82389,82391,82393],{"class":37,"line":92},[35,82390,52470],{"class":359},[35,82392,52139],{"class":51626},[35,82394,51633],{"class":359},[35,82396,82397],{"class":37,"line":101},[35,82398,82399],{"class":359},"    const lis = document.querySelectorAll('li')\n",[35,82401,82402],{"class":37,"line":110},[35,82403,82404],{"class":359},"    const liss = Array.from(lis)\n",[35,82406,82407],{"class":37,"line":119},[35,82408,82409],{"class":359},"    liss.pop()\n",[35,82411,82412],{"class":37,"line":128},[35,82413,82414],{"class":359},"    console.log(liss)\n",[35,82416,82417,82419,82421],{"class":37,"line":137},[35,82418,52743],{"class":359},[35,82420,52139],{"class":51626},[35,82422,51633],{"class":359},[35,82424,82425,82427,82429],{"class":37,"line":144},[35,82426,52111],{"class":359},[35,82428,52126],{"class":51626},[35,82430,51633],{"class":359},[21,82432,82433],{},[1823,82434],{"alt":30,"src":82435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22332,82437,82439],{"id":82438},"_41053-string","4.10.5.3 String",[21,82441,82442],{},[1823,82443],{"alt":30,"src":82444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23244,82446,82448],{"id":82447},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[25,82450,82452],{"className":53393,"code":82451,"language":53395,"meta":30,"style":30},"\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",[32,82453,82454,82462,82470,82475,82480,82485,82489,82494,82499,82504,82512],{"__ignoreMap":30},[35,82455,82456,82458,82460],{"class":37,"line":38},[35,82457,1404],{"class":359},[35,82459,52126],{"class":51626},[35,82461,51633],{"class":359},[35,82463,82464,82466,82468],{"class":37,"line":45},[35,82465,52470],{"class":359},[35,82467,52139],{"class":51626},[35,82469,51633],{"class":359},[35,82471,82472],{"class":37,"line":55},[35,82473,82474],{"class":359},"    \u002F\u002F 把字符串转化为数组\n",[35,82476,82477],{"class":37,"line":65},[35,82478,82479],{"class":359},"    const str = 'pink,red'\n",[35,82481,82482],{"class":37,"line":74},[35,82483,82484],{"class":359},"    const arr = str.split(',')\n",[35,82486,82487],{"class":37,"line":83},[35,82488,80963],{"class":359},[35,82490,82491],{"class":37,"line":92},[35,82492,82493],{"class":359},"    const str1 = '2025-8-25'\n",[35,82495,82496],{"class":37,"line":101},[35,82497,82498],{"class":359},"    const arr1 = str1.split('-')\n",[35,82500,82501],{"class":37,"line":110},[35,82502,82503],{"class":359},"    console.log(arr1)\n",[35,82505,82506,82508,82510],{"class":37,"line":119},[35,82507,52743],{"class":359},[35,82509,52139],{"class":51626},[35,82511,51633],{"class":359},[35,82513,82514,82516,82518],{"class":37,"line":128},[35,82515,52111],{"class":359},[35,82517,52126],{"class":51626},[35,82519,51633],{"class":359},[23244,82521,82523],{"id":82522},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[21,82525,5515],{},[21,82527,82528],{},"substring(indexStart)",[21,82530,82531],{},"substring(indexStart, indexEnd)",[1501,82533,82534,82545,82557,82567],{},[17,82535,82536,82537,82540,82541,82544],{},"如果省略了 ",[32,82538,82539],{},"indexEnd","，则 ",[32,82542,82543],{},"substring()"," 提取字符直到字符串的末尾",[17,82546,82547,82548,82551,82552,82540,82554,82556],{},"如果 ",[32,82549,82550],{},"indexStart"," 等于 ",[32,82553,82539],{},[32,82555,82543],{}," 返回一个空字符串",[17,82558,82547,82559,82561,82562,82540,82564,82566],{},[32,82560,82550],{}," 大于 ",[32,82563,82539],{},[32,82565,82543],{}," 的效果就像交换了这两个参数一样",[17,82568,82569],{},"结束的索引号不包含想要截取的部分",[25,82571,82573],{"className":81814,"code":82572,"language":81816,"meta":30,"style":30},"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",[32,82574,82575,82587,82591,82625,82655,82659,82690,82694,82721,82751,82781,82785,82816],{"__ignoreMap":30},[35,82576,82577,82580,82582,82585],{"class":37,"line":38},[35,82578,82579],{"class":359},"const anyString ",[35,82581,544],{"class":495},[35,82583,82584],{"class":306}," \"Mozilla\"",[35,82586,1655],{"class":359},[35,82588,82589],{"class":37,"line":45},[35,82590,141],{"emptyLinePlaceholder":140},[35,82592,82593,82596,82598,82600,82602,82605,82607,82610,82612,82614,82616,82618,82620,82622],{"class":37,"line":55},[35,82594,82595],{"class":58},"console",[35,82597,1052],{"class":359},[35,82599,58573],{"class":58},[35,82601,499],{"class":359},[35,82603,82604],{"class":58},"anyString",[35,82606,1052],{"class":359},[35,82608,82609],{"class":58},"substring",[35,82611,499],{"class":359},[35,82613,687],{"class":58},[35,82615,12769],{"class":359},[35,82617,713],{"class":58},[35,82619,75578],{"class":359},[35,82621,33655],{"class":495},[35,82623,82624],{"class":306}," 'M'\n",[35,82626,82627,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647,82649,82651,82653],{"class":37,"line":65},[35,82628,82595],{"class":58},[35,82630,1052],{"class":359},[35,82632,58573],{"class":58},[35,82634,499],{"class":359},[35,82636,82604],{"class":58},[35,82638,1052],{"class":359},[35,82640,82609],{"class":58},[35,82642,499],{"class":359},[35,82644,713],{"class":58},[35,82646,12769],{"class":359},[35,82648,687],{"class":58},[35,82650,75578],{"class":359},[35,82652,33655],{"class":495},[35,82654,82624],{"class":306},[35,82656,82657],{"class":37,"line":74},[35,82658,141],{"emptyLinePlaceholder":140},[35,82660,82661,82663,82665,82667,82669,82671,82673,82675,82677,82679,82681,82683,82685,82687],{"class":37,"line":83},[35,82662,82595],{"class":58},[35,82664,1052],{"class":359},[35,82666,58573],{"class":58},[35,82668,499],{"class":359},[35,82670,82604],{"class":58},[35,82672,1052],{"class":359},[35,82674,82609],{"class":58},[35,82676,499],{"class":359},[35,82678,687],{"class":58},[35,82680,12769],{"class":359},[35,82682,408],{"class":58},[35,82684,75578],{"class":359},[35,82686,33655],{"class":495},[35,82688,82689],{"class":306}," 'Mozill'\n",[35,82691,82692],{"class":37,"line":92},[35,82693,141],{"emptyLinePlaceholder":140},[35,82695,82696,82698,82700,82702,82704,82706,82708,82710,82712,82714,82716,82718],{"class":37,"line":101},[35,82697,82595],{"class":58},[35,82699,1052],{"class":359},[35,82701,58573],{"class":58},[35,82703,499],{"class":359},[35,82705,82604],{"class":58},[35,82707,1052],{"class":359},[35,82709,82609],{"class":58},[35,82711,499],{"class":359},[35,82713,789],{"class":58},[35,82715,75578],{"class":359},[35,82717,33655],{"class":495},[35,82719,82720],{"class":306}," 'lla'\n",[35,82722,82723,82725,82727,82729,82731,82733,82735,82737,82739,82741,82743,82745,82747,82749],{"class":37,"line":110},[35,82724,82595],{"class":58},[35,82726,1052],{"class":359},[35,82728,58573],{"class":58},[35,82730,499],{"class":359},[35,82732,82604],{"class":58},[35,82734,1052],{"class":359},[35,82736,82609],{"class":58},[35,82738,499],{"class":359},[35,82740,789],{"class":58},[35,82742,12769],{"class":359},[35,82744,863],{"class":58},[35,82746,75634],{"class":359},[35,82748,33655],{"class":495},[35,82750,82720],{"class":306},[35,82752,82753,82755,82757,82759,82761,82763,82765,82767,82769,82771,82773,82775,82777,82779],{"class":37,"line":119},[35,82754,82595],{"class":58},[35,82756,1052],{"class":359},[35,82758,58573],{"class":58},[35,82760,499],{"class":359},[35,82762,82604],{"class":58},[35,82764,1052],{"class":359},[35,82766,82609],{"class":58},[35,82768,499],{"class":359},[35,82770,863],{"class":58},[35,82772,12769],{"class":359},[35,82774,789],{"class":58},[35,82776,75578],{"class":359},[35,82778,33655],{"class":495},[35,82780,82720],{"class":306},[35,82782,82783],{"class":37,"line":128},[35,82784,141],{"emptyLinePlaceholder":140},[35,82786,82787,82789,82791,82793,82795,82797,82799,82801,82803,82805,82807,82809,82811,82813],{"class":37,"line":137},[35,82788,82595],{"class":58},[35,82790,1052],{"class":359},[35,82792,58573],{"class":58},[35,82794,499],{"class":359},[35,82796,82604],{"class":58},[35,82798,1052],{"class":359},[35,82800,82609],{"class":58},[35,82802,499],{"class":359},[35,82804,687],{"class":58},[35,82806,12769],{"class":359},[35,82808,863],{"class":58},[35,82810,75578],{"class":359},[35,82812,33655],{"class":495},[35,82814,82815],{"class":306}," 'Mozilla'\n",[35,82817,82818,82820,82822,82824,82826,82828,82830,82832,82834,82836,82838,82840,82842,82844],{"class":37,"line":144},[35,82819,82595],{"class":58},[35,82821,1052],{"class":359},[35,82823,58573],{"class":58},[35,82825,499],{"class":359},[35,82827,82604],{"class":58},[35,82829,1052],{"class":359},[35,82831,82609],{"class":58},[35,82833,499],{"class":359},[35,82835,687],{"class":58},[35,82837,12769],{"class":359},[35,82839,940],{"class":58},[35,82841,75578],{"class":359},[35,82843,33655],{"class":495},[35,82845,82815],{"class":306},[23244,82847,82849],{"id":82848},"_410533-startswith","4.10.5.3.3 startsWith",[21,82851,82852,82855,82856,82861,82862,82864,82865],{},[32,82853,82854],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[645,82857,82858],{},[32,82859,82860],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[32,82863,378],{}," 或 ",[32,82866,66346],{},[25,82868,82870],{"className":77820,"code":82869,"language":77822,"meta":30,"style":30},"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",[32,82871,82872,82884,82903,82908,82928],{"__ignoreMap":30},[35,82873,82874,82876,82879,82881],{"class":37,"line":38},[35,82875,7126],{"class":495},[35,82877,82878],{"class":359}," str1 ",[35,82880,544],{"class":495},[35,82882,82883],{"class":306}," \"Saturday night plans\"\n",[35,82885,82886,82888,82890,82893,82896,82898,82901],{"class":37,"line":45},[35,82887,77857],{"class":359},[35,82889,58573],{"class":48},[35,82891,82892],{"class":359},"(str1.",[35,82894,82895],{"class":48},"startsWith",[35,82897,499],{"class":359},[35,82899,82900],{"class":306},"\"Sat\"",[35,82902,30823],{"class":359},[35,82904,82905],{"class":37,"line":55},[35,82906,82907],{"class":41},"\u002F\u002F Expected output: true\n",[35,82909,82910,82912,82914,82916,82918,82920,82922,82924,82926],{"class":37,"line":65},[35,82911,77857],{"class":359},[35,82913,58573],{"class":48},[35,82915,82892],{"class":359},[35,82917,82895],{"class":48},[35,82919,499],{"class":359},[35,82921,82900],{"class":306},[35,82923,12769],{"class":359},[35,82925,568],{"class":58},[35,82927,30823],{"class":359},[35,82929,82930],{"class":37,"line":74},[35,82931,82932],{"class":41},"\u002F\u002F Expected output: false\n",[25,82934,82936],{"className":50959,"code":82935,"language":50961,"meta":30,"style":30},"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",[32,82937,82938,82943,82948,82952,82957,82962],{"__ignoreMap":30},[35,82939,82940],{"class":37,"line":38},[35,82941,82942],{"class":359},"startsWith(searchString)\n",[35,82944,82945],{"class":37,"line":45},[35,82946,82947],{"class":359},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[35,82949,82950],{"class":37,"line":55},[35,82951,141],{"emptyLinePlaceholder":140},[35,82953,82954],{"class":37,"line":65},[35,82955,82956],{"class":359},"const str3 = 'pink老师上课中'\n",[35,82958,82959],{"class":37,"line":74},[35,82960,82961],{"class":359},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[35,82963,82964],{"class":37,"line":83},[35,82965,82966],{"class":359},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23244,82968,82970],{"id":82969},"_410534-includes","4.10.5.3.4 includes",[21,82972,82973],{},"includes(searchString) includes(searchString, position)",[14,82975,82976],{},[17,82977,82978],{},"searchString:",[21,82980,82981,82982,82984,82985,82990,82991,82996,82997,21834,83000,83003,83004,83007],{},"一个要在 ",[32,82983,1664],{}," 中查找的字符串。",[734,82986,82989],{"href":82987,"rel":82988},"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",[24198],"不能是正则表达式","。所有非正则表达式的值都会被",[734,82992,82995],{"href":82993,"rel":82994},"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",[24198],"强制转换为字符串","，因此如果该参数被省略或传入 ",[32,82998,82999],{},"undefined",[32,83001,83002],{},"includes()"," 方法会在字符串中搜索 ",[32,83005,83006],{},"\"undefined\"","，这通常不是你想要的",[14,83009,83010],{"start":45},[17,83011,83012,1353],{},[32,83013,83014],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[21,83016,83017,83018,83021,83022],{},"在字符串中开始搜索 ",[32,83019,83020],{},"searchString"," 的位置。默认值为 ",[32,83023,687],{},[14,83025,83026],{"start":55},[17,83027,83028],{},"返回值：",[21,83030,83031,83032,83034,83035,83039,83040],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[32,83033,83020],{}," 为空字符串的情况），则返回 ",[645,83036,83037],{},[32,83038,378],{}," ，否则返回 ",[645,83041,83042],{},[32,83043,66346],{},[14,83045,83046],{"start":65},[17,83047,83048],{},"异常：",[21,83050,82547,83051,14129,83053,83057],{},[32,83052,83020],{},[734,83054,83056],{"href":82987,"rel":83055},[24198],"是一个正则表达式","，则会抛出",[21,83059,83060],{},"只要是有就是true，不需要非得以谁开头结尾",[25,83062,83064],{"className":77820,"code":83063,"language":77822,"meta":30,"style":30},"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",[32,83065,83066,83077,83100,83119,83139,83161,83180],{"__ignoreMap":30},[35,83067,83068,83070,83072,83074],{"class":37,"line":38},[35,83069,7126],{"class":495},[35,83071,80100],{"class":359},[35,83073,544],{"class":495},[35,83075,83076],{"class":306}," \"To be, or not to be, that is the question.\"\n",[35,83078,83079,83081,83083,83086,83089,83091,83094,83097],{"class":37,"line":45},[35,83080,77857],{"class":359},[35,83082,58573],{"class":48},[35,83084,83085],{"class":359},"(str.",[35,83087,83088],{"class":48},"includes",[35,83090,499],{"class":359},[35,83092,83093],{"class":306},"\"To be\"",[35,83095,83096],{"class":359},"))",[35,83098,83099],{"class":41},"  \u002F\u002F true\n",[35,83101,83102,83104,83106,83108,83110,83112,83115,83117],{"class":37,"line":55},[35,83103,77857],{"class":359},[35,83105,58573],{"class":48},[35,83107,83085],{"class":359},[35,83109,83088],{"class":48},[35,83111,499],{"class":359},[35,83113,83114],{"class":306},"\"question\"",[35,83116,83096],{"class":359},[35,83118,83099],{"class":41},[35,83120,83121,83123,83125,83127,83129,83131,83134,83136],{"class":37,"line":65},[35,83122,77857],{"class":359},[35,83124,58573],{"class":48},[35,83126,83085],{"class":359},[35,83128,83088],{"class":48},[35,83130,499],{"class":359},[35,83132,83133],{"class":306},"\"nonexistent\"",[35,83135,83096],{"class":359},[35,83137,83138],{"class":41},"  \u002F\u002F false\n",[35,83140,83141,83143,83145,83147,83149,83151,83153,83155,83157,83159],{"class":37,"line":74},[35,83142,77857],{"class":359},[35,83144,58573],{"class":48},[35,83146,83085],{"class":359},[35,83148,83088],{"class":48},[35,83150,499],{"class":359},[35,83152,83093],{"class":306},[35,83154,12769],{"class":359},[35,83156,713],{"class":58},[35,83158,83096],{"class":359},[35,83160,83138],{"class":41},[35,83162,83163,83165,83167,83169,83171,83173,83176,83178],{"class":37,"line":83},[35,83164,77857],{"class":359},[35,83166,58573],{"class":48},[35,83168,83085],{"class":359},[35,83170,83088],{"class":48},[35,83172,499],{"class":359},[35,83174,83175],{"class":306},"\"TO BE\"",[35,83177,83096],{"class":359},[35,83179,83138],{"class":41},[35,83181,83182,83184,83186,83188,83190,83192,83194,83196],{"class":37,"line":92},[35,83183,77857],{"class":359},[35,83185,58573],{"class":48},[35,83187,83085],{"class":359},[35,83189,83088],{"class":48},[35,83191,499],{"class":359},[35,83193,7986],{"class":306},[35,83195,83096],{"class":359},[35,83197,83099],{"class":41},[23244,83199,83201],{"id":83200},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[25,83203,83205],{"className":53393,"code":83204,"language":53395,"meta":30,"style":30},"\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",[32,83206,83207,83215,83223,83228,83233,83238,83243,83248,83256],{"__ignoreMap":30},[35,83208,83209,83211,83213],{"class":37,"line":38},[35,83210,1404],{"class":359},[35,83212,52126],{"class":51626},[35,83214,51633],{"class":359},[35,83216,83217,83219,83221],{"class":37,"line":45},[35,83218,52470],{"class":359},[35,83220,52139],{"class":51626},[35,83222,51633],{"class":359},[35,83224,83225],{"class":37,"line":55},[35,83226,83227],{"class":359},"    const num = 10\n",[35,83229,83230],{"class":37,"line":65},[35,83231,83232],{"class":359},"    \u002F\u002F 强制转换\n",[35,83234,83235],{"class":37,"line":74},[35,83236,83237],{"class":359},"    console.log(String(num))\n",[35,83239,83240],{"class":37,"line":83},[35,83241,83242],{"class":359},"    \u002F\u002F toString()方法转换\n",[35,83244,83245],{"class":37,"line":92},[35,83246,83247],{"class":359},"    console.log(num.toString())\n",[35,83249,83250,83252,83254],{"class":37,"line":101},[35,83251,52743],{"class":359},[35,83253,52139],{"class":51626},[35,83255,51633],{"class":359},[35,83257,83258,83260,83262],{"class":37,"line":110},[35,83259,52111],{"class":359},[35,83261,52126],{"class":51626},[35,83263,51633],{"class":359},[23244,83265,83267],{"id":83266},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[21,83269,83270],{},[1823,83271],{"alt":30,"src":83272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[25,83274,83276],{"className":50959,"code":83275,"language":50961,"meta":30,"style":30},"\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",[32,83277,83278,83288,83302,83306,83314,83328,83348,83360,83368,83372,83380,83392,83400,83412,83417,83422,83427,83474,83490,83498,83506,83510],{"__ignoreMap":30},[35,83279,83280,83282,83284,83286],{"class":37,"line":38},[35,83281,51623],{"class":359},[35,83283,51627],{"class":51626},[35,83285,51630],{"class":48},[35,83287,51633],{"class":359},[35,83289,83290,83292,83294,83296,83298,83300],{"class":37,"line":45},[35,83291,1404],{"class":359},[35,83293,50961],{"class":51626},[35,83295,51642],{"class":48},[35,83297,544],{"class":359},[35,83299,51647],{"class":306},[35,83301,51633],{"class":359},[35,83303,83304],{"class":37,"line":55},[35,83305,141],{"emptyLinePlaceholder":140},[35,83307,83308,83310,83312],{"class":37,"line":65},[35,83309,1404],{"class":359},[35,83311,51660],{"class":51626},[35,83313,51633],{"class":359},[35,83315,83316,83318,83320,83322,83324,83326],{"class":37,"line":74},[35,83317,52470],{"class":359},[35,83319,51670],{"class":51626},[35,83321,51673],{"class":48},[35,83323,544],{"class":359},[35,83325,51678],{"class":306},[35,83327,51633],{"class":359},[35,83329,83330,83332,83334,83336,83338,83340,83342,83344,83346],{"class":37,"line":83},[35,83331,52470],{"class":359},[35,83333,51670],{"class":51626},[35,83335,15254],{"class":48},[35,83337,544],{"class":359},[35,83339,51717],{"class":306},[35,83341,51697],{"class":48},[35,83343,544],{"class":359},[35,83345,51724],{"class":306},[35,83347,51633],{"class":359},[35,83349,83350,83352,83354,83356,83358],{"class":37,"line":92},[35,83351,52470],{"class":359},[35,83353,51733],{"class":51626},[35,83355,51736],{"class":359},[35,83357,51733],{"class":51626},[35,83359,51633],{"class":359},[35,83361,83362,83364,83366],{"class":37,"line":101},[35,83363,52111],{"class":359},[35,83365,51660],{"class":51626},[35,83367,51633],{"class":359},[35,83369,83370],{"class":37,"line":110},[35,83371,141],{"emptyLinePlaceholder":140},[35,83373,83374,83376,83378],{"class":37,"line":119},[35,83375,1404],{"class":359},[35,83377,52126],{"class":51626},[35,83379,51633],{"class":359},[35,83381,83382,83384,83386,83388,83390],{"class":37,"line":128},[35,83383,52470],{"class":359},[35,83385,51937],{"class":51626},[35,83387,55640],{"class":359},[35,83389,51937],{"class":51626},[35,83391,51633],{"class":359},[35,83393,83394,83396,83398],{"class":37,"line":137},[35,83395,52470],{"class":359},[35,83397,52139],{"class":51626},[35,83399,51633],{"class":359},[35,83401,83402,83404,83407,83409],{"class":37,"line":144},[35,83403,11555],{"class":495},[35,83405,83406],{"class":58}," gift",[35,83408,13898],{"class":495},[35,83410,83411],{"class":306}," '50g的茶叶，清洗球'\n",[35,83413,83414],{"class":37,"line":150},[35,83415,83416],{"class":41},"    \u002F\u002F 1.把字符串拆分为数组\n",[35,83418,83419],{"class":37,"line":159},[35,83420,83421],{"class":41},"    \u002F\u002F console.log(gift.split(','))\n",[35,83423,83424],{"class":37,"line":168},[35,83425,83426],{"class":41},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[35,83428,83429,83431,83433,83435,83438,83441,83443,83446,83448,83450,83452,83454,83456,83459,83461,83464,83466,83468,83470,83472],{"class":37,"line":177},[35,83430,11555],{"class":495},[35,83432,74244],{"class":58},[35,83434,13898],{"class":495},[35,83436,83437],{"class":359}," gift.",[35,83439,83440],{"class":48},"split",[35,83442,499],{"class":359},[35,83444,83445],{"class":306},"'，'",[35,83447,31152],{"class":359},[35,83449,74369],{"class":48},[35,83451,499],{"class":359},[35,83453,80120],{"class":5550},[35,83455,80123],{"class":495},[35,83457,83458],{"class":306}," `\u003Cspan>【赠品】${",[35,83460,80120],{"class":359},[35,83462,83463],{"class":306},"}\u003C\u002Fspan>\u003Cbr>`",[35,83465,31152],{"class":359},[35,83467,74548],{"class":48},[35,83469,499],{"class":359},[35,83471,74553],{"class":306},[35,83473,505],{"class":359},[35,83475,83476,83478,83480,83482,83484,83486,83488],{"class":37,"line":182},[35,83477,52733],{"class":359},[35,83479,54725],{"class":48},[35,83481,499],{"class":359},[35,83483,82256],{"class":306},[35,83485,74574],{"class":359},[35,83487,544],{"class":495},[35,83489,74310],{"class":359},[35,83491,83492,83494,83496],{"class":37,"line":188},[35,83493,52743],{"class":359},[35,83495,52139],{"class":51626},[35,83497,51633],{"class":359},[35,83499,83500,83502,83504],{"class":37,"line":197},[35,83501,52111],{"class":359},[35,83503,52126],{"class":51626},[35,83505,51633],{"class":359},[35,83507,83508],{"class":37,"line":206},[35,83509,141],{"emptyLinePlaceholder":140},[35,83511,83512,83514,83516],{"class":37,"line":215},[35,83513,52111],{"class":359},[35,83515,50961],{"class":51626},[35,83517,51633],{"class":359},[22332,83519,83521],{"id":83520},"_41054-number","4.10.5.4 Number",[21,83523,83524],{},[1823,83525],{"alt":30,"src":83526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[21,83528,83529],{},"整数也可以进行toFixed来保留小数",[21,83531,83532],{},"比如：",[21,83534,83535],{},"const price=10",[21,83537,83538],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22332,83540,83542],{"id":83541},"_41055-购物车展示","4.10.5.5 购物车展示",[21,83544,83545],{},[1823,83546],{"alt":30,"src":83547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[25,83549,83551],{"className":50959,"code":83550,"language":50961,"meta":30,"style":30},"\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",[32,83552,83553,83563,83577,83581,83589,83603,83623,83635,83643,83649,83659,83669,83679,83683,83687,83693,83705,83719,83723,83727,83733,83745,83761,83771,83787,83791,83795,83801,83811,83821,83825,83829,83837,83849,83861,83873,83877,83881,83889,83901,83905,83909,83920,83930,83942,83954,83964,83968,83972,83980,83989,84001,84011,84021,84025,84029,84037,84046,84053,84063,84075,84079,84083,84092,84102,84113,84125,84137,84141,84145,84154,84164,84175,84179,84183,84189,84201,84213,84223,84233,84251,84263,84267,84271,84280,84292,84302,84312,84324,84328,84336,84344,84348,84356,84370,84378,84392,84420,84428,84436,84446,84450,84458,84466,84475,84483,84492,84502,84506,84510,84518,84526,84535,84543,84551,84564,84568,84572,84580,84588,84597,84605,84613,84628,84632,84636,84644,84652,84661,84669,84677,84691,84699,84703,84707,84712,84738,84743,84780,84785,84808,84813,84867,84872,84908,84912,84918,84923,84932,84946,84955,84974,84983,84993,84998,85003,85016,85021,85075,85101,85109,85117,85121],{"__ignoreMap":30},[35,83554,83555,83557,83559,83561],{"class":37,"line":38},[35,83556,51623],{"class":359},[35,83558,51627],{"class":51626},[35,83560,51630],{"class":48},[35,83562,51633],{"class":359},[35,83564,83565,83567,83569,83571,83573,83575],{"class":37,"line":45},[35,83566,1404],{"class":359},[35,83568,50961],{"class":51626},[35,83570,51642],{"class":48},[35,83572,544],{"class":359},[35,83574,51647],{"class":306},[35,83576,51633],{"class":359},[35,83578,83579],{"class":37,"line":55},[35,83580,141],{"emptyLinePlaceholder":140},[35,83582,83583,83585,83587],{"class":37,"line":65},[35,83584,1404],{"class":359},[35,83586,51660],{"class":51626},[35,83588,51633],{"class":359},[35,83590,83591,83593,83595,83597,83599,83601],{"class":37,"line":74},[35,83592,52470],{"class":359},[35,83594,51670],{"class":51626},[35,83596,51673],{"class":48},[35,83598,544],{"class":359},[35,83600,51678],{"class":306},[35,83602,51633],{"class":359},[35,83604,83605,83607,83609,83611,83613,83615,83617,83619,83621],{"class":37,"line":83},[35,83606,52470],{"class":359},[35,83608,51670],{"class":51626},[35,83610,15254],{"class":48},[35,83612,544],{"class":359},[35,83614,51717],{"class":306},[35,83616,51697],{"class":48},[35,83618,544],{"class":359},[35,83620,51724],{"class":306},[35,83622,51633],{"class":359},[35,83624,83625,83627,83629,83631,83633],{"class":37,"line":92},[35,83626,52470],{"class":359},[35,83628,51733],{"class":51626},[35,83630,51736],{"class":359},[35,83632,51733],{"class":51626},[35,83634,51633],{"class":359},[35,83636,83637,83639,83641],{"class":37,"line":101},[35,83638,52470],{"class":359},[35,83640,416],{"class":51626},[35,83642,51633],{"class":359},[35,83644,83645,83647],{"class":37,"line":110},[35,83646,6737],{"class":51626},[35,83648,15906],{"class":359},[35,83650,83651,83653,83655,83657],{"class":37,"line":119},[35,83652,55021],{"class":58},[35,83654,51763],{"class":359},[35,83656,687],{"class":58},[35,83658,1655],{"class":359},[35,83660,83661,83663,83665,83667],{"class":37,"line":128},[35,83662,55032],{"class":58},[35,83664,51763],{"class":359},[35,83666,687],{"class":58},[35,83668,1655],{"class":359},[35,83670,83671,83673,83675,83677],{"class":37,"line":137},[35,83672,72921],{"class":58},[35,83674,51763],{"class":359},[35,83676,60831],{"class":58},[35,83678,1655],{"class":359},[35,83680,83681],{"class":37,"line":144},[35,83682,2528],{"class":359},[35,83684,83685],{"class":37,"line":150},[35,83686,141],{"emptyLinePlaceholder":140},[35,83688,83689,83691],{"class":37,"line":159},[35,83690,62449],{"class":48},[35,83692,15906],{"class":359},[35,83694,83695,83697,83699,83701,83703],{"class":37,"line":168},[35,83696,55097],{"class":58},[35,83698,51763],{"class":359},[35,83700,78899],{"class":58},[35,83702,51818],{"class":495},[35,83704,1655],{"class":359},[35,83706,83707,83709,83711,83713,83715,83717],{"class":37,"line":177},[35,83708,55032],{"class":58},[35,83710,51763],{"class":359},[35,83712,807],{"class":58},[35,83714,51818],{"class":495},[35,83716,51882],{"class":58},[35,83718,1655],{"class":359},[35,83720,83721],{"class":37,"line":182},[35,83722,2528],{"class":359},[35,83724,83725],{"class":37,"line":188},[35,83726,141],{"emptyLinePlaceholder":140},[35,83728,83729,83731],{"class":37,"line":197},[35,83730,78950],{"class":48},[35,83732,15906],{"class":359},[35,83734,83735,83737,83739,83741,83743],{"class":37,"line":206},[35,83736,55021],{"class":58},[35,83738,51763],{"class":359},[35,83740,1069],{"class":58},[35,83742,51818],{"class":495},[35,83744,1655],{"class":359},[35,83746,83747,83749,83751,83753,83755,83757,83759],{"class":37,"line":215},[35,83748,62186],{"class":58},[35,83750,51763],{"class":359},[35,83752,28449],{"class":58},[35,83754,79005],{"class":58},[35,83756,79008],{"class":58},[35,83758,1189],{"class":495},[35,83760,1655],{"class":359},[35,83762,83763,83765,83767,83769],{"class":37,"line":224},[35,83764,55335],{"class":58},[35,83766,51763],{"class":359},[35,83768,51803],{"class":58},[35,83770,1655],{"class":359},[35,83772,83773,83775,83777,83779,83781,83783,83785],{"class":37,"line":233},[35,83774,62303],{"class":58},[35,83776,51763],{"class":359},[35,83778,713],{"class":58},[35,83780,51818],{"class":495},[35,83782,51847],{"class":58},[35,83784,62570],{"class":58},[35,83786,1655],{"class":359},[35,83788,83789],{"class":37,"line":238},[35,83790,2528],{"class":359},[35,83792,83793],{"class":37,"line":244},[35,83794,141],{"emptyLinePlaceholder":140},[35,83796,83797,83799],{"class":37,"line":253},[35,83798,79068],{"class":48},[35,83800,15906],{"class":359},[35,83802,83803,83805,83807,83809],{"class":37,"line":262},[35,83804,62351],{"class":58},[35,83806,51763],{"class":359},[35,83808,62356],{"class":58},[35,83810,1655],{"class":359},[35,83812,83813,83815,83817,83819],{"class":37,"line":271},[35,83814,55210],{"class":58},[35,83816,51763],{"class":359},[35,83818,62144],{"class":58},[35,83820,1655],{"class":359},[35,83822,83823],{"class":37,"line":280},[35,83824,2528],{"class":359},[35,83826,83827],{"class":37,"line":289},[35,83828,141],{"emptyLinePlaceholder":140},[35,83830,83831,83833,83835],{"class":37,"line":294},[35,83832,78950],{"class":48},[35,83834,55941],{"class":51626},[35,83836,15906],{"class":359},[35,83838,83839,83841,83843,83845,83847],{"class":37,"line":300},[35,83840,55097],{"class":58},[35,83842,51763],{"class":359},[35,83844,1106],{"class":58},[35,83846,51818],{"class":495},[35,83848,1655],{"class":359},[35,83850,83851,83853,83855,83857,83859],{"class":37,"line":313},[35,83852,55111],{"class":58},[35,83854,51763],{"class":359},[35,83856,1106],{"class":58},[35,83858,51818],{"class":495},[35,83860,1655],{"class":359},[35,83862,83863,83865,83867,83869,83871],{"class":37,"line":324},[35,83864,62076],{"class":58},[35,83866,51763],{"class":359},[35,83868,372],{"class":58},[35,83870,51818],{"class":495},[35,83872,1655],{"class":359},[35,83874,83875],{"class":37,"line":2955},[35,83876,2528],{"class":359},[35,83878,83879],{"class":37,"line":8282},[35,83880,141],{"emptyLinePlaceholder":140},[35,83882,83883,83885,83887],{"class":37,"line":8306},[35,83884,78950],{"class":48},[35,83886,62630],{"class":48},[35,83888,15906],{"class":359},[35,83890,83891,83893,83895,83897,83899],{"class":37,"line":8311},[35,83892,55097],{"class":58},[35,83894,51763],{"class":359},[35,83896,2072],{"class":58},[35,83898,51818],{"class":495},[35,83900,1655],{"class":359},[35,83902,83903],{"class":37,"line":8317},[35,83904,2528],{"class":359},[35,83906,83907],{"class":37,"line":8344},[35,83908,141],{"emptyLinePlaceholder":140},[35,83910,83911,83913,83915,83918],{"class":37,"line":8349},[35,83912,78950],{"class":48},[35,83914,62630],{"class":48},[35,83916,83917],{"class":48}," .tag",[35,83919,15906],{"class":359},[35,83921,83922,83924,83926,83928],{"class":37,"line":8355},[35,83923,55335],{"class":58},[35,83925,51763],{"class":359},[35,83927,61195],{"class":58},[35,83929,1655],{"class":359},[35,83931,83932,83934,83936,83938,83940],{"class":37,"line":8367},[35,83933,55021],{"class":58},[35,83935,51763],{"class":359},[35,83937,574],{"class":58},[35,83939,51818],{"class":495},[35,83941,1655],{"class":359},[35,83943,83944,83946,83948,83950,83952],{"class":37,"line":8379},[35,83945,55248],{"class":58},[35,83947,51763],{"class":359},[35,83949,992],{"class":58},[35,83951,51818],{"class":495},[35,83953,1655],{"class":359},[35,83955,83956,83958,83960,83962],{"class":37,"line":8391},[35,83957,57742],{"class":58},[35,83959,51763],{"class":359},[35,83961,62396],{"class":58},[35,83963,1655],{"class":359},[35,83965,83966],{"class":37,"line":10050},[35,83967,2528],{"class":359},[35,83969,83970],{"class":37,"line":10075},[35,83971,141],{"emptyLinePlaceholder":140},[35,83973,83974,83976,83978],{"class":37,"line":10098},[35,83975,78950],{"class":48},[35,83977,79242],{"class":48},[35,83979,31792],{"class":359},[35,83981,83982,83984,83987],{"class":37,"line":10122},[35,83983,78950],{"class":48},[35,83985,83986],{"class":48}," .sub-total",[35,83988,15906],{"class":359},[35,83990,83991,83993,83995,83997,83999],{"class":37,"line":10127},[35,83992,55248],{"class":58},[35,83994,51763],{"class":359},[35,83996,1144],{"class":58},[35,83998,51818],{"class":495},[35,84000,1655],{"class":359},[35,84002,84003,84005,84007,84009],{"class":37,"line":10132},[35,84004,57742],{"class":58},[35,84006,51763],{"class":359},[35,84008,79265],{"class":58},[35,84010,1655],{"class":359},[35,84012,84013,84015,84017,84019],{"class":37,"line":10137},[35,84014,62163],{"class":58},[35,84016,51763],{"class":359},[35,84018,713],{"class":58},[35,84020,1655],{"class":359},[35,84022,84023],{"class":37,"line":10146},[35,84024,2528],{"class":359},[35,84026,84027],{"class":37,"line":10151},[35,84028,141],{"emptyLinePlaceholder":140},[35,84030,84031,84033,84035],{"class":37,"line":10157},[35,84032,78950],{"class":48},[35,84034,79282],{"class":48},[35,84036,31792],{"class":359},[35,84038,84039,84041,84044],{"class":37,"line":10178},[35,84040,78950],{"class":48},[35,84042,84043],{"class":48}," .sub-total::before",[35,84045,31792],{"class":359},[35,84047,84048,84051],{"class":37,"line":10184},[35,84049,84050],{"class":48},"    .amount::before",[35,84052,15906],{"class":359},[35,84054,84055,84057,84059,84061],{"class":37,"line":10198},[35,84056,79289],{"class":58},[35,84058,51763],{"class":359},[35,84060,79294],{"class":306},[35,84062,1655],{"class":359},[35,84064,84065,84067,84069,84071,84073],{"class":37,"line":10204},[35,84066,55248],{"class":58},[35,84068,51763],{"class":359},[35,84070,992],{"class":58},[35,84072,51818],{"class":495},[35,84074,1655],{"class":359},[35,84076,84077],{"class":37,"line":10231},[35,84078,2528],{"class":359},[35,84080,84081],{"class":37,"line":10240},[35,84082,141],{"emptyLinePlaceholder":140},[35,84084,84085,84087,84090],{"class":37,"line":10246},[35,84086,78950],{"class":48},[35,84088,84089],{"class":48}," .spec",[35,84091,15906],{"class":359},[35,84093,84094,84096,84098,84100],{"class":37,"line":10254},[35,84095,62163],{"class":58},[35,84097,51763],{"class":359},[35,84099,574],{"class":58},[35,84101,1655],{"class":359},[35,84103,84104,84106,84108,84111],{"class":37,"line":10259},[35,84105,57742],{"class":58},[35,84107,51763],{"class":359},[35,84109,84110],{"class":58},"#888",[35,84112,1655],{"class":359},[35,84114,84115,84117,84119,84121,84123],{"class":37,"line":16938},[35,84116,55248],{"class":58},[35,84118,51763],{"class":359},[35,84120,1043],{"class":58},[35,84122,51818],{"class":495},[35,84124,1655],{"class":359},[35,84126,84127,84129,84131,84133,84135],{"class":37,"line":16944},[35,84128,62326],{"class":58},[35,84130,51763],{"class":359},[35,84132,1194],{"class":58},[35,84134,51818],{"class":495},[35,84136,1655],{"class":359},[35,84138,84139],{"class":37,"line":16967},[35,84140,2528],{"class":359},[35,84142,84143],{"class":37,"line":16973},[35,84144,141],{"emptyLinePlaceholder":140},[35,84146,84147,84149,84152],{"class":37,"line":16996},[35,84148,78950],{"class":48},[35,84150,84151],{"class":48}," .count",[35,84153,15906],{"class":359},[35,84155,84156,84158,84160,84162],{"class":37,"line":17010},[35,84157,62163],{"class":58},[35,84159,51763],{"class":359},[35,84161,713],{"class":58},[35,84163,1655],{"class":359},[35,84165,84166,84168,84170,84173],{"class":37,"line":17030},[35,84167,57742],{"class":58},[35,84169,51763],{"class":359},[35,84171,84172],{"class":58},"#aaa",[35,84174,1655],{"class":359},[35,84176,84177],{"class":37,"line":17036},[35,84178,2528],{"class":359},[35,84180,84181],{"class":37,"line":17047},[35,84182,141],{"emptyLinePlaceholder":140},[35,84184,84185,84187],{"class":37,"line":17070},[35,84186,72800],{"class":48},[35,84188,15906],{"class":359},[35,84190,84191,84193,84195,84197,84199],{"class":37,"line":17092},[35,84192,55097],{"class":58},[35,84194,51763],{"class":359},[35,84196,78899],{"class":58},[35,84198,51818],{"class":495},[35,84200,1655],{"class":359},[35,84202,84203,84205,84207,84209,84211],{"class":37,"line":17097},[35,84204,55032],{"class":58},[35,84206,51763],{"class":359},[35,84208,687],{"class":58},[35,84210,51882],{"class":58},[35,84212,1655],{"class":359},[35,84214,84215,84217,84219,84221],{"class":37,"line":17103},[35,84216,55335],{"class":58},[35,84218,51763],{"class":359},[35,84220,51803],{"class":58},[35,84222,1655],{"class":359},[35,84224,84225,84227,84229,84231],{"class":37,"line":17117},[35,84226,55346],{"class":58},[35,84228,51763],{"class":359},[35,84230,51906],{"class":58},[35,84232,1655],{"class":359},[35,84234,84235,84238,84240,84242,84244,84246,84249],{"class":37,"line":17130},[35,84236,84237],{"class":58},"      border-top",[35,84239,51763],{"class":359},[35,84241,713],{"class":58},[35,84243,51818],{"class":495},[35,84245,51847],{"class":58},[35,84247,84248],{"class":58}," #4e4e4e",[35,84250,1655],{"class":359},[35,84252,84253,84255,84257,84259,84261],{"class":37,"line":17135},[35,84254,55021],{"class":58},[35,84256,51763],{"class":359},[35,84258,1194],{"class":58},[35,84260,51818],{"class":495},[35,84262,1655],{"class":359},[35,84264,84265],{"class":37,"line":17149},[35,84266,2528],{"class":359},[35,84268,84269],{"class":37,"line":17154},[35,84270,141],{"emptyLinePlaceholder":140},[35,84272,84273,84275,84278],{"class":37,"line":17160},[35,84274,72800],{"class":48},[35,84276,84277],{"class":48}," .amount",[35,84279,15906],{"class":359},[35,84281,84282,84284,84286,84288,84290],{"class":37,"line":17165},[35,84283,55248],{"class":58},[35,84285,51763],{"class":359},[35,84287,1144],{"class":58},[35,84289,51818],{"class":495},[35,84291,1655],{"class":359},[35,84293,84294,84296,84298,84300],{"class":37,"line":17179},[35,84295,57742],{"class":58},[35,84297,51763],{"class":359},[35,84299,79265],{"class":58},[35,84301,1655],{"class":359},[35,84303,84304,84306,84308,84310],{"class":37,"line":17184},[35,84305,62660],{"class":58},[35,84307,51763],{"class":359},[35,84309,51815],{"class":58},[35,84311,1655],{"class":359},[35,84313,84314,84316,84318,84320,84322],{"class":37,"line":17189},[35,84315,62076],{"class":58},[35,84317,51763],{"class":359},[35,84319,1150],{"class":58},[35,84321,51818],{"class":495},[35,84323,1655],{"class":359},[35,84325,84326],{"class":37,"line":17203},[35,84327,2528],{"class":359},[35,84329,84330,84332,84334],{"class":37,"line":17215},[35,84331,52743],{"class":359},[35,84333,416],{"class":51626},[35,84335,51633],{"class":359},[35,84337,84338,84340,84342],{"class":37,"line":17220},[35,84339,52111],{"class":359},[35,84341,51660],{"class":51626},[35,84343,51633],{"class":359},[35,84345,84346],{"class":37,"line":17233},[35,84347,141],{"emptyLinePlaceholder":140},[35,84349,84350,84352,84354],{"class":37,"line":17238},[35,84351,1404],{"class":359},[35,84353,52126],{"class":51626},[35,84355,51633],{"class":359},[35,84357,84358,84360,84362,84364,84366,84368],{"class":37,"line":17243},[35,84359,52470],{"class":359},[35,84361,51937],{"class":51626},[35,84363,53812],{"class":48},[35,84365,544],{"class":359},[35,84367,62934],{"class":306},[35,84369,51633],{"class":359},[35,84371,84372,84374,84376],{"class":37,"line":17248},[35,84373,52743],{"class":359},[35,84375,51937],{"class":51626},[35,84377,51633],{"class":359},[35,84379,84380,84382,84384,84386,84388,84390],{"class":37,"line":17261},[35,84381,52470],{"class":359},[35,84383,51937],{"class":51626},[35,84385,53812],{"class":48},[35,84387,544],{"class":359},[35,84389,62906],{"class":306},[35,84391,51633],{"class":359},[35,84393,84394,84396,84398,84401,84403,84405,84407,84410,84412,84414,84416,84418],{"class":37,"line":17266},[35,84395,51667],{"class":359},[35,84397,51937],{"class":51626},[35,84399,84400],{"class":359},">合计：\u003C",[35,84402,35],{"class":51626},[35,84404,53812],{"class":48},[35,84406,544],{"class":359},[35,84408,84409],{"class":306},"\"amount\"",[35,84411,55640],{"class":359},[35,84413,35],{"class":51626},[35,84415,55640],{"class":359},[35,84417,51937],{"class":51626},[35,84419,51633],{"class":359},[35,84421,84422,84424,84426],{"class":37,"line":32959},[35,84423,52743],{"class":359},[35,84425,51937],{"class":51626},[35,84427,51633],{"class":359},[35,84429,84430,84432,84434],{"class":37,"line":32965},[35,84431,52470],{"class":359},[35,84433,52139],{"class":51626},[35,84435,51633],{"class":359},[35,84437,84438,84440,84442,84444],{"class":37,"line":32971},[35,84439,11555],{"class":495},[35,84441,79702],{"class":58},[35,84443,13898],{"class":495},[35,84445,55773],{"class":359},[35,84447,84448],{"class":37,"line":32977},[35,84449,79711],{"class":359},[35,84451,84452,84454,84456],{"class":37,"line":32983},[35,84453,79716],{"class":359},[35,84455,79719],{"class":306},[35,84457,31792],{"class":359},[35,84459,84460,84462,84464],{"class":37,"line":32994},[35,84461,79726],{"class":359},[35,84463,79729],{"class":306},[35,84465,31792],{"class":359},[35,84467,84468,84470,84473],{"class":37,"line":33000},[35,84469,79736],{"class":359},[35,84471,84472],{"class":58},"289.9",[35,84474,31792],{"class":359},[35,84476,84477,84479,84481],{"class":37,"line":33020},[35,84478,79746],{"class":359},[35,84480,79749],{"class":306},[35,84482,31792],{"class":359},[35,84484,84485,84488,84490],{"class":37,"line":33026},[35,84486,84487],{"class":359},"        count: ",[35,84489,574],{"class":58},[35,84491,31792],{"class":359},[35,84493,84494,84497,84500],{"class":37,"line":33037},[35,84495,84496],{"class":359},"        spec: { color: ",[35,84498,84499],{"class":306},"'白色'",[35,84501,55930],{"class":359},[35,84503,84504],{"class":37,"line":33043},[35,84505,78217],{"class":359},[35,84507,84508],{"class":37,"line":33049},[35,84509,79711],{"class":359},[35,84511,84512,84514,84516],{"class":37,"line":33055},[35,84513,79716],{"class":359},[35,84515,79810],{"class":306},[35,84517,31792],{"class":359},[35,84519,84520,84522,84524],{"class":37,"line":33061},[35,84521,79726],{"class":359},[35,84523,79819],{"class":306},[35,84525,31792],{"class":359},[35,84527,84528,84530,84533],{"class":37,"line":33067},[35,84529,79736],{"class":359},[35,84531,84532],{"class":58},"109.8",[35,84534,31792],{"class":359},[35,84536,84537,84539,84541],{"class":37,"line":33073},[35,84538,79746],{"class":359},[35,84540,79837],{"class":306},[35,84542,31792],{"class":359},[35,84544,84545,84547,84549],{"class":37,"line":33079},[35,84546,84487],{"class":359},[35,84548,568],{"class":58},[35,84550,31792],{"class":359},[35,84552,84553,84556,84558,84560,84562],{"class":37,"line":33099},[35,84554,84555],{"class":359},"        spec: { size: ",[35,84557,82228],{"class":306},[35,84559,55790],{"class":359},[35,84561,82233],{"class":306},[35,84563,55930],{"class":359},[35,84565,84566],{"class":37,"line":33105},[35,84567,78217],{"class":359},[35,84569,84570],{"class":37,"line":33121},[35,84571,79711],{"class":359},[35,84573,84574,84576,84578],{"class":37,"line":33127},[35,84575,79716],{"class":359},[35,84577,79854],{"class":306},[35,84579,31792],{"class":359},[35,84581,84582,84584,84586],{"class":37,"line":33141},[35,84583,79726],{"class":359},[35,84585,79863],{"class":306},[35,84587,31792],{"class":359},[35,84589,84590,84592,84595],{"class":37,"line":33147},[35,84591,79736],{"class":359},[35,84593,84594],{"class":58},"488",[35,84596,31792],{"class":359},[35,84598,84599,84601,84603],{"class":37,"line":33162},[35,84600,79746],{"class":359},[35,84602,79881],{"class":306},[35,84604,31792],{"class":359},[35,84606,84607,84609,84611],{"class":37,"line":33168},[35,84608,84487],{"class":359},[35,84610,713],{"class":58},[35,84612,31792],{"class":359},[35,84614,84615,84617,84620,84623,84626],{"class":37,"line":33177},[35,84616,84496],{"class":359},[35,84618,84619],{"class":306},"'青色'",[35,84621,84622],{"class":359},", sum: ",[35,84624,84625],{"class":306},"'一大四小'",[35,84627,55930],{"class":359},[35,84629,84630],{"class":37,"line":33183},[35,84631,78217],{"class":359},[35,84633,84634],{"class":37,"line":33192},[35,84635,79711],{"class":359},[35,84637,84638,84640,84642],{"class":37,"line":33198},[35,84639,79716],{"class":359},[35,84641,79898],{"class":306},[35,84643,31792],{"class":359},[35,84645,84646,84648,84650],{"class":37,"line":33204},[35,84647,79726],{"class":359},[35,84649,79907],{"class":306},[35,84651,31792],{"class":359},[35,84653,84654,84656,84659],{"class":37,"line":33213},[35,84655,79736],{"class":359},[35,84657,84658],{"class":58},"139",[35,84660,31792],{"class":359},[35,84662,84663,84665,84667],{"class":37,"line":33219},[35,84664,79746],{"class":359},[35,84666,79925],{"class":306},[35,84668,31792],{"class":359},[35,84670,84671,84673,84675],{"class":37,"line":33230},[35,84672,84487],{"class":359},[35,84674,713],{"class":58},[35,84676,31792],{"class":359},[35,84678,84679,84681,84684,84686,84689],{"class":37,"line":33236},[35,84680,84555],{"class":359},[35,84682,84683],{"class":306},"'小号'",[35,84685,55790],{"class":359},[35,84687,84688],{"class":306},"'紫色'",[35,84690,55796],{"class":359},[35,84692,84693,84696],{"class":37,"line":33255},[35,84694,84695],{"class":359},"        gift: ",[35,84697,84698],{"class":306},"'50g茶叶,清洗球'\n",[35,84700,84701],{"class":37,"line":33261},[35,84702,52724],{"class":359},[35,84704,84705],{"class":37,"line":33272},[35,84706,53435],{"class":359},[35,84708,84709],{"class":37,"line":33278},[35,84710,84711],{"class":41},"    \u002F\u002F  1.根据数据渲染页面\n",[35,84713,84714,84716,84718,84720,84722,84724,84726,84728,84730,84732,84734,84736],{"class":37,"line":33298},[35,84715,52733],{"class":359},[35,84717,54725],{"class":48},[35,84719,499],{"class":359},[35,84721,80226],{"class":306},[35,84723,74574],{"class":359},[35,84725,544],{"class":495},[35,84727,80373],{"class":359},[35,84729,74369],{"class":48},[35,84731,499],{"class":359},[35,84733,80120],{"class":5550},[35,84735,80123],{"class":495},[35,84737,15906],{"class":359},[35,84739,84740],{"class":37,"line":33314},[35,84741,84742],{"class":41},"      \u002F\u002F 对象解构\n",[35,84744,84745,84747,84749,84751,84753,84755,84757,84760,84762,84764,84766,84769,84771,84774,84776,84778],{"class":37,"line":33320},[35,84746,58554],{"class":495},[35,84748,80132],{"class":359},[35,84750,80145],{"class":58},[35,84752,12769],{"class":359},[35,84754,80135],{"class":58},[35,84756,12769],{"class":359},[35,84758,84759],{"class":58},"count",[35,84761,12769],{"class":359},[35,84763,80140],{"class":58},[35,84765,12769],{"class":359},[35,84767,84768],{"class":58},"spec",[35,84770,12769],{"class":359},[35,84772,84773],{"class":58},"gift",[35,84775,80148],{"class":359},[35,84777,544],{"class":495},[35,84779,80153],{"class":359},[35,84781,84782],{"class":37,"line":33334},[35,84783,84784],{"class":41},"      \u002F\u002F 规格文字模块处理\n",[35,84786,84787,84789,84792,84794,84796,84798,84800,84802,84804,84806],{"class":37,"line":33340},[35,84788,58554],{"class":495},[35,84790,84791],{"class":58}," text",[35,84793,13898],{"class":495},[35,84795,82263],{"class":359},[35,84797,82266],{"class":48},[35,84799,82269],{"class":359},[35,84801,74548],{"class":48},[35,84803,499],{"class":359},[35,84805,82276],{"class":306},[35,84807,505],{"class":359},[35,84809,84810],{"class":37,"line":33346},[35,84811,84812],{"class":41},"      \u002F\u002F 处理赠品模块\n",[35,84814,84815,84817,84819,84821,84824,84826,84828,84830,84832,84835,84837,84839,84841,84843,84845,84848,84850,84853,84855,84857,84859,84861,84863,84865],{"class":37,"line":33357},[35,84816,58554],{"class":495},[35,84818,74244],{"class":58},[35,84820,13898],{"class":495},[35,84822,84823],{"class":359}," gift ",[35,84825,1480],{"class":495},[35,84827,83437],{"class":359},[35,84829,83440],{"class":48},[35,84831,499],{"class":359},[35,84833,84834],{"class":306},"','",[35,84836,31152],{"class":359},[35,84838,74369],{"class":48},[35,84840,499],{"class":359},[35,84842,80120],{"class":5550},[35,84844,80123],{"class":495},[35,84846,84847],{"class":306}," `\u003Cspan class=\"tag\">【赠品】${",[35,84849,80120],{"class":359},[35,84851,84852],{"class":306},"}\u003C\u002Fspan>`",[35,84854,31152],{"class":359},[35,84856,74548],{"class":48},[35,84858,499],{"class":359},[35,84860,74553],{"class":306},[35,84862,14048],{"class":359},[35,84864,1353],{"class":495},[35,84866,70430],{"class":306},[35,84868,84869],{"class":37,"line":33363},[35,84870,84871],{"class":41},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[35,84873,84874,84876,84879,84881,84884,84886,84888,84890,84893,84895,84897,84899,84902,84904,84906],{"class":37,"line":33369},[35,84875,58554],{"class":495},[35,84877,84878],{"class":58}," subtotal",[35,84880,13898],{"class":495},[35,84882,84883],{"class":359}," ((price ",[35,84885,949],{"class":495},[35,84887,6088],{"class":58},[35,84889,6852],{"class":495},[35,84891,84892],{"class":359}," count) ",[35,84894,1078],{"class":495},[35,84896,6088],{"class":58},[35,84898,31152],{"class":359},[35,84900,84901],{"class":48},"toFixed",[35,84903,499],{"class":359},[35,84905,574],{"class":58},[35,84907,505],{"class":359},[35,84909,84910],{"class":37,"line":33379},[35,84911,141],{"emptyLinePlaceholder":140},[35,84913,84914,84916],{"class":37,"line":33385},[35,84915,74307],{"class":495},[35,84917,70494],{"class":306},[35,84919,84920],{"class":37,"line":33396},[35,84921,84922],{"class":306},"        \u003Cdiv class=\"item\">\n",[35,84924,84925,84928,84930],{"class":37,"line":33402},[35,84926,84927],{"class":306},"          \u003Cimg src=\"${",[35,84929,80145],{"class":359},[35,84931,80177],{"class":306},[35,84933,84934,84937,84939,84942,84944],{"class":37,"line":33412},[35,84935,84936],{"class":306},"          \u003Cp class=\"name\">${",[35,84938,80135],{"class":359},[35,84940,84941],{"class":306},"}${",[35,84943,1664],{"class":359},[35,84945,80187],{"class":306},[35,84947,84948,84951,84953],{"class":37,"line":33417},[35,84949,84950],{"class":306},"          \u003Cp class=\"spec\">${",[35,84952,5521],{"class":359},[35,84954,80187],{"class":306},[35,84956,84957,84960,84962,84964,84966,84968,84970,84972],{"class":37,"line":33423},[35,84958,84959],{"class":306},"          \u003Cp class=\"price\">${",[35,84961,80140],{"class":359},[35,84963,1052],{"class":306},[35,84965,84901],{"class":48},[35,84967,499],{"class":306},[35,84969,574],{"class":58},[35,84971,923],{"class":306},[35,84973,80187],{"class":306},[35,84975,84976,84979,84981],{"class":37,"line":33472},[35,84977,84978],{"class":306},"          \u003Cp class=\"count\">x${",[35,84980,84759],{"class":359},[35,84982,80187],{"class":306},[35,84984,84985,84988,84991],{"class":37,"line":33519},[35,84986,84987],{"class":306},"          \u003Cp class=\"sub-total\">${",[35,84989,84990],{"class":359},"subtotal",[35,84992,80187],{"class":306},[35,84994,84995],{"class":37,"line":33524},[35,84996,84997],{"class":306},"        \u003C\u002Fdiv> \n",[35,84999,85000],{"class":37,"line":33530},[35,85001,85002],{"class":306},"             `\n",[35,85004,85005,85008,85010,85012,85014],{"class":37,"line":33549},[35,85006,85007],{"class":359},"    }).",[35,85009,74548],{"class":48},[35,85011,499],{"class":359},[35,85013,74553],{"class":306},[35,85015,505],{"class":359},[35,85017,85018],{"class":37,"line":33555},[35,85019,85020],{"class":41},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[35,85022,85023,85025,85027,85029,85031,85034,85036,85039,85041,85043,85045,85048,85051,85053,85056,85058,85060,85062,85065,85067,85069,85071,85073],{"class":37,"line":33575},[35,85024,11555],{"class":495},[35,85026,63111],{"class":58},[35,85028,13898],{"class":495},[35,85030,80373],{"class":359},[35,85032,85033],{"class":48},"reduce",[35,85035,2717],{"class":359},[35,85037,85038],{"class":5550},"prev",[35,85040,12769],{"class":359},[35,85042,80120],{"class":5550},[35,85044,14048],{"class":359},[35,85046,85047],{"class":495},"=>",[35,85049,85050],{"class":359}," prev ",[35,85052,975],{"class":495},[35,85054,85055],{"class":359}," (item.price ",[35,85057,949],{"class":495},[35,85059,6088],{"class":58},[35,85061,6852],{"class":495},[35,85063,85064],{"class":359}," item.count) ",[35,85066,1078],{"class":495},[35,85068,6088],{"class":58},[35,85070,12769],{"class":359},[35,85072,687],{"class":58},[35,85074,505],{"class":359},[35,85076,85077,85079,85081,85083,85086,85088,85090,85093,85095,85097,85099],{"class":37,"line":33581},[35,85078,52733],{"class":359},[35,85080,54725],{"class":48},[35,85082,499],{"class":359},[35,85084,85085],{"class":306},"'.amount'",[35,85087,74574],{"class":359},[35,85089,544],{"class":495},[35,85091,85092],{"class":359}," total.",[35,85094,84901],{"class":48},[35,85096,499],{"class":359},[35,85098,574],{"class":58},[35,85100,505],{"class":359},[35,85102,85103,85105,85107],{"class":37,"line":33587},[35,85104,52743],{"class":359},[35,85106,52139],{"class":51626},[35,85108,51633],{"class":359},[35,85110,85111,85113,85115],{"class":37,"line":33597},[35,85112,52111],{"class":359},[35,85114,52126],{"class":51626},[35,85116,51633],{"class":359},[35,85118,85119],{"class":37,"line":33602},[35,85120,141],{"emptyLinePlaceholder":140},[35,85122,85123,85125,85127],{"class":37,"line":33608},[35,85124,52111],{"class":359},[35,85126,50961],{"class":51626},[35,85128,51633],{"class":359},[438,85130,85132],{"id":85131},"_411-编程思想","4.11 编程思想",[465,85134,85136],{"id":85135},"_4111-面向过程介绍","4.11.1 面向过程介绍",[21,85138,85139,85142],{},[645,85140,85141],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[21,85144,85145],{},"调用就可以了",[21,85147,85148],{},[1823,85149],{"alt":30,"src":85150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[465,85152,85154],{"id":85153},"_4112-面向对象","4.11.2 面向对象",[21,85156,85157],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[21,85159,85160],{},[1823,85161],{"alt":30,"src":85162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[21,85164,85165],{},"面向对象的特性：",[1501,85167,85168,85171,85174],{},[17,85169,85170],{},"封装性",[17,85172,85173],{},"继承性",[17,85175,85176],{},"多态性",[465,85178,85180],{"id":85179},"_4113-两者比较","4.11.3 两者比较",[21,85182,85183],{},[1823,85184],{"alt":30,"src":85185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[438,85187,85189],{"id":85188},"_412-构造函数回顾","4.12 构造函数回顾",[21,85191,85192],{},[1823,85193],{"alt":30,"src":85194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[21,85196,85197],{},[1823,85198],{"alt":30,"src":85199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[21,85201,85202],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[21,85204,85205],{},[1823,85206],{"alt":30,"src":85207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[438,85209,85211],{"id":85210},"_413-原型","4.13 原型",[465,85213,85215],{"id":85214},"_4131-原型对象的认识","4.13.1 原型对象的认识",[21,85217,85218],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[21,85220,85221],{},[1823,85222],{"alt":30,"src":85223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[21,85225,85226],{},[1823,85227],{"alt":30,"src":85228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[21,85230,85231],{},"原型是构造函数的属性，它也是一个对象",[21,85233,85234],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[21,85236,85237],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[25,85239,85241],{"className":53393,"code":85240,"language":53395,"meta":30,"style":30},"\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",[32,85242,85243,85251,85256,85264,85269,85274,85279,85284,85289,85293,85297,85301,85306,85311,85315,85320,85325,85330,85335,85340,85344,85352],{"__ignoreMap":30},[35,85244,85245,85247,85249],{"class":37,"line":38},[35,85246,1404],{"class":359},[35,85248,52126],{"class":51626},[35,85250,51633],{"class":359},[35,85252,85253],{"class":37,"line":45},[35,85254,85255],{"class":41},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[35,85257,85258,85260,85262],{"class":37,"line":55},[35,85259,52470],{"class":359},[35,85261,52139],{"class":51626},[35,85263,51633],{"class":359},[35,85265,85266],{"class":37,"line":65},[35,85267,85268],{"class":359},"    function Star(uname, age) {\n",[35,85270,85271],{"class":37,"line":74},[35,85272,85273],{"class":359},"      this.uname = uname,\n",[35,85275,85276],{"class":37,"line":83},[35,85277,85278],{"class":359},"        this.age = age\n",[35,85280,85281],{"class":37,"line":92},[35,85282,85283],{"class":359},"      \u002F\u002F this.sing = function () {\n",[35,85285,85286],{"class":37,"line":101},[35,85287,85288],{"class":359},"      \u002F\u002F   console.log('唱歌')\n",[35,85290,85291],{"class":37,"line":110},[35,85292,141],{"emptyLinePlaceholder":140},[35,85294,85295],{"class":37,"line":119},[35,85296,60363],{"class":359},[35,85298,85299],{"class":37,"line":128},[35,85300,2528],{"class":359},[35,85302,85303],{"class":37,"line":137},[35,85304,85305],{"class":359},"    Star.prototype.sing = function () {\n",[35,85307,85308],{"class":37,"line":144},[35,85309,85310],{"class":359},"      console.log('唱歌')\n",[35,85312,85313],{"class":37,"line":150},[35,85314,2528],{"class":359},[35,85316,85317],{"class":37,"line":159},[35,85318,85319],{"class":359},"    \u002F\u002F console.dir(Star.prototype)\n",[35,85321,85322],{"class":37,"line":168},[35,85323,85324],{"class":359},"    const pink = new Star('pink', 18)\n",[35,85326,85327],{"class":37,"line":177},[35,85328,85329],{"class":359},"    const red = new Star('red', 20)\n",[35,85331,85332],{"class":37,"line":182},[35,85333,85334],{"class":359},"    pink.sing()\n",[35,85336,85337],{"class":37,"line":188},[35,85338,85339],{"class":359},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[35,85341,85342],{"class":37,"line":197},[35,85343,141],{"emptyLinePlaceholder":140},[35,85345,85346,85348,85350],{"class":37,"line":206},[35,85347,52743],{"class":359},[35,85349,52139],{"class":51626},[35,85351,51633],{"class":359},[35,85353,85354,85356,85358],{"class":37,"line":215},[35,85355,52111],{"class":359},[35,85357,52126],{"class":51626},[35,85359,51633],{"class":359},[21,85361,85362],{},[1823,85363],{"alt":30,"src":85364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[25,85366,85368],{"className":53393,"code":85367,"language":53395,"meta":30,"style":30},"\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",[32,85369,85370,85378,85386,85391,85396,85401,85406,85410,85415,85420,85425,85429,85434,85438,85442,85447,85451,85459],{"__ignoreMap":30},[35,85371,85372,85374,85376],{"class":37,"line":38},[35,85373,1404],{"class":359},[35,85375,52126],{"class":51626},[35,85377,51633],{"class":359},[35,85379,85380,85382,85384],{"class":37,"line":45},[35,85381,52470],{"class":359},[35,85383,52139],{"class":51626},[35,85385,51633],{"class":359},[35,85387,85388],{"class":37,"line":55},[35,85389,85390],{"class":359},"    let that\n",[35,85392,85393],{"class":37,"line":65},[35,85394,85395],{"class":359},"    function Star(uname) {\n",[35,85397,85398],{"class":37,"line":74},[35,85399,85400],{"class":359},"      this.uname = uname\n",[35,85402,85403],{"class":37,"line":83},[35,85404,85405],{"class":359},"      that = this\n",[35,85407,85408],{"class":37,"line":92},[35,85409,2528],{"class":359},[35,85411,85412],{"class":37,"line":101},[35,85413,85414],{"class":359},"    \u002F\u002F 实例对象是 ldh\n",[35,85416,85417],{"class":37,"line":110},[35,85418,85419],{"class":359},"    const ldh = new Star('刘德华')\n",[35,85421,85422],{"class":37,"line":119},[35,85423,85424],{"class":359},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[35,85426,85427],{"class":37,"line":128},[35,85428,141],{"emptyLinePlaceholder":140},[35,85430,85431],{"class":37,"line":137},[35,85432,85433],{"class":359},"    Star.sing = function () {\n",[35,85435,85436],{"class":37,"line":144},[35,85437,85310],{"class":359},[35,85439,85440],{"class":37,"line":150},[35,85441,2528],{"class":359},[35,85443,85444],{"class":37,"line":159},[35,85445,85446],{"class":359},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[35,85448,85449],{"class":37,"line":168},[35,85450,141],{"emptyLinePlaceholder":140},[35,85452,85453,85455,85457],{"class":37,"line":177},[35,85454,52743],{"class":359},[35,85456,52139],{"class":51626},[35,85458,51633],{"class":359},[35,85460,85461,85463,85465],{"class":37,"line":182},[35,85462,52111],{"class":359},[35,85464,52126],{"class":51626},[35,85466,51633],{"class":359},[21,85468,85469],{},"构造函数的this指向的是实例对象；",[21,85471,85472],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[465,85474,85476],{"id":85475},"_4132-数组扩展方法","4.13.2 数组扩展方法",[21,85478,85479],{},[1823,85480],{"alt":30,"src":85481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[25,85483,85485],{"className":53393,"code":85484,"language":53395,"meta":30,"style":30},"\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",[32,85486,85487,85495,85503,85508,85513,85518,85523,85528,85533,85538,85543,85548,85553,85557,85562,85567,85572,85577,85581,85586,85591,85596,85601,85605,85610,85615,85620,85625,85629,85634,85638,85646],{"__ignoreMap":30},[35,85488,85489,85491,85493],{"class":37,"line":38},[35,85490,1404],{"class":359},[35,85492,52126],{"class":51626},[35,85494,51633],{"class":359},[35,85496,85497,85499,85501],{"class":37,"line":45},[35,85498,52470],{"class":359},[35,85500,52139],{"class":51626},[35,85502,51633],{"class":359},[35,85504,85505],{"class":37,"line":55},[35,85506,85507],{"class":359},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[35,85509,85510],{"class":37,"line":65},[35,85511,85512],{"class":359},"    const arr = [1, 2, 3]\n",[35,85514,85515],{"class":37,"line":74},[35,85516,85517],{"class":359},"    \u002F\u002F 自己定义数组的扩展方法\n",[35,85519,85520],{"class":37,"line":83},[35,85521,85522],{"class":359},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[35,85524,85525],{"class":37,"line":92},[35,85526,85527],{"class":359},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[35,85529,85530],{"class":37,"line":101},[35,85531,85532],{"class":359},"    \u002F\u002F ①.最大值\n",[35,85534,85535],{"class":37,"line":110},[35,85536,85537],{"class":359},"    Array.prototype.max = function () {\n",[35,85539,85540],{"class":37,"line":119},[35,85541,85542],{"class":359},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[35,85544,85545],{"class":37,"line":128},[35,85546,85547],{"class":359},"      return Math.max(...this)\n",[35,85549,85550],{"class":37,"line":137},[35,85551,85552],{"class":359},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[35,85554,85555],{"class":37,"line":144},[35,85556,2528],{"class":359},[35,85558,85559],{"class":37,"line":150},[35,85560,85561],{"class":359},"    console.log(arr.max())\n",[35,85563,85564],{"class":37,"line":159},[35,85565,85566],{"class":359},"    \u002F\u002F ②最小值\n",[35,85568,85569],{"class":37,"line":168},[35,85570,85571],{"class":359},"    Array.prototype.min = function () {\n",[35,85573,85574],{"class":37,"line":177},[35,85575,85576],{"class":359},"      return Math.min(...this)\n",[35,85578,85579],{"class":37,"line":182},[35,85580,2528],{"class":359},[35,85582,85583],{"class":37,"line":188},[35,85584,85585],{"class":359},"    console.log(arr.min())\n",[35,85587,85588],{"class":37,"line":197},[35,85589,85590],{"class":359},"    \u002F\u002F③求和\n",[35,85592,85593],{"class":37,"line":206},[35,85594,85595],{"class":359},"    Array.prototype.sum = function () {\n",[35,85597,85598],{"class":37,"line":215},[35,85599,85600],{"class":359},"      return this.reduce((prev, current) => prev + current, 0)\n",[35,85602,85603],{"class":37,"line":224},[35,85604,2528],{"class":359},[35,85606,85607],{"class":37,"line":233},[35,85608,85609],{"class":359},"    console.log(arr.sum())\n",[35,85611,85612],{"class":37,"line":238},[35,85613,85614],{"class":359},"    \u002F\u002F ③排序\n",[35,85616,85617],{"class":37,"line":244},[35,85618,85619],{"class":359},"    Array.prototype.rever = function () {\n",[35,85621,85622],{"class":37,"line":253},[35,85623,85624],{"class":359},"      return this.reverse()\n",[35,85626,85627],{"class":37,"line":262},[35,85628,2528],{"class":359},[35,85630,85631],{"class":37,"line":271},[35,85632,85633],{"class":359},"    console.log(arr.rever())\n",[35,85635,85636],{"class":37,"line":280},[35,85637,141],{"emptyLinePlaceholder":140},[35,85639,85640,85642,85644],{"class":37,"line":289},[35,85641,52743],{"class":359},[35,85643,52139],{"class":51626},[35,85645,51633],{"class":359},[35,85647,85648,85650,85652],{"class":37,"line":294},[35,85649,52111],{"class":359},[35,85651,52126],{"class":51626},[35,85653,51633],{"class":359},[21,85655,85656],{},[1823,85657],{"alt":30,"src":85658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[465,85660,85662],{"id":85661},"_4133-constructor-属性","4.13.3 constructor 属性",[21,85664,85665],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[21,85667,85668],{},[1823,85669],{"alt":30,"src":85670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[25,85672,85674],{"className":53393,"code":85673,"language":53395,"meta":30,"style":30},"\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",[32,85675,85676,85684,85692,85697,85702,85706,85711,85716,85721,85729],{"__ignoreMap":30},[35,85677,85678,85680,85682],{"class":37,"line":38},[35,85679,1404],{"class":359},[35,85681,52126],{"class":51626},[35,85683,51633],{"class":359},[35,85685,85686,85688,85690],{"class":37,"line":45},[35,85687,52470],{"class":359},[35,85689,52139],{"class":51626},[35,85691,51633],{"class":359},[35,85693,85694],{"class":37,"line":55},[35,85695,85696],{"class":359},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[35,85698,85699],{"class":37,"line":65},[35,85700,85701],{"class":359},"    function Star() {\n",[35,85703,85704],{"class":37,"line":74},[35,85705,2528],{"class":359},[35,85707,85708],{"class":37,"line":83},[35,85709,85710],{"class":359},"    const ldh = new Star()\n",[35,85712,85713],{"class":37,"line":92},[35,85714,85715],{"class":359},"    console.log(Star.prototype)\n",[35,85717,85718],{"class":37,"line":101},[35,85719,85720],{"class":359},"    console.log(Star.prototype.constructor === Star)\n",[35,85722,85723,85725,85727],{"class":37,"line":110},[35,85724,52743],{"class":359},[35,85726,52139],{"class":51626},[35,85728,51633],{"class":359},[35,85730,85731,85733,85735],{"class":37,"line":119},[35,85732,52111],{"class":359},[35,85734,52126],{"class":51626},[35,85736,51633],{"class":359},[21,85738,85739],{},[1823,85740],{"alt":30,"src":85741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[21,85743,85744],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[25,85746,85748],{"className":53393,"code":85747,"language":53395,"meta":30,"style":30},"  \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",[32,85749,85750,85758,85762,85766,85770,85775,85780,85785,85789,85794,85799,85804,85809,85814,85819,85823,85827,85832,85837,85842,85846,85851,85856,85860,85864,85868],{"__ignoreMap":30},[35,85751,85752,85754,85756],{"class":37,"line":38},[35,85753,52470],{"class":359},[35,85755,52139],{"class":51626},[35,85757,51633],{"class":359},[35,85759,85760],{"class":37,"line":45},[35,85761,85696],{"class":359},[35,85763,85764],{"class":37,"line":55},[35,85765,85701],{"class":359},[35,85767,85768],{"class":37,"line":65},[35,85769,2528],{"class":359},[35,85771,85772],{"class":37,"line":74},[35,85773,85774],{"class":359},"    \u002F\u002F const ldh = new Star()\n",[35,85776,85777],{"class":37,"line":83},[35,85778,85779],{"class":359},"    \u002F\u002F console.log(Star.prototype)\n",[35,85781,85782],{"class":37,"line":92},[35,85783,85784],{"class":359},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[35,85786,85787],{"class":37,"line":101},[35,85788,141],{"emptyLinePlaceholder":140},[35,85790,85791],{"class":37,"line":110},[35,85792,85793],{"class":359},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[35,85795,85796],{"class":37,"line":119},[35,85797,85798],{"class":359},"    \u002F\u002F Star.prototype.sing = function () {\n",[35,85800,85801],{"class":37,"line":128},[35,85802,85803],{"class":359},"    \u002F\u002F   console.log('唱歌')\n",[35,85805,85806],{"class":37,"line":137},[35,85807,85808],{"class":359},"    \u002F\u002F }\n",[35,85810,85811],{"class":37,"line":144},[35,85812,85813],{"class":359},"    \u002F\u002F Star.prototype.dance = function () {\n",[35,85815,85816],{"class":37,"line":150},[35,85817,85818],{"class":359},"    \u002F\u002F   console.log('跳舞')\n",[35,85820,85821],{"class":37,"line":159},[35,85822,85808],{"class":359},[35,85824,85825],{"class":37,"line":168},[35,85826,85715],{"class":359},[35,85828,85829],{"class":37,"line":177},[35,85830,85831],{"class":359},"    Star.prototype = {\n",[35,85833,85834],{"class":37,"line":182},[35,85835,85836],{"class":359},"      sing: function () {\n",[35,85838,85839],{"class":37,"line":188},[35,85840,85841],{"class":359},"        console.log('唱歌')\n",[35,85843,85844],{"class":37,"line":197},[35,85845,78217],{"class":359},[35,85847,85848],{"class":37,"line":206},[35,85849,85850],{"class":359},"      dance: function () {\n",[35,85852,85853],{"class":37,"line":215},[35,85854,85855],{"class":359},"        console.log('跳舞')\n",[35,85857,85858],{"class":37,"line":224},[35,85859,52724],{"class":359},[35,85861,85862],{"class":37,"line":233},[35,85863,2528],{"class":359},[35,85865,85866],{"class":37,"line":238},[35,85867,85715],{"class":359},[35,85869,85870,85872,85874],{"class":37,"line":244},[35,85871,52743],{"class":359},[35,85873,52139],{"class":51626},[35,85875,51633],{"class":359},[21,85877,85878],{},"进行输出结果后会发现：",[21,85880,85881],{},[1823,85882],{"alt":30,"src":85883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[21,85885,85886],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[21,85888,85889],{},"所以，要重新指回创造这个原型对象的构造函数",[25,85891,85893],{"className":71538,"code":85892,"language":71540,"meta":30,"style":30},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[32,85894,85895,85909,85914,85919,85930,85943,85948,85959,85973,85977],{"__ignoreMap":30},[35,85896,85897,85900,85902,85905,85907],{"class":37,"line":38},[35,85898,85899],{"class":58},"Star",[35,85901,1052],{"class":359},[35,85903,85904],{"class":58},"prototype",[35,85906,13898],{"class":495},[35,85908,15906],{"class":359},[35,85910,85911],{"class":37,"line":45},[35,85912,85913],{"class":41},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[35,85915,85916],{"class":37,"line":55},[35,85917,85918],{"class":359},"  constructor: Star,\n",[35,85920,85921,85924,85926,85928],{"class":37,"line":65},[35,85922,85923],{"class":48},"  sing",[35,85925,51763],{"class":359},[35,85927,54775],{"class":495},[35,85929,54778],{"class":359},[35,85931,85932,85934,85936,85938,85941],{"class":37,"line":74},[35,85933,74078],{"class":359},[35,85935,58573],{"class":48},[35,85937,499],{"class":359},[35,85939,85940],{"class":306},"'唱歌'",[35,85942,505],{"class":359},[35,85944,85945],{"class":37,"line":83},[35,85946,85947],{"class":359},"   },\n",[35,85949,85950,85953,85955,85957],{"class":37,"line":92},[35,85951,85952],{"class":48},"   dance",[35,85954,51763],{"class":359},[35,85956,54775],{"class":495},[35,85958,54778],{"class":359},[35,85960,85961,85964,85966,85968,85971],{"class":37,"line":101},[35,85962,85963],{"class":359},"     console.",[35,85965,58573],{"class":48},[35,85967,499],{"class":359},[35,85969,85970],{"class":306},"'跳舞'",[35,85972,505],{"class":359},[35,85974,85975],{"class":37,"line":110},[35,85976,4643],{"class":359},[35,85978,85979],{"class":37,"line":119},[35,85980,1926],{"class":359},[21,85982,85983],{},[1823,85984],{"alt":30,"src":85985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[21,85987,85988],{},"总结1：",[21,85990,85991],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[21,85993,85994],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[21,85996,85997],{},"constructor指的是他的来源",[21,85999,86000],{},[1823,86001],{"alt":30,"src":86002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[21,86004,86005],{},[1823,86006],{"alt":30,"src":86007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[21,86009,86010],{},"总结2：",[21,86012,86013],{},[1823,86014],{"alt":30,"src":86015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[21,86017,86018],{},[1823,86019],{"alt":30,"src":86020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[21,86022,86023],{},[1823,86024],{"alt":30,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[465,86027,86029],{"id":86028},"_4134-对象原型","4.13.4 对象原型",[21,86031,86032],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[21,86034,86035],{},"对象原型就是__proto__这个属性",[21,86037,86038],{},[1823,86039],{"alt":30,"src":86040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[21,86042,86043],{},[1823,86044],{"alt":30,"src":86045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[21,86047,86048],{},[1823,86049],{"alt":30,"src":86050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[21,86052,86053],{},[1823,86054],{"alt":30,"src":86055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[25,86057,86059],{"className":53393,"code":86058,"language":53395,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,86060,86061,86069,86077,86081,86085,86089,86094,86102],{"__ignoreMap":30},[35,86062,86063,86065,86067],{"class":37,"line":38},[35,86064,1404],{"class":359},[35,86066,52126],{"class":51626},[35,86068,51633],{"class":359},[35,86070,86071,86073,86075],{"class":37,"line":45},[35,86072,52470],{"class":359},[35,86074,52139],{"class":51626},[35,86076,51633],{"class":359},[35,86078,86079],{"class":37,"line":55},[35,86080,85701],{"class":359},[35,86082,86083],{"class":37,"line":65},[35,86084,2528],{"class":359},[35,86086,86087],{"class":37,"line":74},[35,86088,85710],{"class":359},[35,86090,86091],{"class":37,"line":83},[35,86092,86093],{"class":359},"    console.log(ldh)\n",[35,86095,86096,86098,86100],{"class":37,"line":92},[35,86097,52743],{"class":359},[35,86099,52139],{"class":51626},[35,86101,51633],{"class":359},[35,86103,86104,86106,86108],{"class":37,"line":101},[35,86105,52111],{"class":359},[35,86107,52126],{"class":51626},[35,86109,51633],{"class":359},[21,86111,86112],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[21,86114,86115],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[21,86117,86118],{},[1823,86119],{"alt":30,"src":86120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[21,86122,86123],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[21,86125,86126],{},"对象原型指向原型对象",[21,86128,86129],{},[1823,86130],{"alt":30,"src":86131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[21,86133,86134],{},[1823,86135],{"alt":30,"src":86136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[21,86138,86139],{},[1823,86140],{"alt":30,"src":86141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[465,86143,86145],{"id":86144},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[21,86147,86148],{},[1823,86149],{"alt":30,"src":86150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[14,86152,86153,86156,86159,86162],{},[17,86154,86155],{},"构造函数通过new的形式实例化得到实例对象",[17,86157,86158],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[17,86160,86161],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[17,86163,86164],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[21,86166,86167],{},[1823,86168],{"alt":30,"src":86169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[21,86171,86172],{},"题目梳理：",[21,86174,86175],{},[1823,86176],{"alt":30,"src":86177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[465,86179,86181],{"id":86180},"_4136-原型继承","4.13.6 原型继承",[21,86183,86184],{},[1823,86185],{"alt":30,"src":86186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[21,86188,86189],{},[1823,86190],{"alt":30,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[21,86193,86194],{},[1823,86195],{"alt":30,"src":86196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[21,86198,86199],{},[1823,86200],{"alt":30,"src":86201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[21,86203,86204],{},[1823,86205],{"alt":30,"src":86206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[21,86208,86209],{},[1823,86210],{"alt":30,"src":86211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[21,86213,86214],{},[1823,86215],{"alt":30,"src":86216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[21,86218,86219],{},[1823,86220],{"alt":30,"src":86221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[21,86223,86224],{},"回顾：构造函数每次new得到对象都是不同的",[465,86226,86228],{"id":86227},"_4137-原型链","4.13.7 原型链",[21,86230,86231],{},[1823,86232],{"alt":30,"src":86233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[21,86235,86236],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[21,86238,86239],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[21,86241,86242],{},"大哥是Object",[21,86244,86245],{},[1823,86246],{"alt":30,"src":86247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[21,86249,86250],{},[1823,86251],{"alt":30,"src":86252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[21,86254,86255],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[21,86257,86258],{},"万物皆对象",[465,86260,86262],{"id":86261},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[21,86264,86265],{},"模态框",[21,86267,86268],{},"以后遇见这个效果直接使用这个就行",[21,86270,86271],{},[1823,86272],{"alt":30,"src":86273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[21,86275,86276],{},[1823,86277],{"alt":30,"src":86278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[21,86280,86281],{},[1823,86282],{"alt":30,"src":86283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[21,86285,86286],{},[1823,86287],{"alt":30,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[21,86290,86291],{},"补充知识点：",[14,86293,86294],{},[17,86295,86296],{},"append()",[21,86298,86299],{},[1823,86300],{"alt":30,"src":86301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[25,86303,86305],{"className":50959,"code":86304,"language":50961,"meta":30,"style":30},"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",[32,86306,86307,86312,86317,86322,86326,86330,86334,86339,86344,86349,86353],{"__ignoreMap":30},[35,86308,86309],{"class":37,"line":38},[35,86310,86311],{"class":359},"append(param1)\n",[35,86313,86314],{"class":37,"line":45},[35,86315,86316],{"class":359},"append(param1, param2)\n",[35,86318,86319],{"class":37,"line":55},[35,86320,86321],{"class":359},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[35,86323,86324],{"class":37,"line":65},[35,86325,141],{"emptyLinePlaceholder":140},[35,86327,86328],{"class":37,"line":74},[35,86329,141],{"emptyLinePlaceholder":140},[35,86331,86332],{"class":37,"line":83},[35,86333,141],{"emptyLinePlaceholder":140},[35,86335,86336],{"class":37,"line":92},[35,86337,86338],{"class":359},"let div = document.createElement(\"div\");\n",[35,86340,86341],{"class":37,"line":101},[35,86342,86343],{"class":359},"let p = document.createElement(\"p\");\n",[35,86345,86346],{"class":37,"line":110},[35,86347,86348],{"class":359},"div.append(p);\n",[35,86350,86351],{"class":37,"line":119},[35,86352,141],{"emptyLinePlaceholder":140},[35,86354,86355,86358,86360],{"class":37,"line":128},[35,86356,86357],{"class":359},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[35,86359,21],{"class":51626},[35,86361,86362],{"class":359},"> ]\n",[14,86364,86365],{"start":45},[17,86366,86367],{},"remove()",[21,86369,86370],{},"自己删自己",[21,86372,86373],{},[1823,86374],{"alt":30,"src":86375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[25,86377,86379],{"className":50959,"code":86378,"language":50961,"meta":30,"style":30},"\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",[32,86380,86381,86391,86405,86409,86417,86431,86451,86463,86471,86478,86490,86503,86538,86550,86561,86573,86585,86597,86624,86634,86638,86642,86651,86663,86677,86687,86699,86703,86707,86717,86728,86738,86748,86761,86774,86784,86788,86792,86801,86811,86823,86827,86831,86840,86850,86860,86872,86876,86880,86890,86906,86917,86927,86937,86949,86961,86973,86977,86981,86994,87005,87009,87017,87025,87029,87037,87057,87077,87085,87090,87116,87121,87126,87145,87150,87162,87167,87178,87188,87198,87203,87208,87212,87217,87222,87227,87247,87252,87272,87277,87291,87296,87301,87306,87322,87326,87331,87360,87365,87370,87375,87386,87390,87394,87398,87403,87428,87433,87458,87463,87472,87476,87481,87506,87510,87535,87539,87548,87552,87557,87575,87585,87589,87597,87605,87609],{"__ignoreMap":30},[35,86382,86383,86385,86387,86389],{"class":37,"line":38},[35,86384,51623],{"class":359},[35,86386,51627],{"class":51626},[35,86388,51630],{"class":48},[35,86390,51633],{"class":359},[35,86392,86393,86395,86397,86399,86401,86403],{"class":37,"line":45},[35,86394,1404],{"class":359},[35,86396,50961],{"class":51626},[35,86398,51642],{"class":48},[35,86400,544],{"class":359},[35,86402,51647],{"class":306},[35,86404,51633],{"class":359},[35,86406,86407],{"class":37,"line":55},[35,86408,141],{"emptyLinePlaceholder":140},[35,86410,86411,86413,86415],{"class":37,"line":65},[35,86412,1404],{"class":359},[35,86414,51660],{"class":51626},[35,86416,51633],{"class":359},[35,86418,86419,86421,86423,86425,86427,86429],{"class":37,"line":74},[35,86420,52470],{"class":359},[35,86422,51670],{"class":51626},[35,86424,51673],{"class":48},[35,86426,544],{"class":359},[35,86428,51678],{"class":306},[35,86430,51633],{"class":359},[35,86432,86433,86435,86437,86439,86441,86443,86445,86447,86449],{"class":37,"line":83},[35,86434,52470],{"class":359},[35,86436,51670],{"class":51626},[35,86438,15254],{"class":48},[35,86440,544],{"class":359},[35,86442,51717],{"class":306},[35,86444,51697],{"class":48},[35,86446,544],{"class":359},[35,86448,51724],{"class":306},[35,86450,51633],{"class":359},[35,86452,86453,86455,86457,86459,86461],{"class":37,"line":92},[35,86454,52470],{"class":359},[35,86456,51733],{"class":51626},[35,86458,51736],{"class":359},[35,86460,51733],{"class":51626},[35,86462,51633],{"class":359},[35,86464,86465,86467,86469],{"class":37,"line":101},[35,86466,52470],{"class":359},[35,86468,416],{"class":51626},[35,86470,51633],{"class":359},[35,86472,86473,86476],{"class":37,"line":110},[35,86474,86475],{"class":48},"    .modal",[35,86477,15906],{"class":359},[35,86479,86480,86482,86484,86486,86488],{"class":37,"line":119},[35,86481,55097],{"class":58},[35,86483,51763],{"class":359},[35,86485,4307],{"class":58},[35,86487,51818],{"class":495},[35,86489,1655],{"class":359},[35,86491,86492,86495,86497,86499,86501],{"class":37,"line":128},[35,86493,86494],{"class":58},"      min-height",[35,86496,51763],{"class":359},[35,86498,807],{"class":58},[35,86500,51818],{"class":495},[35,86502,1655],{"class":359},[35,86504,86505,86507,86509,86511,86513,86515,86517,86519,86521,86523,86525,86527,86529,86531,86533,86536],{"class":37,"line":137},[35,86506,79075],{"class":58},[35,86508,51763],{"class":359},[35,86510,687],{"class":58},[35,86512,4427],{"class":58},[35,86514,2379],{"class":58},[35,86516,51818],{"class":495},[35,86518,79092],{"class":58},[35,86520,499],{"class":359},[35,86522,687],{"class":58},[35,86524,12769],{"class":359},[35,86526,687],{"class":58},[35,86528,12769],{"class":359},[35,86530,687],{"class":58},[35,86532,12769],{"class":359},[35,86534,86535],{"class":58},"0.1",[35,86537,3053],{"class":359},[35,86539,86540,86542,86544,86546,86548],{"class":37,"line":144},[35,86541,55460],{"class":58},[35,86543,51763],{"class":359},[35,86545,789],{"class":58},[35,86547,51818],{"class":495},[35,86549,1655],{"class":359},[35,86551,86552,86554,86556,86559],{"class":37,"line":150},[35,86553,55085],{"class":58},[35,86555,51763],{"class":359},[35,86557,86558],{"class":58},"fixed",[35,86560,1655],{"class":359},[35,86562,86563,86566,86568,86571],{"class":37,"line":159},[35,86564,86565],{"class":58},"      z-index",[35,86567,51763],{"class":359},[35,86569,86570],{"class":58},"999",[35,86572,1655],{"class":359},[35,86574,86575,86577,86579,86581,86583],{"class":37,"line":168},[35,86576,55164],{"class":58},[35,86578,51763],{"class":359},[35,86580,1150],{"class":58},[35,86582,823],{"class":495},[35,86584,1655],{"class":359},[35,86586,86587,86589,86591,86593,86595],{"class":37,"line":177},[35,86588,55273],{"class":58},[35,86590,51763],{"class":359},[35,86592,1150],{"class":58},[35,86594,823],{"class":495},[35,86596,1655],{"class":359},[35,86598,86599,86601,86603,86605,86607,86610,86612,86614,86616,86618,86620,86622],{"class":37,"line":182},[35,86600,79116],{"class":58},[35,86602,51763],{"class":359},[35,86604,79121],{"class":58},[35,86606,499],{"class":359},[35,86608,86609],{"class":58},"-50",[35,86611,823],{"class":495},[35,86613,12769],{"class":359},[35,86615,86609],{"class":58},[35,86617,823],{"class":495},[35,86619,12769],{"class":359},[35,86621,687],{"class":58},[35,86623,3053],{"class":359},[35,86625,86626,86628,86630,86632],{"class":37,"line":188},[35,86627,55210],{"class":58},[35,86629,51763],{"class":359},[35,86631,61168],{"class":58},[35,86633,1655],{"class":359},[35,86635,86636],{"class":37,"line":197},[35,86637,2528],{"class":359},[35,86639,86640],{"class":37,"line":206},[35,86641,141],{"emptyLinePlaceholder":140},[35,86643,86644,86646,86649],{"class":37,"line":215},[35,86645,86475],{"class":48},[35,86647,86648],{"class":48}," .header",[35,86650,15906],{"class":359},[35,86652,86653,86655,86657,86659,86661],{"class":37,"line":224},[35,86654,57685],{"class":58},[35,86656,51763],{"class":359},[35,86658,895],{"class":58},[35,86660,51818],{"class":495},[35,86662,1655],{"class":359},[35,86664,86665,86667,86669,86671,86673,86675],{"class":37,"line":233},[35,86666,55021],{"class":58},[35,86668,51763],{"class":359},[35,86670,687],{"class":58},[35,86672,2379],{"class":58},[35,86674,51818],{"class":495},[35,86676,1655],{"class":359},[35,86678,86679,86681,86683,86685],{"class":37,"line":238},[35,86680,55085],{"class":58},[35,86682,51763],{"class":359},[35,86684,55090],{"class":58},[35,86686,1655],{"class":359},[35,86688,86689,86691,86693,86695,86697],{"class":37,"line":244},[35,86690,55248],{"class":58},[35,86692,51763],{"class":359},[35,86694,1194],{"class":58},[35,86696,51818],{"class":495},[35,86698,1655],{"class":359},[35,86700,86701],{"class":37,"line":253},[35,86702,2528],{"class":359},[35,86704,86705],{"class":37,"line":262},[35,86706,141],{"emptyLinePlaceholder":140},[35,86708,86709,86711,86713,86715],{"class":37,"line":271},[35,86710,86475],{"class":48},[35,86712,86648],{"class":48},[35,86714,3366],{"class":51626},[35,86716,15906],{"class":359},[35,86718,86719,86722,86724,86726],{"class":37,"line":280},[35,86720,86721],{"class":58},"      font-style",[35,86723,51763],{"class":359},[35,86725,64167],{"class":58},[35,86727,1655],{"class":359},[35,86729,86730,86732,86734,86736],{"class":37,"line":289},[35,86731,57742],{"class":58},[35,86733,51763],{"class":359},[35,86735,62396],{"class":58},[35,86737,1655],{"class":359},[35,86739,86740,86742,86744,86746],{"class":37,"line":294},[35,86741,55085],{"class":58},[35,86743,51763],{"class":359},[35,86745,55157],{"class":58},[35,86747,1655],{"class":359},[35,86749,86750,86753,86755,86757,86759],{"class":37,"line":300},[35,86751,86752],{"class":58},"      right",[35,86754,51763],{"class":359},[35,86756,1069],{"class":58},[35,86758,51818],{"class":495},[35,86760,1655],{"class":359},[35,86762,86763,86765,86767,86770,86772],{"class":37,"line":313},[35,86764,55273],{"class":58},[35,86766,51763],{"class":359},[35,86768,86769],{"class":58},"-2",[35,86771,51818],{"class":495},[35,86773,1655],{"class":359},[35,86775,86776,86778,86780,86782],{"class":37,"line":324},[35,86777,62351],{"class":58},[35,86779,51763],{"class":359},[35,86781,62356],{"class":58},[35,86783,1655],{"class":359},[35,86785,86786],{"class":37,"line":2955},[35,86787,2528],{"class":359},[35,86789,86790],{"class":37,"line":8282},[35,86791,141],{"emptyLinePlaceholder":140},[35,86793,86794,86796,86799],{"class":37,"line":8306},[35,86795,86475],{"class":48},[35,86797,86798],{"class":48}," .body",[35,86800,15906],{"class":359},[35,86802,86803,86805,86807,86809],{"class":37,"line":8311},[35,86804,57612],{"class":58},[35,86806,51763],{"class":359},[35,86808,51918],{"class":58},[35,86810,1655],{"class":359},[35,86812,86813,86815,86817,86819,86821],{"class":37,"line":8317},[35,86814,55021],{"class":58},[35,86816,51763],{"class":359},[35,86818,940],{"class":58},[35,86820,51818],{"class":495},[35,86822,1655],{"class":359},[35,86824,86825],{"class":37,"line":8344},[35,86826,2528],{"class":359},[35,86828,86829],{"class":37,"line":8349},[35,86830,141],{"emptyLinePlaceholder":140},[35,86832,86833,86835,86838],{"class":37,"line":8355},[35,86834,86475],{"class":48},[35,86836,86837],{"class":48}," .footer",[35,86839,15906],{"class":359},[35,86841,86842,86844,86846,86848],{"class":37,"line":8367},[35,86843,55335],{"class":58},[35,86845,51763],{"class":359},[35,86847,51803],{"class":58},[35,86849,1655],{"class":359},[35,86851,86852,86854,86856,86858],{"class":37,"line":8379},[35,86853,55346],{"class":58},[35,86855,51763],{"class":359},[35,86857,51906],{"class":58},[35,86859,1655],{"class":359},[35,86861,86862,86864,86866,86868,86870],{"class":37,"line":8391},[35,86863,55021],{"class":58},[35,86865,51763],{"class":359},[35,86867,940],{"class":58},[35,86869,51818],{"class":495},[35,86871,1655],{"class":359},[35,86873,86874],{"class":37,"line":10050},[35,86875,2528],{"class":359},[35,86877,86878],{"class":37,"line":10075},[35,86879,141],{"emptyLinePlaceholder":140},[35,86881,86882,86884,86886,86888],{"class":37,"line":10098},[35,86883,86475],{"class":48},[35,86885,86837],{"class":48},[35,86887,1759],{"class":51626},[35,86889,15906],{"class":359},[35,86891,86892,86894,86896,86898,86900,86902,86904],{"class":37,"line":10122},[35,86893,55021],{"class":58},[35,86895,51763],{"class":359},[35,86897,568],{"class":58},[35,86899,51818],{"class":495},[35,86901,2424],{"class":58},[35,86903,51818],{"class":495},[35,86905,1655],{"class":359},[35,86907,86908,86910,86912,86915],{"class":37,"line":10127},[35,86909,62047],{"class":58},[35,86911,51763],{"class":359},[35,86913,86914],{"class":58},"#ccc",[35,86916,1655],{"class":359},[35,86918,86919,86921,86923,86925],{"class":37,"line":10132},[35,86920,64296],{"class":58},[35,86922,51763],{"class":359},[35,86924,55063],{"class":58},[35,86926,1655],{"class":359},[35,86928,86929,86931,86933,86935],{"class":37,"line":10137},[35,86930,57742],{"class":58},[35,86932,51763],{"class":359},[35,86934,61168],{"class":58},[35,86936,1655],{"class":359},[35,86938,86939,86941,86943,86945,86947],{"class":37,"line":10146},[35,86940,55460],{"class":58},[35,86942,51763],{"class":359},[35,86944,574],{"class":58},[35,86946,51818],{"class":495},[35,86948,1655],{"class":359},[35,86950,86951,86953,86955,86957,86959],{"class":37,"line":10151},[35,86952,62076],{"class":58},[35,86954,51763],{"class":359},[35,86956,940],{"class":58},[35,86958,51818],{"class":495},[35,86960,1655],{"class":359},[35,86962,86963,86965,86967,86969,86971],{"class":37,"line":10157},[35,86964,55248],{"class":58},[35,86966,51763],{"class":359},[35,86968,1043],{"class":58},[35,86970,51818],{"class":495},[35,86972,1655],{"class":359},[35,86974,86975],{"class":37,"line":10178},[35,86976,2528],{"class":359},[35,86978,86979],{"class":37,"line":10184},[35,86980,141],{"emptyLinePlaceholder":140},[35,86982,86983,86985,86987,86989,86992],{"class":37,"line":10198},[35,86984,86475],{"class":48},[35,86986,86837],{"class":48},[35,86988,1759],{"class":51626},[35,86990,86991],{"class":48},".submit",[35,86993,15906],{"class":359},[35,86995,86996,86998,87000,87003],{"class":37,"line":10204},[35,86997,55210],{"class":58},[35,86999,51763],{"class":359},[35,87001,87002],{"class":58},"#369",[35,87004,1655],{"class":359},[35,87006,87007],{"class":37,"line":10231},[35,87008,2528],{"class":359},[35,87010,87011,87013,87015],{"class":37,"line":10240},[35,87012,52743],{"class":359},[35,87014,416],{"class":51626},[35,87016,51633],{"class":359},[35,87018,87019,87021,87023],{"class":37,"line":10246},[35,87020,52111],{"class":359},[35,87022,51660],{"class":51626},[35,87024,51633],{"class":359},[35,87026,87027],{"class":37,"line":10254},[35,87028,141],{"emptyLinePlaceholder":140},[35,87030,87031,87033,87035],{"class":37,"line":10259},[35,87032,1404],{"class":359},[35,87034,52126],{"class":51626},[35,87036,51633],{"class":359},[35,87038,87039,87041,87043,87045,87047,87050,87053,87055],{"class":37,"line":16938},[35,87040,52470],{"class":359},[35,87042,54213],{"class":51626},[35,87044,15293],{"class":48},[35,87046,544],{"class":359},[35,87048,87049],{"class":306},"\"delete\"",[35,87051,87052],{"class":359},">删除\u003C\u002F",[35,87054,54213],{"class":51626},[35,87056,51633],{"class":359},[35,87058,87059,87061,87063,87065,87067,87070,87073,87075],{"class":37,"line":16944},[35,87060,52470],{"class":359},[35,87062,54213],{"class":51626},[35,87064,15293],{"class":48},[35,87066,544],{"class":359},[35,87068,87069],{"class":306},"\"login\"",[35,87071,87072],{"class":359},">登录\u003C\u002F",[35,87074,54213],{"class":51626},[35,87076,51633],{"class":359},[35,87078,87079,87081,87083],{"class":37,"line":16967},[35,87080,52470],{"class":359},[35,87082,52139],{"class":51626},[35,87084,51633],{"class":359},[35,87086,87087],{"class":37,"line":16973},[35,87088,87089],{"class":41},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[35,87091,87092,87094,87097,87099,87101,87103,87105,87107,87110,87112,87114],{"class":37,"line":16996},[35,87093,70410],{"class":495},[35,87095,87096],{"class":48}," Modal",[35,87098,499],{"class":359},[35,87100,51733],{"class":5550},[35,87102,13898],{"class":495},[35,87104,70256],{"class":306},[35,87106,12769],{"class":359},[35,87108,87109],{"class":5550},"message",[35,87111,13898],{"class":495},[35,87113,70256],{"class":306},[35,87115,12776],{"class":359},[35,87117,87118],{"class":37,"line":17010},[35,87119,87120],{"class":41},"      \u002F\u002F 创建Model 模态框盒子\n",[35,87122,87123],{"class":37,"line":17030},[35,87124,87125],{"class":41},"      \u002F\u002F 1.1 创建div标签\n",[35,87127,87128,87130,87133,87135,87137,87139,87141,87143],{"class":37,"line":17036},[35,87129,70377],{"class":58},[35,87131,87132],{"class":359},".modalBox ",[35,87134,544],{"class":495},[35,87136,54722],{"class":359},[35,87138,70477],{"class":48},[35,87140,499],{"class":359},[35,87142,82256],{"class":306},[35,87144,505],{"class":359},[35,87146,87147],{"class":37,"line":17047},[35,87148,87149],{"class":41},"      \u002F\u002F 1.2 给div 添加类名为model\n",[35,87151,87152,87154,87157,87159],{"class":37,"line":17070},[35,87153,70377],{"class":58},[35,87155,87156],{"class":359},".modalBox.className ",[35,87158,544],{"class":495},[35,87160,87161],{"class":306}," 'modal'\n",[35,87163,87164],{"class":37,"line":17092},[35,87165,87166],{"class":41},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[35,87168,87169,87171,87174,87176],{"class":37,"line":17097},[35,87170,70377],{"class":58},[35,87172,87173],{"class":359},".modalBox.innerHTML ",[35,87175,544],{"class":495},[35,87177,70494],{"class":306},[35,87179,87180,87183,87185],{"class":37,"line":17103},[35,87181,87182],{"class":306},"        \u003Cdiv class=\"header\">${",[35,87184,51733],{"class":359},[35,87186,87187],{"class":306},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[35,87189,87190,87193,87195],{"class":37,"line":17117},[35,87191,87192],{"class":306},"        \u003Cdiv class=\"body\">${",[35,87194,87109],{"class":359},[35,87196,87197],{"class":306},"}\u003C\u002Fdiv>\n",[35,87199,87200],{"class":37,"line":17130},[35,87201,87202],{"class":306},"      `\n",[35,87204,87205],{"class":37,"line":17135},[35,87206,87207],{"class":41},"      \u002F\u002F console.log(this.modalBox)\n",[35,87209,87210],{"class":37,"line":17149},[35,87211,2528],{"class":359},[35,87213,87214],{"class":37,"line":17154},[35,87215,87216],{"class":41},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[35,87218,87219],{"class":37,"line":17160},[35,87220,87221],{"class":41},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[35,87223,87224],{"class":37,"line":17165},[35,87225,87226],{"class":41},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[35,87228,87229,87232,87234,87236,87238,87241,87243,87245],{"class":37,"line":17179},[35,87230,87231],{"class":58},"    Modal",[35,87233,1052],{"class":359},[35,87235,85904],{"class":58},[35,87237,1052],{"class":359},[35,87239,87240],{"class":48},"open",[35,87242,13898],{"class":495},[35,87244,59244],{"class":495},[35,87246,54778],{"class":359},[35,87248,87249],{"class":37,"line":17184},[35,87250,87251],{"class":41},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[35,87253,87254,87256,87259,87261,87263,87265,87267,87270],{"class":37,"line":17189},[35,87255,58554],{"class":495},[35,87257,87258],{"class":58}," box",[35,87260,13898],{"class":495},[35,87262,54722],{"class":359},[35,87264,54725],{"class":48},[35,87266,499],{"class":359},[35,87268,87269],{"class":306},"'.modal'",[35,87271,505],{"class":359},[35,87273,87274],{"class":37,"line":17203},[35,87275,87276],{"class":41},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[35,87278,87279,87282,87284,87287,87289],{"class":37,"line":17215},[35,87280,87281],{"class":359},"      box ",[35,87283,2065],{"class":495},[35,87285,87286],{"class":359}," box.",[35,87288,57332],{"class":48},[35,87290,2317],{"class":359},[35,87292,87293],{"class":37,"line":17220},[35,87294,87295],{"class":41},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[35,87297,87298],{"class":37,"line":17233},[35,87299,87300],{"class":41},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[35,87302,87303],{"class":37,"line":17238},[35,87304,87305],{"class":41},"      \u002F\u002F append可以增加对象\n",[35,87307,87308,87311,87314,87316,87319],{"class":37,"line":17243},[35,87309,87310],{"class":359},"      document.body.",[35,87312,87313],{"class":48},"append",[35,87315,499],{"class":359},[35,87317,87318],{"class":58},"this",[35,87320,87321],{"class":359},".modalBox)\n",[35,87323,87324],{"class":37,"line":17248},[35,87325,141],{"emptyLinePlaceholder":140},[35,87327,87328],{"class":37,"line":17261},[35,87329,87330],{"class":41},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[35,87332,87333,87335,87338,87340,87342,87345,87347,87349,87351,87353,87356,87358],{"class":37,"line":17266},[35,87334,70377],{"class":58},[35,87336,87337],{"class":359},".modalBox.",[35,87339,54725],{"class":48},[35,87341,499],{"class":359},[35,87343,87344],{"class":306},"'i'",[35,87346,31152],{"class":359},[35,87348,58139],{"class":48},[35,87350,499],{"class":359},[35,87352,58144],{"class":306},[35,87354,87355],{"class":359},", () ",[35,87357,85047],{"class":495},[35,87359,15906],{"class":359},[35,87361,87362],{"class":37,"line":32959},[35,87363,87364],{"class":41},"        \u002F\u002F 这个地方需要用到箭头函数\n",[35,87366,87367],{"class":37,"line":32965},[35,87368,87369],{"class":41},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[35,87371,87372],{"class":37,"line":32971},[35,87373,87374],{"class":41},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[35,87376,87377,87379,87381,87384],{"class":37,"line":32977},[35,87378,65052],{"class":58},[35,87380,1052],{"class":359},[35,87382,87383],{"class":48},"close",[35,87385,2317],{"class":359},[35,87387,87388],{"class":37,"line":32983},[35,87389,65141],{"class":359},[35,87391,87392],{"class":37,"line":32994},[35,87393,2528],{"class":359},[35,87395,87396],{"class":37,"line":33000},[35,87397,141],{"emptyLinePlaceholder":140},[35,87399,87400],{"class":37,"line":33020},[35,87401,87402],{"class":41},"    \u002F\u002F 测试一下 点击 删除按钮\n",[35,87404,87405,87407,87409,87411,87414,87416,87418,87420,87422,87424,87426],{"class":37,"line":33026},[35,87406,52733],{"class":359},[35,87408,54725],{"class":48},[35,87410,499],{"class":359},[35,87412,87413],{"class":306},"'#delete'",[35,87415,31152],{"class":359},[35,87417,58139],{"class":48},[35,87419,499],{"class":359},[35,87421,58144],{"class":306},[35,87423,87355],{"class":359},[35,87425,85047],{"class":495},[35,87427,15906],{"class":359},[35,87429,87430],{"class":37,"line":33037},[35,87431,87432],{"class":41},"      \u002F\u002F 先调用Model构造函数\n",[35,87434,87435,87437,87440,87442,87444,87446,87448,87451,87453,87456],{"class":37,"line":33043},[35,87436,58554],{"class":495},[35,87438,87439],{"class":58}," del",[35,87441,13898],{"class":495},[35,87443,11912],{"class":495},[35,87445,87096],{"class":48},[35,87447,499],{"class":359},[35,87449,87450],{"class":306},"'温馨的提示'",[35,87452,12769],{"class":359},[35,87454,87455],{"class":306},"'您没有删除权限操作'",[35,87457,505],{"class":359},[35,87459,87460],{"class":37,"line":33049},[35,87461,87462],{"class":41},"      \u002F\u002F 实例对象调用open方法\n",[35,87464,87465,87468,87470],{"class":37,"line":33055},[35,87466,87467],{"class":359},"      del.",[35,87469,87240],{"class":48},[35,87471,2317],{"class":359},[35,87473,87474],{"class":37,"line":33061},[35,87475,33787],{"class":359},[35,87477,87478],{"class":37,"line":33067},[35,87479,87480],{"class":41},"    \u002F\u002F 测试一下 点击 登录按钮\n",[35,87482,87483,87485,87487,87489,87492,87494,87496,87498,87500,87502,87504],{"class":37,"line":33073},[35,87484,52733],{"class":359},[35,87486,54725],{"class":48},[35,87488,499],{"class":359},[35,87490,87491],{"class":306},"'#login'",[35,87493,31152],{"class":359},[35,87495,58139],{"class":48},[35,87497,499],{"class":359},[35,87499,58144],{"class":306},[35,87501,87355],{"class":359},[35,87503,85047],{"class":495},[35,87505,15906],{"class":359},[35,87507,87508],{"class":37,"line":33079},[35,87509,87432],{"class":41},[35,87511,87512,87514,87517,87519,87521,87523,87525,87528,87530,87533],{"class":37,"line":33099},[35,87513,58554],{"class":495},[35,87515,87516],{"class":58}," log",[35,87518,13898],{"class":495},[35,87520,11912],{"class":495},[35,87522,87096],{"class":48},[35,87524,499],{"class":359},[35,87526,87527],{"class":306},"'友情提示'",[35,87529,12769],{"class":359},[35,87531,87532],{"class":306},"'您还没有登录呢'",[35,87534,505],{"class":359},[35,87536,87537],{"class":37,"line":33105},[35,87538,87462],{"class":41},[35,87540,87541,87544,87546],{"class":37,"line":33121},[35,87542,87543],{"class":359},"      log.",[35,87545,87240],{"class":48},[35,87547,2317],{"class":359},[35,87549,87550],{"class":37,"line":33127},[35,87551,33787],{"class":359},[35,87553,87554],{"class":37,"line":33141},[35,87555,87556],{"class":41},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[35,87558,87559,87561,87563,87565,87567,87569,87571,87573],{"class":37,"line":33147},[35,87560,87231],{"class":58},[35,87562,1052],{"class":359},[35,87564,85904],{"class":58},[35,87566,1052],{"class":359},[35,87568,87383],{"class":48},[35,87570,13898],{"class":495},[35,87572,59244],{"class":495},[35,87574,54778],{"class":359},[35,87576,87577,87579,87581,87583],{"class":37,"line":33162},[35,87578,70377],{"class":58},[35,87580,87337],{"class":359},[35,87582,57332],{"class":48},[35,87584,2317],{"class":359},[35,87586,87587],{"class":37,"line":33168},[35,87588,2528],{"class":359},[35,87590,87591,87593,87595],{"class":37,"line":33177},[35,87592,52743],{"class":359},[35,87594,52139],{"class":51626},[35,87596,51633],{"class":359},[35,87598,87599,87601,87603],{"class":37,"line":33183},[35,87600,52111],{"class":359},[35,87602,52126],{"class":51626},[35,87604,51633],{"class":359},[35,87606,87607],{"class":37,"line":33192},[35,87608,141],{"emptyLinePlaceholder":140},[35,87610,87611,87613,87615],{"class":37,"line":33198},[35,87612,52111],{"class":359},[35,87614,50961],{"class":51626},[35,87616,51633],{"class":359},[21,87618,87619],{},[1823,87620],{"alt":30,"src":87621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[438,87623,87625],{"id":87624},"_414-深浅拷贝","4.14 深浅拷贝",[465,87627,87629],{"id":87628},"_4141-浅拷贝","4.14.1 浅拷贝",[21,87631,87632],{},[1823,87633],{"alt":30,"src":87634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[21,87636,87637],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[21,87639,87640],{},[1823,87641],{"alt":30,"src":87642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[21,87644,87645],{},[1823,87646],{"alt":30,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[21,87649,87650],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[21,87652,87653],{},[1823,87654],{"alt":30,"src":87655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[21,87657,11666],{},[21,87659,87660],{},[1823,87661],{"alt":30,"src":87662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[465,87664,87666],{"id":87665},"_4142-深拷贝","4.14.2 深拷贝",[21,87668,87669],{},"深拷贝：拷贝的是对象，不是地址",[21,87671,87672],{},"常用的三种方法：",[14,87674,87675,87678,87681],{},[17,87676,87677],{},"通过递归实现深拷贝",[17,87679,87680],{},"lodash\u002FcloneDeep",[17,87682,87683],{},"通过JSON.stringify()实现",[22332,87685,87687],{"id":87686},"_41421-递归函数","4.14.2.1 递归函数",[21,87689,87690],{},[1823,87691],{"alt":30,"src":87692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[14,87694,87695],{},[17,87696,87697],{},"死递归占溢出：",[25,87699,87701],{"className":53393,"code":87700,"language":53395,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,87702,87703,87711,87719,87723,87728,87732,87737,87745],{"__ignoreMap":30},[35,87704,87705,87707,87709],{"class":37,"line":38},[35,87706,1404],{"class":359},[35,87708,52126],{"class":51626},[35,87710,51633],{"class":359},[35,87712,87713,87715,87717],{"class":37,"line":45},[35,87714,52470],{"class":359},[35,87716,52139],{"class":51626},[35,87718,51633],{"class":359},[35,87720,87721],{"class":37,"line":55},[35,87722,77468],{"class":359},[35,87724,87725],{"class":37,"line":65},[35,87726,87727],{"class":359},"      fn()\n",[35,87729,87730],{"class":37,"line":74},[35,87731,2528],{"class":359},[35,87733,87734],{"class":37,"line":83},[35,87735,87736],{"class":359},"    fn()\n",[35,87738,87739,87741,87743],{"class":37,"line":92},[35,87740,52743],{"class":359},[35,87742,52139],{"class":51626},[35,87744,51633],{"class":359},[35,87746,87747,87749,87751],{"class":37,"line":101},[35,87748,52111],{"class":359},[35,87750,52126],{"class":51626},[35,87752,51633],{"class":359},[14,87754,87755],{"start":45},[17,87756,87757],{},"递归函数要加判断条件：",[21,87759,87760],{},[1823,87761],{"alt":30,"src":87762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[14,87764,87765],{"start":55},[17,87766,87767],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[25,87769,87771],{"className":50959,"code":87770,"language":50961,"meta":30,"style":30},"\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",[32,87772,87773,87783,87797,87801,87809,87823,87843,87855,87863,87867,87875,87887,87895,87903,87928,87940,87944,87951,87959,87967,87971],{"__ignoreMap":30},[35,87774,87775,87777,87779,87781],{"class":37,"line":38},[35,87776,51623],{"class":359},[35,87778,51627],{"class":51626},[35,87780,51630],{"class":48},[35,87782,51633],{"class":359},[35,87784,87785,87787,87789,87791,87793,87795],{"class":37,"line":45},[35,87786,1404],{"class":359},[35,87788,50961],{"class":51626},[35,87790,51642],{"class":48},[35,87792,544],{"class":359},[35,87794,51647],{"class":306},[35,87796,51633],{"class":359},[35,87798,87799],{"class":37,"line":55},[35,87800,141],{"emptyLinePlaceholder":140},[35,87802,87803,87805,87807],{"class":37,"line":65},[35,87804,1404],{"class":359},[35,87806,51660],{"class":51626},[35,87808,51633],{"class":359},[35,87810,87811,87813,87815,87817,87819,87821],{"class":37,"line":74},[35,87812,52470],{"class":359},[35,87814,51670],{"class":51626},[35,87816,51673],{"class":48},[35,87818,544],{"class":359},[35,87820,51678],{"class":306},[35,87822,51633],{"class":359},[35,87824,87825,87827,87829,87831,87833,87835,87837,87839,87841],{"class":37,"line":83},[35,87826,52470],{"class":359},[35,87828,51670],{"class":51626},[35,87830,15254],{"class":48},[35,87832,544],{"class":359},[35,87834,51717],{"class":306},[35,87836,51697],{"class":48},[35,87838,544],{"class":359},[35,87840,51724],{"class":306},[35,87842,51633],{"class":359},[35,87844,87845,87847,87849,87851,87853],{"class":37,"line":92},[35,87846,52470],{"class":359},[35,87848,51733],{"class":51626},[35,87850,51736],{"class":359},[35,87852,51733],{"class":51626},[35,87854,51633],{"class":359},[35,87856,87857,87859,87861],{"class":37,"line":101},[35,87858,52111],{"class":359},[35,87860,51660],{"class":51626},[35,87862,51633],{"class":359},[35,87864,87865],{"class":37,"line":110},[35,87866,141],{"emptyLinePlaceholder":140},[35,87868,87869,87871,87873],{"class":37,"line":119},[35,87870,1404],{"class":359},[35,87872,52126],{"class":51626},[35,87874,51633],{"class":359},[35,87876,87877,87879,87881,87883,87885],{"class":37,"line":128},[35,87878,52470],{"class":359},[35,87880,51937],{"class":51626},[35,87882,55640],{"class":359},[35,87884,51937],{"class":51626},[35,87886,51633],{"class":359},[35,87888,87889,87891,87893],{"class":37,"line":137},[35,87890,52470],{"class":359},[35,87892,52139],{"class":51626},[35,87894,51633],{"class":359},[35,87896,87897,87899,87901],{"class":37,"line":144},[35,87898,70410],{"class":495},[35,87900,74098],{"class":48},[35,87902,11187],{"class":359},[35,87904,87905,87907,87909,87911,87913,87915,87917,87919,87921,87923,87926],{"class":37,"line":150},[35,87906,56097],{"class":359},[35,87908,54725],{"class":48},[35,87910,499],{"class":359},[35,87912,82256],{"class":306},[35,87914,74574],{"class":359},[35,87916,544],{"class":495},[35,87918,11912],{"class":495},[35,87920,74114],{"class":48},[35,87922,17595],{"class":359},[35,87924,87925],{"class":48},"toLocaleString",[35,87927,2317],{"class":359},[35,87929,87930,87933,87936,87938],{"class":37,"line":159},[35,87931,87932],{"class":48},"      setTimeout",[35,87934,87935],{"class":359},"(getTime, ",[35,87937,6744],{"class":58},[35,87939,505],{"class":359},[35,87941,87942],{"class":37,"line":168},[35,87943,2528],{"class":359},[35,87945,87946,87949],{"class":37,"line":177},[35,87947,87948],{"class":48},"    getTime",[35,87950,2317],{"class":359},[35,87952,87953,87955,87957],{"class":37,"line":182},[35,87954,52743],{"class":359},[35,87956,52139],{"class":51626},[35,87958,51633],{"class":359},[35,87960,87961,87963,87965],{"class":37,"line":188},[35,87962,52111],{"class":359},[35,87964,52126],{"class":51626},[35,87966,51633],{"class":359},[35,87968,87969],{"class":37,"line":197},[35,87970,141],{"emptyLinePlaceholder":140},[35,87972,87973,87975,87977],{"class":37,"line":206},[35,87974,52111],{"class":359},[35,87976,50961],{"class":51626},[35,87978,51633],{"class":359},[21,87980,87981],{},[1823,87982],{"alt":30,"src":87983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[14,87985,87986],{"start":65},[17,87987,87677],{},[21,87989,87990],{},[1823,87991],{"alt":30,"src":87992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[21,87994,87995],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[21,87997,39515],{},[21,87999,88000],{},"这个是简易版的递归函数深拷贝",[21,88002,88003],{},"一定要注意先数组再对象，因为万物皆可对象",[25,88005,88007],{"className":50959,"code":88006,"language":50961,"meta":30,"style":30},"\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",[32,88008,88009,88019,88033,88037,88045,88059,88079,88091,88099,88103,88111,88119,88129,88138,88146,88162,88166,88174,88178,88182,88194,88199,88218,88234,88239,88244,88249,88264,88269,88274,88283,88291,88308,88316,88322,88330,88335,88340,88349,88353,88357,88361,88372,88381,88391,88405,88415,88423,88431,88439,88443],{"__ignoreMap":30},[35,88010,88011,88013,88015,88017],{"class":37,"line":38},[35,88012,51623],{"class":359},[35,88014,51627],{"class":51626},[35,88016,51630],{"class":48},[35,88018,51633],{"class":359},[35,88020,88021,88023,88025,88027,88029,88031],{"class":37,"line":45},[35,88022,1404],{"class":359},[35,88024,50961],{"class":51626},[35,88026,51642],{"class":48},[35,88028,544],{"class":359},[35,88030,51647],{"class":306},[35,88032,51633],{"class":359},[35,88034,88035],{"class":37,"line":55},[35,88036,141],{"emptyLinePlaceholder":140},[35,88038,88039,88041,88043],{"class":37,"line":65},[35,88040,1404],{"class":359},[35,88042,51660],{"class":51626},[35,88044,51633],{"class":359},[35,88046,88047,88049,88051,88053,88055,88057],{"class":37,"line":74},[35,88048,52470],{"class":359},[35,88050,51670],{"class":51626},[35,88052,51673],{"class":48},[35,88054,544],{"class":359},[35,88056,51678],{"class":306},[35,88058,51633],{"class":359},[35,88060,88061,88063,88065,88067,88069,88071,88073,88075,88077],{"class":37,"line":83},[35,88062,52470],{"class":359},[35,88064,51670],{"class":51626},[35,88066,15254],{"class":48},[35,88068,544],{"class":359},[35,88070,51717],{"class":306},[35,88072,51697],{"class":48},[35,88074,544],{"class":359},[35,88076,51724],{"class":306},[35,88078,51633],{"class":359},[35,88080,88081,88083,88085,88087,88089],{"class":37,"line":92},[35,88082,52470],{"class":359},[35,88084,51733],{"class":51626},[35,88086,51736],{"class":359},[35,88088,51733],{"class":51626},[35,88090,51633],{"class":359},[35,88092,88093,88095,88097],{"class":37,"line":101},[35,88094,52111],{"class":359},[35,88096,51660],{"class":51626},[35,88098,51633],{"class":359},[35,88100,88101],{"class":37,"line":110},[35,88102,141],{"emptyLinePlaceholder":140},[35,88104,88105,88107,88109],{"class":37,"line":119},[35,88106,1404],{"class":359},[35,88108,52126],{"class":51626},[35,88110,51633],{"class":359},[35,88112,88113,88115,88117],{"class":37,"line":128},[35,88114,52470],{"class":359},[35,88116,52139],{"class":51626},[35,88118,51633],{"class":359},[35,88120,88121,88123,88125,88127],{"class":37,"line":137},[35,88122,11555],{"class":495},[35,88124,70297],{"class":58},[35,88126,13898],{"class":495},[35,88128,15906],{"class":359},[35,88130,88131,88133,88136],{"class":37,"line":144},[35,88132,71941],{"class":359},[35,88134,88135],{"class":306},"'pink'",[35,88137,31792],{"class":359},[35,88139,88140,88142,88144],{"class":37,"line":150},[35,88141,71951],{"class":359},[35,88143,1144],{"class":58},[35,88145,31792],{"class":359},[35,88147,88148,88151,88154,88156,88159],{"class":37,"line":159},[35,88149,88150],{"class":359},"      hobby: [",[35,88152,88153],{"class":306},"'乒乓球'",[35,88155,12769],{"class":359},[35,88157,88158],{"class":306},"'足球'",[35,88160,88161],{"class":359},"],\n",[35,88163,88164],{"class":37,"line":168},[35,88165,78197],{"class":359},[35,88167,88168,88171],{"class":37,"line":177},[35,88169,88170],{"class":359},"        baby: ",[35,88172,88173],{"class":306},"'小pink'\n",[35,88175,88176],{"class":37,"line":182},[35,88177,52724],{"class":359},[35,88179,88180],{"class":37,"line":188},[35,88181,2528],{"class":359},[35,88183,88184,88186,88189,88191],{"class":37,"line":197},[35,88185,11555],{"class":495},[35,88187,88188],{"class":58}," o",[35,88190,13898],{"class":495},[35,88192,88193],{"class":359}," {}\n",[35,88195,88196],{"class":37,"line":206},[35,88197,88198],{"class":41},"    \u002F\u002F 拷贝函数\n",[35,88200,88201,88203,88206,88208,88211,88213,88216],{"class":37,"line":215},[35,88202,70410],{"class":495},[35,88204,88205],{"class":48}," deepCopy",[35,88207,499],{"class":359},[35,88209,88210],{"class":5550},"newObj",[35,88212,12769],{"class":359},[35,88214,88215],{"class":5550},"oldObj",[35,88217,12776],{"class":359},[35,88219,88220,88222,88224,88226,88229,88231],{"class":37,"line":224},[35,88221,52610],{"class":495},[35,88223,2012],{"class":359},[35,88225,52173],{"class":495},[35,88227,88228],{"class":359}," k ",[35,88230,26374],{"class":495},[35,88232,88233],{"class":359}," oldObj) {\n",[35,88235,88236],{"class":37,"line":233},[35,88237,88238],{"class":41},"        \u002F\u002F 处理数组的问题\n",[35,88240,88241],{"class":37,"line":238},[35,88242,88243],{"class":41},"        \u002F\u002F 判断是否属于数组\n",[35,88245,88246],{"class":37,"line":244},[35,88247,88248],{"class":41},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[35,88250,88251,88253,88256,88259,88262],{"class":37,"line":253},[35,88252,2837],{"class":495},[35,88254,88255],{"class":359}," (oldObj[k] ",[35,88257,88258],{"class":495},"instanceof",[35,88260,88261],{"class":48}," Array",[35,88263,12776],{"class":359},[35,88265,88266],{"class":37,"line":262},[35,88267,88268],{"class":41},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[35,88270,88271],{"class":37,"line":271},[35,88272,88273],{"class":41},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[35,88275,88276,88279,88281],{"class":37,"line":280},[35,88277,88278],{"class":359},"          newObj[k] ",[35,88280,544],{"class":495},[35,88282,52164],{"class":359},[35,88284,88285,88288],{"class":37,"line":289},[35,88286,88287],{"class":48},"          deepCopy",[35,88289,88290],{"class":359},"(newObj[k], oldObj[k])\n",[35,88292,88293,88295,88297,88299,88301,88303,88306],{"class":37,"line":294},[35,88294,80405],{"class":359},[35,88296,2051],{"class":495},[35,88298,2054],{"class":495},[35,88300,88255],{"class":359},[35,88302,88258],{"class":495},[35,88304,88305],{"class":48}," Object",[35,88307,12776],{"class":359},[35,88309,88310,88312,88314],{"class":37,"line":300},[35,88311,88278],{"class":359},[35,88313,544],{"class":495},[35,88315,88193],{"class":359},[35,88317,88318,88320],{"class":37,"line":313},[35,88319,88287],{"class":48},[35,88321,88290],{"class":359},[35,88323,88324,88326,88328],{"class":37,"line":324},[35,88325,80405],{"class":359},[35,88327,2051],{"class":495},[35,88329,15906],{"class":359},[35,88331,88332],{"class":37,"line":2955},[35,88333,88334],{"class":41},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[35,88336,88337],{"class":37,"line":8282},[35,88338,88339],{"class":41},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[35,88341,88342,88344,88346],{"class":37,"line":8306},[35,88343,88278],{"class":359},[35,88345,544],{"class":495},[35,88347,88348],{"class":359}," oldObj[k]\n",[35,88350,88351],{"class":37,"line":8311},[35,88352,2869],{"class":359},[35,88354,88355],{"class":37,"line":8317},[35,88356,52724],{"class":359},[35,88358,88359],{"class":37,"line":8344},[35,88360,2528],{"class":359},[35,88362,88363,88366,88369],{"class":37,"line":8349},[35,88364,88365],{"class":48},"    deepCopy",[35,88367,88368],{"class":359},"(o, obj) ",[35,88370,88371],{"class":41},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[35,88373,88374,88376,88378],{"class":37,"line":8355},[35,88375,74078],{"class":359},[35,88377,58573],{"class":48},[35,88379,88380],{"class":359},"(o)\n",[35,88382,88383,88386,88388],{"class":37,"line":8367},[35,88384,88385],{"class":359},"    o.age ",[35,88387,544],{"class":495},[35,88389,88390],{"class":58}," 20\n",[35,88392,88393,88396,88398,88400,88402],{"class":37,"line":8379},[35,88394,88395],{"class":359},"    o.hobby[",[35,88397,687],{"class":58},[35,88399,4777],{"class":359},[35,88401,544],{"class":495},[35,88403,88404],{"class":306}," '篮球'\n",[35,88406,88407,88410,88412],{"class":37,"line":8391},[35,88408,88409],{"class":359},"    o.family ",[35,88411,544],{"class":495},[35,88413,88414],{"class":306}," '老pink'\n",[35,88416,88417,88419,88421],{"class":37,"line":10050},[35,88418,74078],{"class":359},[35,88420,58573],{"class":48},[35,88422,70362],{"class":359},[35,88424,88425,88427,88429],{"class":37,"line":10075},[35,88426,52743],{"class":359},[35,88428,52139],{"class":51626},[35,88430,51633],{"class":359},[35,88432,88433,88435,88437],{"class":37,"line":10098},[35,88434,52111],{"class":359},[35,88436,52126],{"class":51626},[35,88438,51633],{"class":359},[35,88440,88441],{"class":37,"line":10122},[35,88442,141],{"emptyLinePlaceholder":140},[35,88444,88445,88447,88449],{"class":37,"line":10127},[35,88446,52111],{"class":359},[35,88448,50961],{"class":51626},[35,88450,51633],{"class":359},[21,88452,88453],{},[1823,88454],{"alt":30,"src":88455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22332,88457,88459,88460],{"id":88458},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[645,88461,88462],{},"js库lodash里面cloneDeep内部实现了深拷贝",[21,88464,88465],{},[734,88466,88467],{"href":88467,"rel":88468},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24198],[21,88470,88471],{},"lodash里边的方法都要加上一个下划线_",[21,88473,88474],{},"_.cloneDeep()",[25,88476,88478],{"className":50959,"code":88477,"language":50961,"meta":30,"style":30},"\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",[32,88479,88480,88490,88504,88508,88516,88530,88550,88562,88570,88574,88582,88587,88606,88614,88624,88632,88640,88652,88656,88662,88666,88670,88686,88694,88703,88711,88719,88727,88731],{"__ignoreMap":30},[35,88481,88482,88484,88486,88488],{"class":37,"line":38},[35,88483,51623],{"class":359},[35,88485,51627],{"class":51626},[35,88487,51630],{"class":48},[35,88489,51633],{"class":359},[35,88491,88492,88494,88496,88498,88500,88502],{"class":37,"line":45},[35,88493,1404],{"class":359},[35,88495,50961],{"class":51626},[35,88497,51642],{"class":48},[35,88499,544],{"class":359},[35,88501,51647],{"class":306},[35,88503,51633],{"class":359},[35,88505,88506],{"class":37,"line":55},[35,88507,141],{"emptyLinePlaceholder":140},[35,88509,88510,88512,88514],{"class":37,"line":65},[35,88511,1404],{"class":359},[35,88513,51660],{"class":51626},[35,88515,51633],{"class":359},[35,88517,88518,88520,88522,88524,88526,88528],{"class":37,"line":74},[35,88519,52470],{"class":359},[35,88521,51670],{"class":51626},[35,88523,51673],{"class":48},[35,88525,544],{"class":359},[35,88527,51678],{"class":306},[35,88529,51633],{"class":359},[35,88531,88532,88534,88536,88538,88540,88542,88544,88546,88548],{"class":37,"line":83},[35,88533,52470],{"class":359},[35,88535,51670],{"class":51626},[35,88537,15254],{"class":48},[35,88539,544],{"class":359},[35,88541,51717],{"class":306},[35,88543,51697],{"class":48},[35,88545,544],{"class":359},[35,88547,51724],{"class":306},[35,88549,51633],{"class":359},[35,88551,88552,88554,88556,88558,88560],{"class":37,"line":92},[35,88553,52470],{"class":359},[35,88555,51733],{"class":51626},[35,88557,51736],{"class":359},[35,88559,51733],{"class":51626},[35,88561,51633],{"class":359},[35,88563,88564,88566,88568],{"class":37,"line":101},[35,88565,52111],{"class":359},[35,88567,51660],{"class":51626},[35,88569,51633],{"class":359},[35,88571,88572],{"class":37,"line":110},[35,88573,141],{"emptyLinePlaceholder":140},[35,88575,88576,88578,88580],{"class":37,"line":119},[35,88577,1404],{"class":359},[35,88579,52126],{"class":51626},[35,88581,51633],{"class":359},[35,88583,88584],{"class":37,"line":128},[35,88585,88586],{"class":41},"  \u003C!-- 先引用这个库 -->\n",[35,88588,88589,88591,88593,88595,88597,88600,88602,88604],{"class":37,"line":137},[35,88590,52470],{"class":359},[35,88592,52139],{"class":51626},[35,88594,55565],{"class":48},[35,88596,544],{"class":359},[35,88598,88599],{"class":306},"\"lodash.min.js\"",[35,88601,55640],{"class":359},[35,88603,52139],{"class":51626},[35,88605,51633],{"class":359},[35,88607,88608,88610,88612],{"class":37,"line":144},[35,88609,52470],{"class":359},[35,88611,52139],{"class":51626},[35,88613,51633],{"class":359},[35,88615,88616,88618,88620,88622],{"class":37,"line":150},[35,88617,11555],{"class":495},[35,88619,70297],{"class":58},[35,88621,13898],{"class":495},[35,88623,15906],{"class":359},[35,88625,88626,88628,88630],{"class":37,"line":159},[35,88627,71941],{"class":359},[35,88629,88135],{"class":306},[35,88631,31792],{"class":359},[35,88633,88634,88636,88638],{"class":37,"line":168},[35,88635,71951],{"class":359},[35,88637,1144],{"class":58},[35,88639,31792],{"class":359},[35,88641,88642,88644,88646,88648,88650],{"class":37,"line":177},[35,88643,88150],{"class":359},[35,88645,88153],{"class":306},[35,88647,12769],{"class":359},[35,88649,88158],{"class":306},[35,88651,88161],{"class":359},[35,88653,88654],{"class":37,"line":182},[35,88655,78197],{"class":359},[35,88657,88658,88660],{"class":37,"line":188},[35,88659,88170],{"class":359},[35,88661,88173],{"class":306},[35,88663,88664],{"class":37,"line":197},[35,88665,52724],{"class":359},[35,88667,88668],{"class":37,"line":206},[35,88669,2528],{"class":359},[35,88671,88672,88674,88676,88678,88681,88684],{"class":37,"line":215},[35,88673,11555],{"class":495},[35,88675,88188],{"class":58},[35,88677,13898],{"class":495},[35,88679,88680],{"class":359}," _.",[35,88682,88683],{"class":48},"cloneDeep",[35,88685,70362],{"class":359},[35,88687,88688,88690,88692],{"class":37,"line":224},[35,88689,74078],{"class":359},[35,88691,58573],{"class":48},[35,88693,88380],{"class":359},[35,88695,88696,88699,88701],{"class":37,"line":233},[35,88697,88698],{"class":359},"    o.family.baby ",[35,88700,544],{"class":495},[35,88702,88414],{"class":306},[35,88704,88705,88707,88709],{"class":37,"line":238},[35,88706,74078],{"class":359},[35,88708,58573],{"class":48},[35,88710,70362],{"class":359},[35,88712,88713,88715,88717],{"class":37,"line":244},[35,88714,52743],{"class":359},[35,88716,52139],{"class":51626},[35,88718,51633],{"class":359},[35,88720,88721,88723,88725],{"class":37,"line":253},[35,88722,52111],{"class":359},[35,88724,52126],{"class":51626},[35,88726,51633],{"class":359},[35,88728,88729],{"class":37,"line":262},[35,88730,141],{"emptyLinePlaceholder":140},[35,88732,88733,88735,88737],{"class":37,"line":271},[35,88734,52111],{"class":359},[35,88736,50961],{"class":51626},[35,88738,51633],{"class":359},[21,88740,88741],{},[1823,88742],{"alt":30,"src":88743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22332,88745,88747],{"id":88746},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[25,88749,88751],{"className":50959,"code":88750,"language":50961,"meta":30,"style":30},"\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",[32,88752,88753,88763,88777,88781,88789,88803,88823,88835,88843,88847,88855,88863,88873,88881,88889,88901,88905,88911,88915,88919,88924,88929,88934,88960,88968,88977,88985,88993,89001,89005],{"__ignoreMap":30},[35,88754,88755,88757,88759,88761],{"class":37,"line":38},[35,88756,51623],{"class":359},[35,88758,51627],{"class":51626},[35,88760,51630],{"class":48},[35,88762,51633],{"class":359},[35,88764,88765,88767,88769,88771,88773,88775],{"class":37,"line":45},[35,88766,1404],{"class":359},[35,88768,50961],{"class":51626},[35,88770,51642],{"class":48},[35,88772,544],{"class":359},[35,88774,51647],{"class":306},[35,88776,51633],{"class":359},[35,88778,88779],{"class":37,"line":55},[35,88780,141],{"emptyLinePlaceholder":140},[35,88782,88783,88785,88787],{"class":37,"line":65},[35,88784,1404],{"class":359},[35,88786,51660],{"class":51626},[35,88788,51633],{"class":359},[35,88790,88791,88793,88795,88797,88799,88801],{"class":37,"line":74},[35,88792,52470],{"class":359},[35,88794,51670],{"class":51626},[35,88796,51673],{"class":48},[35,88798,544],{"class":359},[35,88800,51678],{"class":306},[35,88802,51633],{"class":359},[35,88804,88805,88807,88809,88811,88813,88815,88817,88819,88821],{"class":37,"line":83},[35,88806,52470],{"class":359},[35,88808,51670],{"class":51626},[35,88810,15254],{"class":48},[35,88812,544],{"class":359},[35,88814,51717],{"class":306},[35,88816,51697],{"class":48},[35,88818,544],{"class":359},[35,88820,51724],{"class":306},[35,88822,51633],{"class":359},[35,88824,88825,88827,88829,88831,88833],{"class":37,"line":92},[35,88826,52470],{"class":359},[35,88828,51733],{"class":51626},[35,88830,51736],{"class":359},[35,88832,51733],{"class":51626},[35,88834,51633],{"class":359},[35,88836,88837,88839,88841],{"class":37,"line":101},[35,88838,52111],{"class":359},[35,88840,51660],{"class":51626},[35,88842,51633],{"class":359},[35,88844,88845],{"class":37,"line":110},[35,88846,141],{"emptyLinePlaceholder":140},[35,88848,88849,88851,88853],{"class":37,"line":119},[35,88850,1404],{"class":359},[35,88852,52126],{"class":51626},[35,88854,51633],{"class":359},[35,88856,88857,88859,88861],{"class":37,"line":128},[35,88858,52470],{"class":359},[35,88860,52139],{"class":51626},[35,88862,51633],{"class":359},[35,88864,88865,88867,88869,88871],{"class":37,"line":137},[35,88866,11555],{"class":495},[35,88868,70297],{"class":58},[35,88870,13898],{"class":495},[35,88872,15906],{"class":359},[35,88874,88875,88877,88879],{"class":37,"line":144},[35,88876,71941],{"class":359},[35,88878,88135],{"class":306},[35,88880,31792],{"class":359},[35,88882,88883,88885,88887],{"class":37,"line":150},[35,88884,71951],{"class":359},[35,88886,1144],{"class":58},[35,88888,31792],{"class":359},[35,88890,88891,88893,88895,88897,88899],{"class":37,"line":159},[35,88892,88150],{"class":359},[35,88894,88153],{"class":306},[35,88896,12769],{"class":359},[35,88898,88158],{"class":306},[35,88900,88161],{"class":359},[35,88902,88903],{"class":37,"line":168},[35,88904,78197],{"class":359},[35,88906,88907,88909],{"class":37,"line":177},[35,88908,88170],{"class":359},[35,88910,88173],{"class":306},[35,88912,88913],{"class":37,"line":182},[35,88914,52724],{"class":359},[35,88916,88917],{"class":37,"line":188},[35,88918,2528],{"class":359},[35,88920,88921],{"class":37,"line":197},[35,88922,88923],{"class":41},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[35,88925,88926],{"class":37,"line":206},[35,88927,88928],{"class":41},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[35,88930,88931],{"class":37,"line":215},[35,88932,88933],{"class":41},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[35,88935,88936,88938,88940,88942,88945,88947,88950,88952,88954,88956,88958],{"class":37,"line":224},[35,88937,11555],{"class":495},[35,88939,88188],{"class":58},[35,88941,13898],{"class":495},[35,88943,88944],{"class":58}," JSON",[35,88946,1052],{"class":359},[35,88948,88949],{"class":48},"parse",[35,88951,499],{"class":359},[35,88953,71989],{"class":58},[35,88955,1052],{"class":359},[35,88957,71994],{"class":48},[35,88959,71997],{"class":359},[35,88961,88962,88964,88966],{"class":37,"line":233},[35,88963,74078],{"class":359},[35,88965,58573],{"class":48},[35,88967,88380],{"class":359},[35,88969,88970,88972,88974],{"class":37,"line":238},[35,88971,88698],{"class":359},[35,88973,544],{"class":495},[35,88975,88976],{"class":306}," '123'\n",[35,88978,88979,88981,88983],{"class":37,"line":244},[35,88980,74078],{"class":359},[35,88982,58573],{"class":48},[35,88984,70362],{"class":359},[35,88986,88987,88989,88991],{"class":37,"line":253},[35,88988,52743],{"class":359},[35,88990,52139],{"class":51626},[35,88992,51633],{"class":359},[35,88994,88995,88997,88999],{"class":37,"line":262},[35,88996,52111],{"class":359},[35,88998,52126],{"class":51626},[35,89000,51633],{"class":359},[35,89002,89003],{"class":37,"line":271},[35,89004,141],{"emptyLinePlaceholder":140},[35,89006,89007,89009,89011],{"class":37,"line":280},[35,89008,52111],{"class":359},[35,89010,50961],{"class":51626},[35,89012,51633],{"class":359},[21,89014,89015],{},[1823,89016],{"alt":30,"src":89017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[438,89019,89021],{"id":89020},"_415-异常处理","4.15 异常处理",[14,89023,89024],{},[17,89025,89026],{},"throw抛异常",[21,89028,89029],{},[1823,89030],{"alt":30,"src":89031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[14,89033,89034],{"start":45},[17,89035,89036],{},"try\u002Fcatch 捕获错误信息",[21,89038,89039],{},[1823,89040],{"alt":30,"src":89041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[25,89043,89045],{"className":50959,"code":89044,"language":50961,"meta":30,"style":30},"\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",[32,89046,89047,89057,89071,89075,89083,89097,89117,89129,89137,89141,89149,89161,89169,89178,89185,89190,89209,89218,89229,89234,89244,89249,89254,89259,89276,89280,89285,89292,89304,89308,89320,89324,89328,89333,89338,89345,89353,89361,89365],{"__ignoreMap":30},[35,89048,89049,89051,89053,89055],{"class":37,"line":38},[35,89050,51623],{"class":359},[35,89052,51627],{"class":51626},[35,89054,51630],{"class":48},[35,89056,51633],{"class":359},[35,89058,89059,89061,89063,89065,89067,89069],{"class":37,"line":45},[35,89060,1404],{"class":359},[35,89062,50961],{"class":51626},[35,89064,51642],{"class":48},[35,89066,544],{"class":359},[35,89068,51647],{"class":306},[35,89070,51633],{"class":359},[35,89072,89073],{"class":37,"line":55},[35,89074,141],{"emptyLinePlaceholder":140},[35,89076,89077,89079,89081],{"class":37,"line":65},[35,89078,1404],{"class":359},[35,89080,51660],{"class":51626},[35,89082,51633],{"class":359},[35,89084,89085,89087,89089,89091,89093,89095],{"class":37,"line":74},[35,89086,52470],{"class":359},[35,89088,51670],{"class":51626},[35,89090,51673],{"class":48},[35,89092,544],{"class":359},[35,89094,51678],{"class":306},[35,89096,51633],{"class":359},[35,89098,89099,89101,89103,89105,89107,89109,89111,89113,89115],{"class":37,"line":83},[35,89100,52470],{"class":359},[35,89102,51670],{"class":51626},[35,89104,15254],{"class":48},[35,89106,544],{"class":359},[35,89108,51717],{"class":306},[35,89110,51697],{"class":48},[35,89112,544],{"class":359},[35,89114,51724],{"class":306},[35,89116,51633],{"class":359},[35,89118,89119,89121,89123,89125,89127],{"class":37,"line":92},[35,89120,52470],{"class":359},[35,89122,51733],{"class":51626},[35,89124,51736],{"class":359},[35,89126,51733],{"class":51626},[35,89128,51633],{"class":359},[35,89130,89131,89133,89135],{"class":37,"line":101},[35,89132,52111],{"class":359},[35,89134,51660],{"class":51626},[35,89136,51633],{"class":359},[35,89138,89139],{"class":37,"line":110},[35,89140,141],{"emptyLinePlaceholder":140},[35,89142,89143,89145,89147],{"class":37,"line":119},[35,89144,1404],{"class":359},[35,89146,52126],{"class":51626},[35,89148,51633],{"class":359},[35,89150,89151,89153,89155,89157,89159],{"class":37,"line":128},[35,89152,52470],{"class":359},[35,89154,21],{"class":51626},[35,89156,53820],{"class":359},[35,89158,21],{"class":51626},[35,89160,51633],{"class":359},[35,89162,89163,89165,89167],{"class":37,"line":137},[35,89164,52470],{"class":359},[35,89166,52139],{"class":51626},[35,89168,51633],{"class":359},[35,89170,89171,89173,89176],{"class":37,"line":144},[35,89172,70410],{"class":495},[35,89174,89175],{"class":48}," fn",[35,89177,11187],{"class":359},[35,89179,89180,89183],{"class":37,"line":150},[35,89181,89182],{"class":495},"      try",[35,89184,15906],{"class":359},[35,89186,89187],{"class":37,"line":159},[35,89188,89189],{"class":41},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[35,89191,89192,89194,89196,89198,89200,89202,89204,89207],{"class":37,"line":168},[35,89193,61596],{"class":495},[35,89195,7159],{"class":58},[35,89197,13898],{"class":495},[35,89199,54722],{"class":359},[35,89201,54725],{"class":48},[35,89203,499],{"class":359},[35,89205,89206],{"class":306},"'.p'",[35,89208,505],{"class":359},[35,89210,89211,89214,89216],{"class":37,"line":177},[35,89212,89213],{"class":359},"        p.style.color ",[35,89215,544],{"class":495},[35,89217,67377],{"class":306},[35,89219,89220,89223,89226],{"class":37,"line":182},[35,89221,89222],{"class":359},"      } ",[35,89224,89225],{"class":495},"catch",[35,89227,89228],{"class":359}," (err) {\n",[35,89230,89231],{"class":37,"line":188},[35,89232,89233],{"class":41},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[35,89235,89236,89239,89241],{"class":37,"line":197},[35,89237,89238],{"class":359},"        console.",[35,89240,58573],{"class":48},[35,89242,89243],{"class":359},"(err.message)\n",[35,89245,89246],{"class":37,"line":206},[35,89247,89248],{"class":41},"        \u002F\u002F 想要中断程序，需要加return\n",[35,89250,89251],{"class":37,"line":215},[35,89252,89253],{"class":41},"        \u002F\u002F return\n",[35,89255,89256],{"class":37,"line":224},[35,89257,89258],{"class":41},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[35,89260,89261,89264,89266,89269,89271,89274],{"class":37,"line":233},[35,89262,89263],{"class":495},"        throw",[35,89265,11912],{"class":495},[35,89267,89268],{"class":48}," Error",[35,89270,499],{"class":359},[35,89272,89273],{"class":306},"'你看看，选择器错误了吧'",[35,89275,505],{"class":359},[35,89277,89278],{"class":37,"line":238},[35,89279,52724],{"class":359},[35,89281,89282],{"class":37,"line":244},[35,89283,89284],{"class":41},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[35,89286,89287,89290],{"class":37,"line":253},[35,89288,89289],{"class":495},"      finally",[35,89291,15906],{"class":359},[35,89293,89294,89297,89299,89302],{"class":37,"line":262},[35,89295,89296],{"class":48},"        alert",[35,89298,499],{"class":359},[35,89300,89301],{"class":306},"'弹出对话框'",[35,89303,505],{"class":359},[35,89305,89306],{"class":37,"line":271},[35,89307,52724],{"class":359},[35,89309,89310,89312,89314,89316,89318],{"class":37,"line":280},[35,89311,58570],{"class":359},[35,89313,58573],{"class":48},[35,89315,499],{"class":359},[35,89317,966],{"class":58},[35,89319,505],{"class":359},[35,89321,89322],{"class":37,"line":289},[35,89323,141],{"emptyLinePlaceholder":140},[35,89325,89326],{"class":37,"line":294},[35,89327,2528],{"class":359},[35,89329,89330],{"class":37,"line":300},[35,89331,89332],{"class":41},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[35,89334,89335],{"class":37,"line":313},[35,89336,89337],{"class":41},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[35,89339,89340,89343],{"class":37,"line":324},[35,89341,89342],{"class":48},"    fn",[35,89344,2317],{"class":359},[35,89346,89347,89349,89351],{"class":37,"line":2955},[35,89348,52743],{"class":359},[35,89350,52139],{"class":51626},[35,89352,51633],{"class":359},[35,89354,89355,89357,89359],{"class":37,"line":8282},[35,89356,52111],{"class":359},[35,89358,52126],{"class":51626},[35,89360,51633],{"class":359},[35,89362,89363],{"class":37,"line":8306},[35,89364,141],{"emptyLinePlaceholder":140},[35,89366,89367,89369,89371],{"class":37,"line":8311},[35,89368,52111],{"class":359},[35,89370,50961],{"class":51626},[35,89372,51633],{"class":359},[21,89374,89375],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[14,89377,89378],{"start":55},[17,89379,89380],{},"debugger",[21,89382,89383],{},[1823,89384],{"alt":30,"src":89385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[21,89387,89388],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[438,89390,89392],{"id":89391},"_416-处理this","4.16 处理this",[465,89394,89396],{"id":89395},"_4161-this的指向","4.16.1 this的指向",[14,89398,89399],{},[17,89400,89401],{},"普通函数的this",[21,89403,89404],{},[1823,89405],{"alt":30,"src":89406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[14,89408,89409],{"start":45},[17,89410,89411],{},"箭头函数的this",[21,89413,89414],{},[1823,89415],{"alt":30,"src":89416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[21,89418,89419],{},[1823,89420],{"alt":30,"src":89421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[21,89423,89424],{},[1823,89425],{"alt":30,"src":89426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[465,89428,89430],{"id":89429},"_4162-this的改变","4.16.2 this的改变",[21,89432,89433],{},"call() apply() bind()",[14,89435,89436],{},[17,89437,89438],{},"call()",[21,89440,89441],{},[1823,89442],{"alt":30,"src":89443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[21,89445,89446],{},"两个作用：①调用函数；②改变this指向",[25,89448,89450],{"className":53393,"code":89449,"language":53395,"meta":30,"style":30},"\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",[32,89451,89452,89460,89468,89472,89477,89481,89486,89491,89496,89500,89505,89513],{"__ignoreMap":30},[35,89453,89454,89456,89458],{"class":37,"line":38},[35,89455,1404],{"class":359},[35,89457,52126],{"class":51626},[35,89459,51633],{"class":359},[35,89461,89462,89464,89466],{"class":37,"line":45},[35,89463,52470],{"class":359},[35,89465,52139],{"class":51626},[35,89467,51633],{"class":359},[35,89469,89470],{"class":37,"line":55},[35,89471,71848],{"class":359},[35,89473,89474],{"class":37,"line":65},[35,89475,89476],{"class":359},"      uname: 'pink'\n",[35,89478,89479],{"class":37,"line":74},[35,89480,2528],{"class":359},[35,89482,89483],{"class":37,"line":83},[35,89484,89485],{"class":359},"    function fn(x, y) {\n",[35,89487,89488],{"class":37,"line":92},[35,89489,89490],{"class":359},"      console.log(this)  \u002F\u002Fwindow\n",[35,89492,89493],{"class":37,"line":101},[35,89494,89495],{"class":359},"      console.log(x + y)\n",[35,89497,89498],{"class":37,"line":110},[35,89499,2528],{"class":359},[35,89501,89502],{"class":37,"line":119},[35,89503,89504],{"class":359},"    fn.call(obj, 1, 2)\n",[35,89506,89507,89509,89511],{"class":37,"line":128},[35,89508,52743],{"class":359},[35,89510,52139],{"class":51626},[35,89512,51633],{"class":359},[35,89514,89515,89517,89519],{"class":37,"line":137},[35,89516,52111],{"class":359},[35,89518,52126],{"class":51626},[35,89520,51633],{"class":359},[21,89522,89523],{},[1823,89524],{"alt":30,"src":89525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[14,89527,89528],{"start":45},[17,89529,89530],{},"apply()",[21,89532,89533],{},[1823,89534],{"alt":30,"src":89535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[21,89537,89446],{},[21,89539,89540],{},"call传递的是普通参数，而apply必须传递的是数组",[25,89542,89544],{"className":50959,"code":89543,"language":50961,"meta":30,"style":30},"\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",[32,89545,89546,89556,89570,89574,89582,89596,89616,89628,89636,89640,89648,89656,89666,89673,89677,89682,89698,89710,89724,89728,89733,89752,89757,89761,89766,89771,89779,89784,89806,89811,89827,89843,89855,89859,89864,89883,89891,89899,89903],{"__ignoreMap":30},[35,89547,89548,89550,89552,89554],{"class":37,"line":38},[35,89549,51623],{"class":359},[35,89551,51627],{"class":51626},[35,89553,51630],{"class":48},[35,89555,51633],{"class":359},[35,89557,89558,89560,89562,89564,89566,89568],{"class":37,"line":45},[35,89559,1404],{"class":359},[35,89561,50961],{"class":51626},[35,89563,51642],{"class":48},[35,89565,544],{"class":359},[35,89567,51647],{"class":306},[35,89569,51633],{"class":359},[35,89571,89572],{"class":37,"line":55},[35,89573,141],{"emptyLinePlaceholder":140},[35,89575,89576,89578,89580],{"class":37,"line":65},[35,89577,1404],{"class":359},[35,89579,51660],{"class":51626},[35,89581,51633],{"class":359},[35,89583,89584,89586,89588,89590,89592,89594],{"class":37,"line":74},[35,89585,52470],{"class":359},[35,89587,51670],{"class":51626},[35,89589,51673],{"class":48},[35,89591,544],{"class":359},[35,89593,51678],{"class":306},[35,89595,51633],{"class":359},[35,89597,89598,89600,89602,89604,89606,89608,89610,89612,89614],{"class":37,"line":83},[35,89599,52470],{"class":359},[35,89601,51670],{"class":51626},[35,89603,15254],{"class":48},[35,89605,544],{"class":359},[35,89607,51717],{"class":306},[35,89609,51697],{"class":48},[35,89611,544],{"class":359},[35,89613,51724],{"class":306},[35,89615,51633],{"class":359},[35,89617,89618,89620,89622,89624,89626],{"class":37,"line":92},[35,89619,52470],{"class":359},[35,89621,51733],{"class":51626},[35,89623,51736],{"class":359},[35,89625,51733],{"class":51626},[35,89627,51633],{"class":359},[35,89629,89630,89632,89634],{"class":37,"line":101},[35,89631,52111],{"class":359},[35,89633,51660],{"class":51626},[35,89635,51633],{"class":359},[35,89637,89638],{"class":37,"line":110},[35,89639,141],{"emptyLinePlaceholder":140},[35,89641,89642,89644,89646],{"class":37,"line":119},[35,89643,1404],{"class":359},[35,89645,52126],{"class":51626},[35,89647,51633],{"class":359},[35,89649,89650,89652,89654],{"class":37,"line":128},[35,89651,52470],{"class":359},[35,89653,52139],{"class":51626},[35,89655,51633],{"class":359},[35,89657,89658,89660,89662,89664],{"class":37,"line":137},[35,89659,11555],{"class":495},[35,89661,70297],{"class":58},[35,89663,13898],{"class":495},[35,89665,15906],{"class":359},[35,89667,89668,89670],{"class":37,"line":144},[35,89669,71951],{"class":359},[35,89671,89672],{"class":58},"18\n",[35,89674,89675],{"class":37,"line":150},[35,89676,2528],{"class":359},[35,89678,89679],{"class":37,"line":159},[35,89680,89681],{"class":41},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[35,89683,89684,89686,89688,89690,89692,89694,89696],{"class":37,"line":168},[35,89685,70410],{"class":495},[35,89687,89175],{"class":48},[35,89689,499],{"class":359},[35,89691,1314],{"class":5550},[35,89693,12769],{"class":359},[35,89695,1339],{"class":5550},[35,89697,12776],{"class":359},[35,89699,89700,89702,89704,89706,89708],{"class":37,"line":177},[35,89701,58570],{"class":359},[35,89703,58573],{"class":48},[35,89705,499],{"class":359},[35,89707,87318],{"class":58},[35,89709,505],{"class":359},[35,89711,89712,89714,89716,89719,89721],{"class":37,"line":182},[35,89713,58570],{"class":359},[35,89715,58573],{"class":48},[35,89717,89718],{"class":359},"(x ",[35,89720,975],{"class":495},[35,89722,89723],{"class":359}," y)\n",[35,89725,89726],{"class":37,"line":188},[35,89727,2528],{"class":359},[35,89729,89730],{"class":37,"line":197},[35,89731,89732],{"class":41},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[35,89734,89735,89738,89741,89744,89746,89748,89750],{"class":37,"line":206},[35,89736,89737],{"class":359},"    fn.",[35,89739,89740],{"class":48},"apply",[35,89742,89743],{"class":359},"(obj, [",[35,89745,713],{"class":58},[35,89747,12769],{"class":359},[35,89749,574],{"class":58},[35,89751,4991],{"class":359},[35,89753,89754],{"class":37,"line":215},[35,89755,89756],{"class":41},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[35,89758,89759],{"class":37,"line":224},[35,89760,141],{"emptyLinePlaceholder":140},[35,89762,89763],{"class":37,"line":233},[35,89764,89765],{"class":41},"    \u002F\u002F 使用场景：求数组最大值\n",[35,89767,89768],{"class":37,"line":238},[35,89769,89770],{"class":41},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[35,89772,89773,89776],{"class":37,"line":244},[35,89774,89775],{"class":41},"    \u002F\u002F console.log(max)",[35,89777,89778],{"class":41},"   \u002F\u002F3\n",[35,89780,89781],{"class":37,"line":253},[35,89782,89783],{"class":41},"    \u002F\u002F 指向空或者Math都是可以的\n",[35,89785,89786,89788,89790,89792,89794,89796,89798,89800,89802,89804],{"class":37,"line":262},[35,89787,11555],{"class":495},[35,89789,58021],{"class":58},[35,89791,13898],{"class":495},[35,89793,52552],{"class":359},[35,89795,807],{"class":58},[35,89797,12769],{"class":359},[35,89799,998],{"class":58},[35,89801,12769],{"class":359},[35,89803,1029],{"class":58},[35,89805,33572],{"class":359},[35,89807,89808],{"class":37,"line":271},[35,89809,89810],{"class":41},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[35,89812,89813,89815,89817,89819,89822,89824],{"class":37,"line":280},[35,89814,11555],{"class":495},[35,89816,6285],{"class":58},[35,89818,13898],{"class":495},[35,89820,89821],{"class":359}," Math.max.",[35,89823,89740],{"class":48},[35,89825,89826],{"class":359},"(Math, arr)\n",[35,89828,89829,89831,89834,89836,89839,89841],{"class":37,"line":289},[35,89830,11555],{"class":495},[35,89832,89833],{"class":58}," min",[35,89835,13898],{"class":495},[35,89837,89838],{"class":359}," Math.min.",[35,89840,89740],{"class":48},[35,89842,89826],{"class":359},[35,89844,89845,89847,89849,89852],{"class":37,"line":294},[35,89846,74078],{"class":359},[35,89848,58573],{"class":48},[35,89850,89851],{"class":359},"(max, min)     ",[35,89853,89854],{"class":41},"\u002F\u002F100,4\n",[35,89856,89857],{"class":37,"line":300},[35,89858,141],{"emptyLinePlaceholder":140},[35,89860,89861],{"class":37,"line":313},[35,89862,89863],{"class":41},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[35,89865,89866,89868,89870,89873,89875,89877,89880],{"class":37,"line":324},[35,89867,74078],{"class":359},[35,89869,58573],{"class":48},[35,89871,89872],{"class":359},"(Max.",[35,89874,6349],{"class":48},[35,89876,499],{"class":359},[35,89878,89879],{"class":495},"...",[35,89881,89882],{"class":359},"arr))\n",[35,89884,89885,89887,89889],{"class":37,"line":2955},[35,89886,52743],{"class":359},[35,89888,52139],{"class":51626},[35,89890,51633],{"class":359},[35,89892,89893,89895,89897],{"class":37,"line":8282},[35,89894,52111],{"class":359},[35,89896,52126],{"class":51626},[35,89898,51633],{"class":359},[35,89900,89901],{"class":37,"line":8306},[35,89902,141],{"emptyLinePlaceholder":140},[35,89904,89905,89907,89909],{"class":37,"line":8311},[35,89906,52111],{"class":359},[35,89908,50961],{"class":51626},[35,89910,51633],{"class":359},[21,89912,89913],{},[1823,89914],{"alt":30,"src":89915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[14,89917,89918],{"start":55},[17,89919,89920],{},"bind()",[21,89922,89923],{},[1823,89924],{"alt":30,"src":89925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[21,89927,89928],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[21,89930,89931],{},"bind的语法跟call很相似",[25,89933,89935],{"className":53393,"code":89934,"language":53395,"meta":30,"style":30},"\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",[32,89936,89937,89945,89953,89957,89962,89966,89970,89975,89979,89984,89989,89994,89999,90004,90009,90014,90018,90026],{"__ignoreMap":30},[35,89938,89939,89941,89943],{"class":37,"line":38},[35,89940,1404],{"class":359},[35,89942,52126],{"class":51626},[35,89944,51633],{"class":359},[35,89946,89947,89949,89951],{"class":37,"line":45},[35,89948,52470],{"class":359},[35,89950,52139],{"class":51626},[35,89952,51633],{"class":359},[35,89954,89955],{"class":37,"line":55},[35,89956,71848],{"class":359},[35,89958,89959],{"class":37,"line":65},[35,89960,89961],{"class":359},"      age: 18\n",[35,89963,89964],{"class":37,"line":74},[35,89965,2528],{"class":359},[35,89967,89968],{"class":37,"line":83},[35,89969,77468],{"class":359},[35,89971,89972],{"class":37,"line":92},[35,89973,89974],{"class":359},"      console.log(this)\n",[35,89976,89977],{"class":37,"line":101},[35,89978,2528],{"class":359},[35,89980,89981],{"class":37,"line":110},[35,89982,89983],{"class":359},"    \u002F\u002F 1.bind 不会调用函数\n",[35,89985,89986],{"class":37,"line":119},[35,89987,89988],{"class":359},"    \u002F\u002F 2.bind能改变this的指向\n",[35,89990,89991],{"class":37,"line":128},[35,89992,89993],{"class":359},"    fn.bind()\n",[35,89995,89996],{"class":37,"line":137},[35,89997,89998],{"class":359},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[35,90000,90001],{"class":37,"line":144},[35,90002,90003],{"class":359},"    const fun = fn.bind(obj)\n",[35,90005,90006],{"class":37,"line":150},[35,90007,90008],{"class":359},"    \u002F\u002F console.log(fun)\n",[35,90010,90011],{"class":37,"line":159},[35,90012,90013],{"class":359},"    \u002F\u002F 调用,查看this的指向\n",[35,90015,90016],{"class":37,"line":168},[35,90017,52977],{"class":359},[35,90019,90020,90022,90024],{"class":37,"line":177},[35,90021,52743],{"class":359},[35,90023,52139],{"class":51626},[35,90025,51633],{"class":359},[35,90027,90028,90030,90032],{"class":37,"line":182},[35,90029,52111],{"class":359},[35,90031,52126],{"class":51626},[35,90033,51633],{"class":359},[21,90035,90036],{},[1823,90037],{"alt":30,"src":90038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[14,90040,90041],{"start":65},[17,90042,90043],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[25,90045,90047],{"className":53393,"code":90046,"language":53395,"meta":30,"style":30},"\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",[32,90048,90049,90057,90070,90078,90083,90087,90092,90097,90102,90107,90112,90117,90122,90127,90131,90139],{"__ignoreMap":30},[35,90050,90051,90053,90055],{"class":37,"line":38},[35,90052,1404],{"class":359},[35,90054,52126],{"class":51626},[35,90056,51633],{"class":359},[35,90058,90059,90061,90063,90066,90068],{"class":37,"line":45},[35,90060,52470],{"class":359},[35,90062,54213],{"class":51626},[35,90064,90065],{"class":359},">禁用\u003C\u002F",[35,90067,54213],{"class":51626},[35,90069,51633],{"class":359},[35,90071,90072,90074,90076],{"class":37,"line":55},[35,90073,52470],{"class":359},[35,90075,52139],{"class":51626},[35,90077,51633],{"class":359},[35,90079,90080],{"class":37,"line":65},[35,90081,90082],{"class":359},"    const btn = document.querySelector('button')\n",[35,90084,90085],{"class":37,"line":74},[35,90086,59342],{"class":359},[35,90088,90089],{"class":37,"line":83},[35,90090,90091],{"class":359},"      this.disabled = true\n",[35,90093,90094],{"class":37,"line":92},[35,90095,90096],{"class":359},"      \u002F\u002F 定时器是window进行调用的\n",[35,90098,90099],{"class":37,"line":101},[35,90100,90101],{"class":359},"      setTimeout(function () {\n",[35,90103,90104],{"class":37,"line":110},[35,90105,90106],{"class":359},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[35,90108,90109],{"class":37,"line":119},[35,90110,90111],{"class":359},"        this.disabled = false\n",[35,90113,90114],{"class":37,"line":128},[35,90115,90116],{"class":359},"      }.bind(this), 2000)\n",[35,90118,90119],{"class":37,"line":137},[35,90120,90121],{"class":359},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[35,90123,90124],{"class":37,"line":144},[35,90125,90126],{"class":359},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[35,90128,90129],{"class":37,"line":150},[35,90130,33787],{"class":359},[35,90132,90133,90135,90137],{"class":37,"line":159},[35,90134,52743],{"class":359},[35,90136,52139],{"class":51626},[35,90138,51633],{"class":359},[35,90140,90141,90143,90145],{"class":37,"line":168},[35,90142,52111],{"class":359},[35,90144,52126],{"class":51626},[35,90146,51633],{"class":359},[14,90148,90149],{"start":74},[17,90150,22287],{},[21,90152,90153],{},[1823,90154],{"alt":30,"src":90155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[438,90157,90159],{"id":90158},"_417-性能优化","4.17 性能优化",[465,90161,90163],{"id":90162},"_4171-防抖","4.17.1 防抖",[21,90165,90166],{},[1823,90167],{"alt":30,"src":90168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[21,90170,90171],{},[645,90172,90173],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[21,90175,90176],{},"防抖实现方式：",[1501,90178,90179],{},[17,90180,90181],{},"lodash 提供了防抖处理",[21,90183,90184],{},"_.debounce(func,[wait=0],[options={}])",[21,90186,90187],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[25,90189,90191],{"className":50959,"code":90190,"language":50961,"meta":30,"style":30},"\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",[32,90192,90193,90203,90217,90221,90229,90243,90263,90275,90283,90289,90299,90311,90323,90334,90346,90356,90366,90379,90383,90391,90399,90403,90411,90429,90447,90455,90474,90484,90493,90504,90509,90513,90518,90523,90528,90553,90561,90569,90573],{"__ignoreMap":30},[35,90194,90195,90197,90199,90201],{"class":37,"line":38},[35,90196,51623],{"class":359},[35,90198,51627],{"class":51626},[35,90200,51630],{"class":48},[35,90202,51633],{"class":359},[35,90204,90205,90207,90209,90211,90213,90215],{"class":37,"line":45},[35,90206,1404],{"class":359},[35,90208,50961],{"class":51626},[35,90210,51642],{"class":48},[35,90212,544],{"class":359},[35,90214,51647],{"class":306},[35,90216,51633],{"class":359},[35,90218,90219],{"class":37,"line":55},[35,90220,141],{"emptyLinePlaceholder":140},[35,90222,90223,90225,90227],{"class":37,"line":65},[35,90224,1404],{"class":359},[35,90226,51660],{"class":51626},[35,90228,51633],{"class":359},[35,90230,90231,90233,90235,90237,90239,90241],{"class":37,"line":74},[35,90232,52470],{"class":359},[35,90234,51670],{"class":51626},[35,90236,51673],{"class":48},[35,90238,544],{"class":359},[35,90240,51678],{"class":306},[35,90242,51633],{"class":359},[35,90244,90245,90247,90249,90251,90253,90255,90257,90259,90261],{"class":37,"line":83},[35,90246,52470],{"class":359},[35,90248,51670],{"class":51626},[35,90250,15254],{"class":48},[35,90252,544],{"class":359},[35,90254,51717],{"class":306},[35,90256,51697],{"class":48},[35,90258,544],{"class":359},[35,90260,51724],{"class":306},[35,90262,51633],{"class":359},[35,90264,90265,90267,90269,90271,90273],{"class":37,"line":92},[35,90266,52470],{"class":359},[35,90268,51733],{"class":51626},[35,90270,51736],{"class":359},[35,90272,51733],{"class":51626},[35,90274,51633],{"class":359},[35,90276,90277,90279,90281],{"class":37,"line":101},[35,90278,52470],{"class":359},[35,90280,416],{"class":51626},[35,90282,51633],{"class":359},[35,90284,90285,90287],{"class":37,"line":110},[35,90286,55078],{"class":48},[35,90288,15906],{"class":359},[35,90290,90291,90293,90295,90297],{"class":37,"line":119},[35,90292,72921],{"class":58},[35,90294,51763],{"class":359},[35,90296,60831],{"class":58},[35,90298,1655],{"class":359},[35,90300,90301,90303,90305,90307,90309],{"class":37,"line":128},[35,90302,55097],{"class":58},[35,90304,51763],{"class":359},[35,90306,2072],{"class":58},[35,90308,51818],{"class":495},[35,90310,1655],{"class":359},[35,90312,90313,90315,90317,90319,90321],{"class":37,"line":137},[35,90314,55111],{"class":58},[35,90316,51763],{"class":359},[35,90318,2072],{"class":58},[35,90320,51818],{"class":495},[35,90322,1655],{"class":359},[35,90324,90325,90327,90329,90332],{"class":37,"line":144},[35,90326,55210],{"class":58},[35,90328,51763],{"class":359},[35,90330,90331],{"class":58},"gray",[35,90333,1655],{"class":359},[35,90335,90336,90338,90340,90342,90344],{"class":37,"line":150},[35,90337,55248],{"class":58},[35,90339,51763],{"class":359},[35,90341,1319],{"class":58},[35,90343,51818],{"class":495},[35,90345,1655],{"class":359},[35,90347,90348,90350,90352,90354],{"class":37,"line":159},[35,90349,57742],{"class":58},[35,90351,51763],{"class":359},[35,90353,61168],{"class":58},[35,90355,1655],{"class":359},[35,90357,90358,90360,90362,90364],{"class":37,"line":168},[35,90359,57612],{"class":58},[35,90361,51763],{"class":359},[35,90363,51918],{"class":58},[35,90365,1655],{"class":359},[35,90367,90368,90371,90373,90375,90377],{"class":37,"line":177},[35,90369,90370],{"class":58},"      padding-top",[35,90372,51763],{"class":359},[35,90374,372],{"class":58},[35,90376,51818],{"class":495},[35,90378,1655],{"class":359},[35,90380,90381],{"class":37,"line":182},[35,90382,2528],{"class":359},[35,90384,90385,90387,90389],{"class":37,"line":188},[35,90386,52743],{"class":359},[35,90388,416],{"class":51626},[35,90390,51633],{"class":359},[35,90392,90393,90395,90397],{"class":37,"line":197},[35,90394,52111],{"class":359},[35,90396,51660],{"class":51626},[35,90398,51633],{"class":359},[35,90400,90401],{"class":37,"line":206},[35,90402,141],{"emptyLinePlaceholder":140},[35,90404,90405,90407,90409],{"class":37,"line":215},[35,90406,1404],{"class":359},[35,90408,52126],{"class":51626},[35,90410,51633],{"class":359},[35,90412,90413,90415,90417,90419,90421,90423,90425,90427],{"class":37,"line":224},[35,90414,52470],{"class":359},[35,90416,51937],{"class":51626},[35,90418,53812],{"class":48},[35,90420,544],{"class":359},[35,90422,53817],{"class":306},[35,90424,55640],{"class":359},[35,90426,51937],{"class":51626},[35,90428,51633],{"class":359},[35,90430,90431,90433,90435,90437,90439,90441,90443,90445],{"class":37,"line":233},[35,90432,52470],{"class":359},[35,90434,52139],{"class":51626},[35,90436,55565],{"class":48},[35,90438,544],{"class":359},[35,90440,88599],{"class":306},[35,90442,55640],{"class":359},[35,90444,52139],{"class":51626},[35,90446,51633],{"class":359},[35,90448,90449,90451,90453],{"class":37,"line":238},[35,90450,52470],{"class":359},[35,90452,52139],{"class":51626},[35,90454,51633],{"class":359},[35,90456,90457,90459,90461,90463,90465,90467,90469,90472],{"class":37,"line":244},[35,90458,11555],{"class":495},[35,90460,87258],{"class":58},[35,90462,13898],{"class":495},[35,90464,54722],{"class":359},[35,90466,54725],{"class":48},[35,90468,499],{"class":359},[35,90470,90471],{"class":306},"'.box'",[35,90473,505],{"class":359},[35,90475,90476,90478,90480,90482],{"class":37,"line":253},[35,90477,52545],{"class":495},[35,90479,9772],{"class":359},[35,90481,544],{"class":495},[35,90483,47659],{"class":58},[35,90485,90486,90488,90491],{"class":37,"line":262},[35,90487,70410],{"class":495},[35,90489,90490],{"class":48}," mouseMove",[35,90492,11187],{"class":359},[35,90494,90495,90498,90500,90502],{"class":37,"line":271},[35,90496,90497],{"class":359},"      box.innerHTML ",[35,90499,544],{"class":495},[35,90501,3366],{"class":359},[35,90503,3036],{"class":495},[35,90505,90506],{"class":37,"line":280},[35,90507,90508],{"class":41},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[35,90510,90511],{"class":37,"line":289},[35,90512,2528],{"class":359},[35,90514,90515],{"class":37,"line":294},[35,90516,90517],{"class":41},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[35,90519,90520],{"class":37,"line":300},[35,90521,90522],{"class":41},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[35,90524,90525],{"class":37,"line":313},[35,90526,90527],{"class":41},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[35,90529,90530,90533,90535,90537,90540,90543,90546,90549,90551],{"class":37,"line":324},[35,90531,90532],{"class":359},"    box.",[35,90534,58139],{"class":48},[35,90536,499],{"class":359},[35,90538,90539],{"class":306},"'mousemove'",[35,90541,90542],{"class":359},", _.",[35,90544,90545],{"class":48},"debounce",[35,90547,90548],{"class":359},"(mouseMove, ",[35,90550,65400],{"class":58},[35,90552,30823],{"class":359},[35,90554,90555,90557,90559],{"class":37,"line":2955},[35,90556,52743],{"class":359},[35,90558,52139],{"class":51626},[35,90560,51633],{"class":359},[35,90562,90563,90565,90567],{"class":37,"line":8282},[35,90564,52111],{"class":359},[35,90566,52126],{"class":51626},[35,90568,51633],{"class":359},[35,90570,90571],{"class":37,"line":8306},[35,90572,141],{"emptyLinePlaceholder":140},[35,90574,90575,90577,90579],{"class":37,"line":8311},[35,90576,52111],{"class":359},[35,90578,50961],{"class":51626},[35,90580,51633],{"class":359},[1501,90582,90583],{},[17,90584,90585],{},"手写一个防抖函数来处理",[21,90587,90588],{},"防抖的核心就是利用定时器来实现的：",[21,90590,90591],{},"①声明一个定时器变量",[21,90593,90594],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[21,90596,90597],{},"③如果没有定时器则开启定时器，记得存到变量里面",[25,90599,90601],{"className":50959,"code":90600,"language":50961,"meta":30,"style":30},"\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",[32,90602,90603,90613,90627,90631,90639,90653,90673,90685,90693,90699,90709,90721,90733,90743,90755,90765,90775,90787,90791,90799,90807,90811,90819,90837,90855,90863,90881,90891,90899,90909,90913,90917,90921,90926,90931,90936,90941,90946,90951,90969,90976,90981,90989,90994,91007,91023,91033,91038,91042,91046,91066,91070,91075,91080,91085,91090,91098,91106,91110],{"__ignoreMap":30},[35,90604,90605,90607,90609,90611],{"class":37,"line":38},[35,90606,51623],{"class":359},[35,90608,51627],{"class":51626},[35,90610,51630],{"class":48},[35,90612,51633],{"class":359},[35,90614,90615,90617,90619,90621,90623,90625],{"class":37,"line":45},[35,90616,1404],{"class":359},[35,90618,50961],{"class":51626},[35,90620,51642],{"class":48},[35,90622,544],{"class":359},[35,90624,51647],{"class":306},[35,90626,51633],{"class":359},[35,90628,90629],{"class":37,"line":55},[35,90630,141],{"emptyLinePlaceholder":140},[35,90632,90633,90635,90637],{"class":37,"line":65},[35,90634,1404],{"class":359},[35,90636,51660],{"class":51626},[35,90638,51633],{"class":359},[35,90640,90641,90643,90645,90647,90649,90651],{"class":37,"line":74},[35,90642,52470],{"class":359},[35,90644,51670],{"class":51626},[35,90646,51673],{"class":48},[35,90648,544],{"class":359},[35,90650,51678],{"class":306},[35,90652,51633],{"class":359},[35,90654,90655,90657,90659,90661,90663,90665,90667,90669,90671],{"class":37,"line":83},[35,90656,52470],{"class":359},[35,90658,51670],{"class":51626},[35,90660,15254],{"class":48},[35,90662,544],{"class":359},[35,90664,51717],{"class":306},[35,90666,51697],{"class":48},[35,90668,544],{"class":359},[35,90670,51724],{"class":306},[35,90672,51633],{"class":359},[35,90674,90675,90677,90679,90681,90683],{"class":37,"line":92},[35,90676,52470],{"class":359},[35,90678,51733],{"class":51626},[35,90680,51736],{"class":359},[35,90682,51733],{"class":51626},[35,90684,51633],{"class":359},[35,90686,90687,90689,90691],{"class":37,"line":101},[35,90688,52470],{"class":359},[35,90690,416],{"class":51626},[35,90692,51633],{"class":359},[35,90694,90695,90697],{"class":37,"line":110},[35,90696,55078],{"class":48},[35,90698,15906],{"class":359},[35,90700,90701,90703,90705,90707],{"class":37,"line":119},[35,90702,72921],{"class":58},[35,90704,51763],{"class":359},[35,90706,60831],{"class":58},[35,90708,1655],{"class":359},[35,90710,90711,90713,90715,90717,90719],{"class":37,"line":128},[35,90712,55097],{"class":58},[35,90714,51763],{"class":359},[35,90716,2072],{"class":58},[35,90718,51818],{"class":495},[35,90720,1655],{"class":359},[35,90722,90723,90725,90727,90729,90731],{"class":37,"line":137},[35,90724,55111],{"class":58},[35,90726,51763],{"class":359},[35,90728,2072],{"class":58},[35,90730,51818],{"class":495},[35,90732,1655],{"class":359},[35,90734,90735,90737,90739,90741],{"class":37,"line":144},[35,90736,55210],{"class":58},[35,90738,51763],{"class":359},[35,90740,90331],{"class":58},[35,90742,1655],{"class":359},[35,90744,90745,90747,90749,90751,90753],{"class":37,"line":150},[35,90746,55248],{"class":58},[35,90748,51763],{"class":359},[35,90750,1319],{"class":58},[35,90752,51818],{"class":495},[35,90754,1655],{"class":359},[35,90756,90757,90759,90761,90763],{"class":37,"line":159},[35,90758,57742],{"class":58},[35,90760,51763],{"class":359},[35,90762,61168],{"class":58},[35,90764,1655],{"class":359},[35,90766,90767,90769,90771,90773],{"class":37,"line":168},[35,90768,57612],{"class":58},[35,90770,51763],{"class":359},[35,90772,51918],{"class":58},[35,90774,1655],{"class":359},[35,90776,90777,90779,90781,90783,90785],{"class":37,"line":177},[35,90778,90370],{"class":58},[35,90780,51763],{"class":359},[35,90782,372],{"class":58},[35,90784,51818],{"class":495},[35,90786,1655],{"class":359},[35,90788,90789],{"class":37,"line":182},[35,90790,2528],{"class":359},[35,90792,90793,90795,90797],{"class":37,"line":188},[35,90794,52743],{"class":359},[35,90796,416],{"class":51626},[35,90798,51633],{"class":359},[35,90800,90801,90803,90805],{"class":37,"line":197},[35,90802,52111],{"class":359},[35,90804,51660],{"class":51626},[35,90806,51633],{"class":359},[35,90808,90809],{"class":37,"line":206},[35,90810,141],{"emptyLinePlaceholder":140},[35,90812,90813,90815,90817],{"class":37,"line":215},[35,90814,1404],{"class":359},[35,90816,52126],{"class":51626},[35,90818,51633],{"class":359},[35,90820,90821,90823,90825,90827,90829,90831,90833,90835],{"class":37,"line":224},[35,90822,52470],{"class":359},[35,90824,51937],{"class":51626},[35,90826,53812],{"class":48},[35,90828,544],{"class":359},[35,90830,53817],{"class":306},[35,90832,55640],{"class":359},[35,90834,51937],{"class":51626},[35,90836,51633],{"class":359},[35,90838,90839,90841,90843,90845,90847,90849,90851,90853],{"class":37,"line":233},[35,90840,52470],{"class":359},[35,90842,52139],{"class":51626},[35,90844,55565],{"class":48},[35,90846,544],{"class":359},[35,90848,88599],{"class":306},[35,90850,55640],{"class":359},[35,90852,52139],{"class":51626},[35,90854,51633],{"class":359},[35,90856,90857,90859,90861],{"class":37,"line":238},[35,90858,52470],{"class":359},[35,90860,52139],{"class":51626},[35,90862,51633],{"class":359},[35,90864,90865,90867,90869,90871,90873,90875,90877,90879],{"class":37,"line":244},[35,90866,11555],{"class":495},[35,90868,87258],{"class":58},[35,90870,13898],{"class":495},[35,90872,54722],{"class":359},[35,90874,54725],{"class":48},[35,90876,499],{"class":359},[35,90878,90471],{"class":306},[35,90880,505],{"class":359},[35,90882,90883,90885,90887,90889],{"class":37,"line":253},[35,90884,52545],{"class":495},[35,90886,9772],{"class":359},[35,90888,544],{"class":495},[35,90890,47659],{"class":58},[35,90892,90893,90895,90897],{"class":37,"line":262},[35,90894,70410],{"class":495},[35,90896,90490],{"class":48},[35,90898,11187],{"class":359},[35,90900,90901,90903,90905,90907],{"class":37,"line":271},[35,90902,90497],{"class":359},[35,90904,544],{"class":495},[35,90906,3366],{"class":359},[35,90908,3036],{"class":495},[35,90910,90911],{"class":37,"line":280},[35,90912,90508],{"class":41},[35,90914,90915],{"class":37,"line":289},[35,90916,2528],{"class":359},[35,90918,90919],{"class":37,"line":294},[35,90920,90517],{"class":41},[35,90922,90923],{"class":37,"line":300},[35,90924,90925],{"class":41},"    \u002F\u002F 手写防抖函数\n",[35,90927,90928],{"class":37,"line":313},[35,90929,90930],{"class":41},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[35,90932,90933],{"class":37,"line":324},[35,90934,90935],{"class":41},"    \u002F\u002F 1.声明定时器变量\n",[35,90937,90938],{"class":37,"line":2955},[35,90939,90940],{"class":41},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[35,90942,90943],{"class":37,"line":8282},[35,90944,90945],{"class":41},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[35,90947,90948],{"class":37,"line":8306},[35,90949,90950],{"class":41},"    \u002F\u002F 4.定时器里面写函数调用\n",[35,90952,90953,90955,90958,90960,90963,90965,90967],{"class":37,"line":8311},[35,90954,70410],{"class":495},[35,90956,90957],{"class":48}," debounce",[35,90959,499],{"class":359},[35,90961,90962],{"class":5550},"fn",[35,90964,12769],{"class":359},[35,90966,1214],{"class":5550},[35,90968,12776],{"class":359},[35,90970,90971,90973],{"class":37,"line":8317},[35,90972,80097],{"class":495},[35,90974,90975],{"class":359}," timer\n",[35,90977,90978],{"class":37,"line":8344},[35,90979,90980],{"class":41},"      \u002F\u002F return 返回一个匿名函数\n",[35,90982,90983,90985,90987],{"class":37,"line":8349},[35,90984,74307],{"class":495},[35,90986,59244],{"class":495},[35,90988,54778],{"class":359},[35,90990,90991],{"class":37,"line":8355},[35,90992,90993],{"class":41},"        \u002F\u002F 这里边写第二三四步\n",[35,90995,90996,90998,91001,91004],{"class":37,"line":8367},[35,90997,2837],{"class":495},[35,90999,91000],{"class":359}," (timer) ",[35,91002,91003],{"class":48},"clearTimeout",[35,91005,91006],{"class":359},"(timer)\n",[35,91008,91009,91012,91014,91017,91019,91021],{"class":37,"line":8379},[35,91010,91011],{"class":359},"        timer ",[35,91013,544],{"class":495},[35,91015,91016],{"class":48}," setTimeout",[35,91018,499],{"class":359},[35,91020,54775],{"class":495},[35,91022,54778],{"class":359},[35,91024,91025,91028,91030],{"class":37,"line":8391},[35,91026,91027],{"class":48},"          fn",[35,91029,13384],{"class":359},[35,91031,91032],{"class":41},"\u002F\u002F加小括号调用fn }, t)\n",[35,91034,91035],{"class":37,"line":10050},[35,91036,91037],{"class":359},"        }, t)\n",[35,91039,91040],{"class":37,"line":10075},[35,91041,52724],{"class":359},[35,91043,91044],{"class":37,"line":10098},[35,91045,2528],{"class":359},[35,91047,91048,91050,91052,91054,91056,91058,91060,91062,91064],{"class":37,"line":10122},[35,91049,90532],{"class":359},[35,91051,58139],{"class":48},[35,91053,499],{"class":359},[35,91055,90539],{"class":306},[35,91057,12769],{"class":359},[35,91059,90545],{"class":48},[35,91061,90548],{"class":359},[35,91063,65400],{"class":58},[35,91065,30823],{"class":359},[35,91067,91068],{"class":37,"line":10127},[35,91069,141],{"emptyLinePlaceholder":140},[35,91071,91072],{"class":37,"line":10132},[35,91073,91074],{"class":41},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[35,91076,91077],{"class":37,"line":10137},[35,91078,91079],{"class":41},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[35,91081,91082],{"class":37,"line":10146},[35,91083,91084],{"class":41},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[35,91086,91087],{"class":37,"line":10151},[35,91088,91089],{"class":41},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[35,91091,91092,91094,91096],{"class":37,"line":10157},[35,91093,52743],{"class":359},[35,91095,52139],{"class":51626},[35,91097,51633],{"class":359},[35,91099,91100,91102,91104],{"class":37,"line":10178},[35,91101,52111],{"class":359},[35,91103,52126],{"class":51626},[35,91105,51633],{"class":359},[35,91107,91108],{"class":37,"line":10184},[35,91109,141],{"emptyLinePlaceholder":140},[35,91111,91112,91114,91116],{"class":37,"line":10198},[35,91113,52111],{"class":359},[35,91115,50961],{"class":51626},[35,91117,51633],{"class":359},[465,91119,91121],{"id":91120},"_4172-节流","4.17.2 节流",[21,91123,91124],{},[1823,91125],{"alt":30,"src":91126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[21,91128,91129],{},[1823,91130],{"alt":30,"src":91131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[21,91133,91134],{},[645,91135,91136],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[21,91138,91139],{},"实现方式：",[1501,91141,91142],{},[17,91143,91144],{},"lodash 提供的节流函数来处理",[21,91146,91147],{},"_.throttle(func,[wait=0],[options=])",[21,91149,91150],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[25,91152,91154],{"className":50959,"code":91153,"language":50961,"meta":30,"style":30},"\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",[32,91155,91156,91166,91180,91184,91192,91206,91226,91238,91246,91252,91262,91274,91286,91296,91308,91318,91328,91340,91344,91352,91360,91364,91372,91390,91408,91416,91434,91444,91452,91462,91466,91470,91474,91479,91484,91505,91513,91521,91525],{"__ignoreMap":30},[35,91157,91158,91160,91162,91164],{"class":37,"line":38},[35,91159,51623],{"class":359},[35,91161,51627],{"class":51626},[35,91163,51630],{"class":48},[35,91165,51633],{"class":359},[35,91167,91168,91170,91172,91174,91176,91178],{"class":37,"line":45},[35,91169,1404],{"class":359},[35,91171,50961],{"class":51626},[35,91173,51642],{"class":48},[35,91175,544],{"class":359},[35,91177,51647],{"class":306},[35,91179,51633],{"class":359},[35,91181,91182],{"class":37,"line":55},[35,91183,141],{"emptyLinePlaceholder":140},[35,91185,91186,91188,91190],{"class":37,"line":65},[35,91187,1404],{"class":359},[35,91189,51660],{"class":51626},[35,91191,51633],{"class":359},[35,91193,91194,91196,91198,91200,91202,91204],{"class":37,"line":74},[35,91195,52470],{"class":359},[35,91197,51670],{"class":51626},[35,91199,51673],{"class":48},[35,91201,544],{"class":359},[35,91203,51678],{"class":306},[35,91205,51633],{"class":359},[35,91207,91208,91210,91212,91214,91216,91218,91220,91222,91224],{"class":37,"line":83},[35,91209,52470],{"class":359},[35,91211,51670],{"class":51626},[35,91213,15254],{"class":48},[35,91215,544],{"class":359},[35,91217,51717],{"class":306},[35,91219,51697],{"class":48},[35,91221,544],{"class":359},[35,91223,51724],{"class":306},[35,91225,51633],{"class":359},[35,91227,91228,91230,91232,91234,91236],{"class":37,"line":92},[35,91229,52470],{"class":359},[35,91231,51733],{"class":51626},[35,91233,51736],{"class":359},[35,91235,51733],{"class":51626},[35,91237,51633],{"class":359},[35,91239,91240,91242,91244],{"class":37,"line":101},[35,91241,52470],{"class":359},[35,91243,416],{"class":51626},[35,91245,51633],{"class":359},[35,91247,91248,91250],{"class":37,"line":110},[35,91249,55078],{"class":48},[35,91251,15906],{"class":359},[35,91253,91254,91256,91258,91260],{"class":37,"line":119},[35,91255,72921],{"class":58},[35,91257,51763],{"class":359},[35,91259,60831],{"class":58},[35,91261,1655],{"class":359},[35,91263,91264,91266,91268,91270,91272],{"class":37,"line":128},[35,91265,55097],{"class":58},[35,91267,51763],{"class":359},[35,91269,2072],{"class":58},[35,91271,51818],{"class":495},[35,91273,1655],{"class":359},[35,91275,91276,91278,91280,91282,91284],{"class":37,"line":137},[35,91277,55111],{"class":58},[35,91279,51763],{"class":359},[35,91281,2072],{"class":58},[35,91283,51818],{"class":495},[35,91285,1655],{"class":359},[35,91287,91288,91290,91292,91294],{"class":37,"line":144},[35,91289,55210],{"class":58},[35,91291,51763],{"class":359},[35,91293,90331],{"class":58},[35,91295,1655],{"class":359},[35,91297,91298,91300,91302,91304,91306],{"class":37,"line":150},[35,91299,55248],{"class":58},[35,91301,51763],{"class":359},[35,91303,1319],{"class":58},[35,91305,51818],{"class":495},[35,91307,1655],{"class":359},[35,91309,91310,91312,91314,91316],{"class":37,"line":159},[35,91311,57742],{"class":58},[35,91313,51763],{"class":359},[35,91315,61168],{"class":58},[35,91317,1655],{"class":359},[35,91319,91320,91322,91324,91326],{"class":37,"line":168},[35,91321,57612],{"class":58},[35,91323,51763],{"class":359},[35,91325,51918],{"class":58},[35,91327,1655],{"class":359},[35,91329,91330,91332,91334,91336,91338],{"class":37,"line":177},[35,91331,90370],{"class":58},[35,91333,51763],{"class":359},[35,91335,372],{"class":58},[35,91337,51818],{"class":495},[35,91339,1655],{"class":359},[35,91341,91342],{"class":37,"line":182},[35,91343,2528],{"class":359},[35,91345,91346,91348,91350],{"class":37,"line":188},[35,91347,52743],{"class":359},[35,91349,416],{"class":51626},[35,91351,51633],{"class":359},[35,91353,91354,91356,91358],{"class":37,"line":197},[35,91355,52111],{"class":359},[35,91357,51660],{"class":51626},[35,91359,51633],{"class":359},[35,91361,91362],{"class":37,"line":206},[35,91363,141],{"emptyLinePlaceholder":140},[35,91365,91366,91368,91370],{"class":37,"line":215},[35,91367,1404],{"class":359},[35,91369,52126],{"class":51626},[35,91371,51633],{"class":359},[35,91373,91374,91376,91378,91380,91382,91384,91386,91388],{"class":37,"line":224},[35,91375,52470],{"class":359},[35,91377,51937],{"class":51626},[35,91379,53812],{"class":48},[35,91381,544],{"class":359},[35,91383,53817],{"class":306},[35,91385,55640],{"class":359},[35,91387,51937],{"class":51626},[35,91389,51633],{"class":359},[35,91391,91392,91394,91396,91398,91400,91402,91404,91406],{"class":37,"line":233},[35,91393,52470],{"class":359},[35,91395,52139],{"class":51626},[35,91397,55565],{"class":48},[35,91399,544],{"class":359},[35,91401,88599],{"class":306},[35,91403,55640],{"class":359},[35,91405,52139],{"class":51626},[35,91407,51633],{"class":359},[35,91409,91410,91412,91414],{"class":37,"line":238},[35,91411,52470],{"class":359},[35,91413,52139],{"class":51626},[35,91415,51633],{"class":359},[35,91417,91418,91420,91422,91424,91426,91428,91430,91432],{"class":37,"line":244},[35,91419,11555],{"class":495},[35,91421,87258],{"class":58},[35,91423,13898],{"class":495},[35,91425,54722],{"class":359},[35,91427,54725],{"class":48},[35,91429,499],{"class":359},[35,91431,90471],{"class":306},[35,91433,505],{"class":359},[35,91435,91436,91438,91440,91442],{"class":37,"line":253},[35,91437,52545],{"class":495},[35,91439,9772],{"class":359},[35,91441,544],{"class":495},[35,91443,47659],{"class":58},[35,91445,91446,91448,91450],{"class":37,"line":262},[35,91447,70410],{"class":495},[35,91449,90490],{"class":48},[35,91451,11187],{"class":359},[35,91453,91454,91456,91458,91460],{"class":37,"line":271},[35,91455,90497],{"class":359},[35,91457,544],{"class":495},[35,91459,3366],{"class":359},[35,91461,3036],{"class":495},[35,91463,91464],{"class":37,"line":280},[35,91465,90508],{"class":41},[35,91467,91468],{"class":37,"line":289},[35,91469,2528],{"class":359},[35,91471,91472],{"class":37,"line":294},[35,91473,90517],{"class":41},[35,91475,91476],{"class":37,"line":300},[35,91477,91478],{"class":41},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[35,91480,91481],{"class":37,"line":313},[35,91482,91483],{"class":41},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[35,91485,91486,91488,91490,91492,91494,91496,91499,91501,91503],{"class":37,"line":324},[35,91487,90532],{"class":359},[35,91489,58139],{"class":48},[35,91491,499],{"class":359},[35,91493,90539],{"class":306},[35,91495,90542],{"class":359},[35,91497,91498],{"class":48},"throttle",[35,91500,90548],{"class":359},[35,91502,65400],{"class":58},[35,91504,30823],{"class":359},[35,91506,91507,91509,91511],{"class":37,"line":2955},[35,91508,52743],{"class":359},[35,91510,52139],{"class":51626},[35,91512,51633],{"class":359},[35,91514,91515,91517,91519],{"class":37,"line":8282},[35,91516,52111],{"class":359},[35,91518,52126],{"class":51626},[35,91520,51633],{"class":359},[35,91522,91523],{"class":37,"line":8306},[35,91524,141],{"emptyLinePlaceholder":140},[35,91526,91527,91529,91531],{"class":37,"line":8311},[35,91528,52111],{"class":359},[35,91530,50961],{"class":51626},[35,91532,51633],{"class":359},[1501,91534,91535],{},[17,91536,91537],{},"手写一个节流函数来处理",[21,91539,71277],{},[21,91541,90591],{},[21,91543,91544],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[21,91546,91547],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[25,91549,91551],{"className":50959,"code":91550,"language":50961,"meta":30,"style":30},"\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",[32,91552,91553,91563,91577,91581,91589,91603,91623,91635,91643,91649,91659,91671,91683,91693,91705,91715,91725,91737,91741,91749,91757,91761,91769,91787,91805,91813,91831,91841,91849,91859,91863,91867,91871,91876,91881,91886,91891,91896,91901,91918,91924,91932,91943,91958,91965,91970,91975,91985,91990,91995,92000,92004,92008,92012,92032,92040,92048,92052],{"__ignoreMap":30},[35,91554,91555,91557,91559,91561],{"class":37,"line":38},[35,91556,51623],{"class":359},[35,91558,51627],{"class":51626},[35,91560,51630],{"class":48},[35,91562,51633],{"class":359},[35,91564,91565,91567,91569,91571,91573,91575],{"class":37,"line":45},[35,91566,1404],{"class":359},[35,91568,50961],{"class":51626},[35,91570,51642],{"class":48},[35,91572,544],{"class":359},[35,91574,51647],{"class":306},[35,91576,51633],{"class":359},[35,91578,91579],{"class":37,"line":55},[35,91580,141],{"emptyLinePlaceholder":140},[35,91582,91583,91585,91587],{"class":37,"line":65},[35,91584,1404],{"class":359},[35,91586,51660],{"class":51626},[35,91588,51633],{"class":359},[35,91590,91591,91593,91595,91597,91599,91601],{"class":37,"line":74},[35,91592,52470],{"class":359},[35,91594,51670],{"class":51626},[35,91596,51673],{"class":48},[35,91598,544],{"class":359},[35,91600,51678],{"class":306},[35,91602,51633],{"class":359},[35,91604,91605,91607,91609,91611,91613,91615,91617,91619,91621],{"class":37,"line":83},[35,91606,52470],{"class":359},[35,91608,51670],{"class":51626},[35,91610,15254],{"class":48},[35,91612,544],{"class":359},[35,91614,51717],{"class":306},[35,91616,51697],{"class":48},[35,91618,544],{"class":359},[35,91620,51724],{"class":306},[35,91622,51633],{"class":359},[35,91624,91625,91627,91629,91631,91633],{"class":37,"line":92},[35,91626,52470],{"class":359},[35,91628,51733],{"class":51626},[35,91630,51736],{"class":359},[35,91632,51733],{"class":51626},[35,91634,51633],{"class":359},[35,91636,91637,91639,91641],{"class":37,"line":101},[35,91638,52470],{"class":359},[35,91640,416],{"class":51626},[35,91642,51633],{"class":359},[35,91644,91645,91647],{"class":37,"line":110},[35,91646,55078],{"class":48},[35,91648,15906],{"class":359},[35,91650,91651,91653,91655,91657],{"class":37,"line":119},[35,91652,72921],{"class":58},[35,91654,51763],{"class":359},[35,91656,60831],{"class":58},[35,91658,1655],{"class":359},[35,91660,91661,91663,91665,91667,91669],{"class":37,"line":128},[35,91662,55097],{"class":58},[35,91664,51763],{"class":359},[35,91666,2072],{"class":58},[35,91668,51818],{"class":495},[35,91670,1655],{"class":359},[35,91672,91673,91675,91677,91679,91681],{"class":37,"line":137},[35,91674,55111],{"class":58},[35,91676,51763],{"class":359},[35,91678,2072],{"class":58},[35,91680,51818],{"class":495},[35,91682,1655],{"class":359},[35,91684,91685,91687,91689,91691],{"class":37,"line":144},[35,91686,55210],{"class":58},[35,91688,51763],{"class":359},[35,91690,90331],{"class":58},[35,91692,1655],{"class":359},[35,91694,91695,91697,91699,91701,91703],{"class":37,"line":150},[35,91696,55248],{"class":58},[35,91698,51763],{"class":359},[35,91700,1319],{"class":58},[35,91702,51818],{"class":495},[35,91704,1655],{"class":359},[35,91706,91707,91709,91711,91713],{"class":37,"line":159},[35,91708,57742],{"class":58},[35,91710,51763],{"class":359},[35,91712,61168],{"class":58},[35,91714,1655],{"class":359},[35,91716,91717,91719,91721,91723],{"class":37,"line":168},[35,91718,57612],{"class":58},[35,91720,51763],{"class":359},[35,91722,51918],{"class":58},[35,91724,1655],{"class":359},[35,91726,91727,91729,91731,91733,91735],{"class":37,"line":177},[35,91728,90370],{"class":58},[35,91730,51763],{"class":359},[35,91732,372],{"class":58},[35,91734,51818],{"class":495},[35,91736,1655],{"class":359},[35,91738,91739],{"class":37,"line":182},[35,91740,2528],{"class":359},[35,91742,91743,91745,91747],{"class":37,"line":188},[35,91744,52743],{"class":359},[35,91746,416],{"class":51626},[35,91748,51633],{"class":359},[35,91750,91751,91753,91755],{"class":37,"line":197},[35,91752,52111],{"class":359},[35,91754,51660],{"class":51626},[35,91756,51633],{"class":359},[35,91758,91759],{"class":37,"line":206},[35,91760,141],{"emptyLinePlaceholder":140},[35,91762,91763,91765,91767],{"class":37,"line":215},[35,91764,1404],{"class":359},[35,91766,52126],{"class":51626},[35,91768,51633],{"class":359},[35,91770,91771,91773,91775,91777,91779,91781,91783,91785],{"class":37,"line":224},[35,91772,52470],{"class":359},[35,91774,51937],{"class":51626},[35,91776,53812],{"class":48},[35,91778,544],{"class":359},[35,91780,53817],{"class":306},[35,91782,55640],{"class":359},[35,91784,51937],{"class":51626},[35,91786,51633],{"class":359},[35,91788,91789,91791,91793,91795,91797,91799,91801,91803],{"class":37,"line":233},[35,91790,52470],{"class":359},[35,91792,52139],{"class":51626},[35,91794,55565],{"class":48},[35,91796,544],{"class":359},[35,91798,88599],{"class":306},[35,91800,55640],{"class":359},[35,91802,52139],{"class":51626},[35,91804,51633],{"class":359},[35,91806,91807,91809,91811],{"class":37,"line":238},[35,91808,52470],{"class":359},[35,91810,52139],{"class":51626},[35,91812,51633],{"class":359},[35,91814,91815,91817,91819,91821,91823,91825,91827,91829],{"class":37,"line":244},[35,91816,11555],{"class":495},[35,91818,87258],{"class":58},[35,91820,13898],{"class":495},[35,91822,54722],{"class":359},[35,91824,54725],{"class":48},[35,91826,499],{"class":359},[35,91828,90471],{"class":306},[35,91830,505],{"class":359},[35,91832,91833,91835,91837,91839],{"class":37,"line":253},[35,91834,52545],{"class":495},[35,91836,9772],{"class":359},[35,91838,544],{"class":495},[35,91840,47659],{"class":58},[35,91842,91843,91845,91847],{"class":37,"line":262},[35,91844,70410],{"class":495},[35,91846,90490],{"class":48},[35,91848,11187],{"class":359},[35,91850,91851,91853,91855,91857],{"class":37,"line":271},[35,91852,90497],{"class":359},[35,91854,544],{"class":495},[35,91856,3366],{"class":359},[35,91858,3036],{"class":495},[35,91860,91861],{"class":37,"line":280},[35,91862,90508],{"class":41},[35,91864,91865],{"class":37,"line":289},[35,91866,2528],{"class":359},[35,91868,91869],{"class":37,"line":294},[35,91870,90517],{"class":41},[35,91872,91873],{"class":37,"line":300},[35,91874,91875],{"class":41},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[35,91877,91878],{"class":37,"line":313},[35,91879,91880],{"class":41},"    \u002F\u002F 1.声明一个定时器变量\n",[35,91882,91883],{"class":37,"line":324},[35,91884,91885],{"class":41},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[35,91887,91888],{"class":37,"line":2955},[35,91889,91890],{"class":41},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[35,91892,91893],{"class":37,"line":8282},[35,91894,91895],{"class":41},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[35,91897,91898],{"class":37,"line":8306},[35,91899,91900],{"class":41},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[35,91902,91903,91905,91908,91910,91912,91914,91916],{"class":37,"line":8311},[35,91904,70410],{"class":495},[35,91906,91907],{"class":48}," throttle",[35,91909,499],{"class":359},[35,91911,90962],{"class":5550},[35,91913,12769],{"class":359},[35,91915,1214],{"class":5550},[35,91917,12776],{"class":359},[35,91919,91920,91922],{"class":37,"line":8317},[35,91921,80097],{"class":495},[35,91923,90975],{"class":359},[35,91925,91926,91928,91930],{"class":37,"line":8344},[35,91927,74307],{"class":495},[35,91929,59244],{"class":495},[35,91931,54778],{"class":359},[35,91933,91934,91936,91938,91940],{"class":37,"line":8349},[35,91935,2837],{"class":495},[35,91937,2012],{"class":359},[35,91939,722],{"class":495},[35,91941,91942],{"class":359},"timer) {\n",[35,91944,91945,91948,91950,91952,91954,91956],{"class":37,"line":8355},[35,91946,91947],{"class":359},"          timer ",[35,91949,544],{"class":495},[35,91951,91016],{"class":48},[35,91953,499],{"class":359},[35,91955,54775],{"class":495},[35,91957,54778],{"class":359},[35,91959,91960,91963],{"class":37,"line":8367},[35,91961,91962],{"class":48},"            fn",[35,91964,2317],{"class":359},[35,91966,91967],{"class":37,"line":8379},[35,91968,91969],{"class":41},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[35,91971,91972],{"class":37,"line":8391},[35,91973,91974],{"class":41},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[35,91976,91977,91980,91982],{"class":37,"line":10050},[35,91978,91979],{"class":359},"            timer ",[35,91981,544],{"class":495},[35,91983,91984],{"class":58}," null\n",[35,91986,91987],{"class":37,"line":10075},[35,91988,91989],{"class":41},"            \u002F\u002F 不能用clearTimeout(timer)\n",[35,91991,91992],{"class":37,"line":10098},[35,91993,91994],{"class":41},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[35,91996,91997],{"class":37,"line":10122},[35,91998,91999],{"class":359},"          }, t)\n",[35,92001,92002],{"class":37,"line":10127},[35,92003,2869],{"class":359},[35,92005,92006],{"class":37,"line":10132},[35,92007,52724],{"class":359},[35,92009,92010],{"class":37,"line":10137},[35,92011,2528],{"class":359},[35,92013,92014,92016,92018,92020,92022,92024,92026,92028,92030],{"class":37,"line":10146},[35,92015,90532],{"class":359},[35,92017,58139],{"class":48},[35,92019,499],{"class":359},[35,92021,90539],{"class":306},[35,92023,12769],{"class":359},[35,92025,91498],{"class":48},[35,92027,90548],{"class":359},[35,92029,65400],{"class":58},[35,92031,30823],{"class":359},[35,92033,92034,92036,92038],{"class":37,"line":10151},[35,92035,52743],{"class":359},[35,92037,52139],{"class":51626},[35,92039,51633],{"class":359},[35,92041,92042,92044,92046],{"class":37,"line":10157},[35,92043,52111],{"class":359},[35,92045,52126],{"class":51626},[35,92047,51633],{"class":359},[35,92049,92050],{"class":37,"line":10178},[35,92051,141],{"emptyLinePlaceholder":140},[35,92053,92054,92056,92058],{"class":37,"line":10184},[35,92055,52111],{"class":359},[35,92057,50961],{"class":51626},[35,92059,51633],{"class":359},[465,92061,92063],{"id":92062},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[25,92065,92067],{"className":53393,"code":92066,"language":53395,"meta":30,"style":30},"\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",[32,92068,92069,92077,92085,92090,92095,92100,92105,92109,92117],{"__ignoreMap":30},[35,92070,92071,92073,92075],{"class":37,"line":38},[35,92072,1404],{"class":359},[35,92074,52126],{"class":51626},[35,92076,51633],{"class":359},[35,92078,92079,92081,92083],{"class":37,"line":45},[35,92080,52470],{"class":359},[35,92082,52139],{"class":51626},[35,92084,51633],{"class":359},[35,92086,92087],{"class":37,"line":55},[35,92088,92089],{"class":359},"    let timer = null\n",[35,92091,92092],{"class":37,"line":65},[35,92093,92094],{"class":359},"    timer = setTimeout(() => {\n",[35,92096,92097],{"class":37,"line":74},[35,92098,92099],{"class":359},"      clearTimeout(timer)\n",[35,92101,92102],{"class":37,"line":83},[35,92103,92104],{"class":359},"      console.log(timer)\n",[35,92106,92107],{"class":37,"line":92},[35,92108,60551],{"class":359},[35,92110,92111,92113,92115],{"class":37,"line":101},[35,92112,52743],{"class":359},[35,92114,52139],{"class":51626},[35,92116,51633],{"class":359},[35,92118,92119,92121,92123],{"class":37,"line":110},[35,92120,52111],{"class":359},[35,92122,52126],{"class":51626},[35,92124,51633],{"class":359},[21,92126,92127],{},"输出为1",[21,92129,92130],{},"在开启的定时器里边写清除定时器",[21,92132,92133],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[465,92135,92137],{"id":92136},"_4174-节流综合案例","4.17.4 节流综合案例",[21,92139,92140],{},"页面打开，可以记录上一次的视频播放位置",[21,92142,92143],{},[1823,92144],{"alt":30,"src":92145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[21,92147,92148],{},[1823,92149],{"alt":30,"src":92150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[25,92152,92154],{"className":50959,"code":92153,"language":50961,"meta":30,"style":30},"\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",[32,92155,92156,92166,92180,92184,92192,92206,92226,92246,92268,92281,92289,92295,92305,92315,92325,92329,92333,92340,92353,92365,92369,92373,92383,92395,92409,92413,92417,92424,92434,92447,92459,92469,92479,92495,92507,92511,92515,92523,92533,92545,92555,92565,92575,92579,92583,92593,92604,92608,92616,92624,92628,92636,92651,92666,92681,92702,92710,92718,92733,92755,92763,92778,92804,92830,92856,92864,92872,92891,92899,92904,92923,92928,92946,92951,92956,92964,92969,92983,92991,92996,93013,93017,93022,93044,93048,93056,93064,93068],{"__ignoreMap":30},[35,92157,92158,92160,92162,92164],{"class":37,"line":38},[35,92159,51623],{"class":359},[35,92161,51627],{"class":51626},[35,92163,51630],{"class":48},[35,92165,51633],{"class":359},[35,92167,92168,92170,92172,92174,92176,92178],{"class":37,"line":45},[35,92169,1404],{"class":359},[35,92171,50961],{"class":51626},[35,92173,51642],{"class":48},[35,92175,544],{"class":359},[35,92177,51647],{"class":306},[35,92179,51633],{"class":359},[35,92181,92182],{"class":37,"line":55},[35,92183,141],{"emptyLinePlaceholder":140},[35,92185,92186,92188,92190],{"class":37,"line":65},[35,92187,1404],{"class":359},[35,92189,51660],{"class":51626},[35,92191,51633],{"class":359},[35,92193,92194,92196,92198,92200,92202,92204],{"class":37,"line":74},[35,92195,52470],{"class":359},[35,92197,51670],{"class":51626},[35,92199,51673],{"class":48},[35,92201,544],{"class":359},[35,92203,51678],{"class":306},[35,92205,59453],{"class":359},[35,92207,92208,92210,92212,92214,92216,92218,92220,92222,92224],{"class":37,"line":83},[35,92209,52470],{"class":359},[35,92211,51670],{"class":51626},[35,92213,51689],{"class":48},[35,92215,544],{"class":359},[35,92217,51694],{"class":306},[35,92219,51697],{"class":48},[35,92221,544],{"class":359},[35,92223,51702],{"class":306},[35,92225,59453],{"class":359},[35,92227,92228,92230,92232,92234,92236,92238,92240,92242,92244],{"class":37,"line":92},[35,92229,52470],{"class":359},[35,92231,51670],{"class":51626},[35,92233,15254],{"class":48},[35,92235,544],{"class":359},[35,92237,51717],{"class":306},[35,92239,51697],{"class":48},[35,92241,544],{"class":359},[35,92243,51724],{"class":306},[35,92245,59453],{"class":359},[35,92247,92248,92250,92252,92254,92256,92259,92261,92263,92266],{"class":37,"line":101},[35,92249,52470],{"class":359},[35,92251,51670],{"class":51626},[35,92253,15254],{"class":48},[35,92255,544],{"class":359},[35,92257,92258],{"class":306},"\"referrer\"",[35,92260,51697],{"class":48},[35,92262,544],{"class":359},[35,92264,92265],{"class":306},"\"never\"",[35,92267,59453],{"class":359},[35,92269,92270,92272,92274,92277,92279],{"class":37,"line":110},[35,92271,52470],{"class":359},[35,92273,51733],{"class":51626},[35,92275,92276],{"class":359},">综合案例\u003C\u002F",[35,92278,51733],{"class":51626},[35,92280,51633],{"class":359},[35,92282,92283,92285,92287],{"class":37,"line":119},[35,92284,52470],{"class":359},[35,92286,416],{"class":51626},[35,92288,51633],{"class":359},[35,92290,92291,92293],{"class":37,"line":128},[35,92292,6737],{"class":51626},[35,92294,15906],{"class":359},[35,92296,92297,92299,92301,92303],{"class":37,"line":137},[35,92298,55021],{"class":58},[35,92300,51763],{"class":359},[35,92302,687],{"class":58},[35,92304,1655],{"class":359},[35,92306,92307,92309,92311,92313],{"class":37,"line":144},[35,92308,55032],{"class":58},[35,92310,51763],{"class":359},[35,92312,687],{"class":58},[35,92314,1655],{"class":359},[35,92316,92317,92319,92321,92323],{"class":37,"line":150},[35,92318,72921],{"class":58},[35,92320,51763],{"class":359},[35,92322,60831],{"class":58},[35,92324,1655],{"class":359},[35,92326,92327],{"class":37,"line":159},[35,92328,2528],{"class":359},[35,92330,92331],{"class":37,"line":168},[35,92332,141],{"emptyLinePlaceholder":140},[35,92334,92335,92338],{"class":37,"line":177},[35,92336,92337],{"class":48},"    .container",[35,92339,15906],{"class":359},[35,92341,92342,92344,92346,92349,92351],{"class":37,"line":182},[35,92343,55097],{"class":58},[35,92345,51763],{"class":359},[35,92347,92348],{"class":58},"1200",[35,92350,51818],{"class":495},[35,92352,1655],{"class":359},[35,92354,92355,92357,92359,92361,92363],{"class":37,"line":188},[35,92356,55032],{"class":58},[35,92358,51763],{"class":359},[35,92360,687],{"class":58},[35,92362,51882],{"class":58},[35,92364,1655],{"class":359},[35,92366,92367],{"class":37,"line":197},[35,92368,2528],{"class":359},[35,92370,92371],{"class":37,"line":206},[35,92372,141],{"emptyLinePlaceholder":140},[35,92374,92375,92378,92381],{"class":37,"line":215},[35,92376,92377],{"class":48},"    .video",[35,92379,92380],{"class":51626}," video",[35,92382,15906],{"class":359},[35,92384,92385,92387,92389,92391,92393],{"class":37,"line":224},[35,92386,55097],{"class":58},[35,92388,51763],{"class":359},[35,92390,807],{"class":58},[35,92392,823],{"class":495},[35,92394,1655],{"class":359},[35,92396,92397,92399,92401,92403,92405,92407],{"class":37,"line":233},[35,92398,55021],{"class":58},[35,92400,51763],{"class":359},[35,92402,1194],{"class":58},[35,92404,51818],{"class":495},[35,92406,4427],{"class":58},[35,92408,1655],{"class":359},[35,92410,92411],{"class":37,"line":238},[35,92412,2528],{"class":359},[35,92414,92415],{"class":37,"line":244},[35,92416,141],{"emptyLinePlaceholder":140},[35,92418,92419,92422],{"class":37,"line":253},[35,92420,92421],{"class":48},"    .elevator",[35,92423,15906],{"class":359},[35,92425,92426,92428,92430,92432],{"class":37,"line":262},[35,92427,55085],{"class":58},[35,92429,51763],{"class":359},[35,92431,86558],{"class":58},[35,92433,1655],{"class":359},[35,92435,92436,92438,92440,92443,92445],{"class":37,"line":271},[35,92437,55273],{"class":58},[35,92439,51763],{"class":359},[35,92441,92442],{"class":58},"280",[35,92444,51818],{"class":495},[35,92446,1655],{"class":359},[35,92448,92449,92451,92453,92455,92457],{"class":37,"line":280},[35,92450,86752],{"class":58},[35,92452,51763],{"class":359},[35,92454,1194],{"class":58},[35,92456,51818],{"class":495},[35,92458,1655],{"class":359},[35,92460,92461,92463,92465,92467],{"class":37,"line":289},[35,92462,86565],{"class":58},[35,92464,51763],{"class":359},[35,92466,86570],{"class":58},[35,92468,1655],{"class":359},[35,92470,92471,92473,92475,92477],{"class":37,"line":294},[35,92472,62047],{"class":58},[35,92474,51763],{"class":359},[35,92476,61168],{"class":58},[35,92478,1655],{"class":359},[35,92480,92481,92483,92485,92487,92489,92491,92493],{"class":37,"line":300},[35,92482,62303],{"class":58},[35,92484,51763],{"class":359},[35,92486,713],{"class":58},[35,92488,51818],{"class":495},[35,92490,51847],{"class":58},[35,92492,62570],{"class":58},[35,92494,1655],{"class":359},[35,92496,92497,92499,92501,92503,92505],{"class":37,"line":313},[35,92498,55097],{"class":58},[35,92500,51763],{"class":359},[35,92502,1401],{"class":58},[35,92504,51818],{"class":495},[35,92506,1655],{"class":359},[35,92508,92509],{"class":37,"line":324},[35,92510,2528],{"class":359},[35,92512,92513],{"class":37,"line":2955},[35,92514,141],{"emptyLinePlaceholder":140},[35,92516,92517,92519,92521],{"class":37,"line":8282},[35,92518,92421],{"class":48},[35,92520,1759],{"class":51626},[35,92522,15906],{"class":359},[35,92524,92525,92527,92529,92531],{"class":37,"line":8306},[35,92526,55335],{"class":58},[35,92528,51763],{"class":359},[35,92530,61195],{"class":58},[35,92532,1655],{"class":359},[35,92534,92535,92537,92539,92541,92543],{"class":37,"line":8311},[35,92536,55021],{"class":58},[35,92538,51763],{"class":359},[35,92540,940],{"class":58},[35,92542,51818],{"class":495},[35,92544,1655],{"class":359},[35,92546,92547,92549,92551,92553],{"class":37,"line":8317},[35,92548,64296],{"class":58},[35,92550,51763],{"class":359},[35,92552,55063],{"class":58},[35,92554,1655],{"class":359},[35,92556,92557,92559,92561,92563],{"class":37,"line":8344},[35,92558,57612],{"class":58},[35,92560,51763],{"class":359},[35,92562,51918],{"class":58},[35,92564,1655],{"class":359},[35,92566,92567,92569,92571,92573],{"class":37,"line":8349},[35,92568,57742],{"class":58},[35,92570,51763],{"class":359},[35,92572,62396],{"class":58},[35,92574,1655],{"class":359},[35,92576,92577],{"class":37,"line":8355},[35,92578,2528],{"class":359},[35,92580,92581],{"class":37,"line":8367},[35,92582,141],{"emptyLinePlaceholder":140},[35,92584,92585,92587,92589,92591],{"class":37,"line":8379},[35,92586,92421],{"class":48},[35,92588,1759],{"class":51626},[35,92590,64350],{"class":48},[35,92592,15906],{"class":359},[35,92594,92595,92597,92599,92602],{"class":37,"line":8391},[35,92596,57742],{"class":58},[35,92598,51763],{"class":359},[35,92600,92601],{"class":58},"#1286ff",[35,92603,1655],{"class":359},[35,92605,92606],{"class":37,"line":10050},[35,92607,2528],{"class":359},[35,92609,92610,92612,92614],{"class":37,"line":10075},[35,92611,52743],{"class":359},[35,92613,416],{"class":51626},[35,92615,51633],{"class":359},[35,92617,92618,92620,92622],{"class":37,"line":10098},[35,92619,52111],{"class":359},[35,92621,51660],{"class":51626},[35,92623,51633],{"class":359},[35,92625,92626],{"class":37,"line":10122},[35,92627,141],{"emptyLinePlaceholder":140},[35,92629,92630,92632,92634],{"class":37,"line":10127},[35,92631,1404],{"class":359},[35,92633,52126],{"class":51626},[35,92635,51633],{"class":359},[35,92637,92638,92640,92642,92644,92646,92649],{"class":37,"line":10132},[35,92639,52470],{"class":359},[35,92641,51937],{"class":51626},[35,92643,53812],{"class":48},[35,92645,544],{"class":359},[35,92647,92648],{"class":306},"\"container\"",[35,92650,51633],{"class":359},[35,92652,92653,92655,92657,92659,92661,92664],{"class":37,"line":10137},[35,92654,51667],{"class":359},[35,92656,51937],{"class":51626},[35,92658,53812],{"class":48},[35,92660,544],{"class":359},[35,92662,92663],{"class":306},"\"header\"",[35,92665,51633],{"class":359},[35,92667,92668,92670,92672,92674,92676,92679],{"class":37,"line":10146},[35,92669,55560],{"class":359},[35,92671,734],{"class":51626},[35,92673,61383],{"class":48},[35,92675,544],{"class":359},[35,92677,92678],{"class":306},"\"http:\u002F\u002Fpip.itcast.cn\"",[35,92680,51633],{"class":359},[35,92682,92683,92685,92687,92689,92691,92694,92696,92698,92700],{"class":37,"line":10151},[35,92684,55628],{"class":359},[35,92686,1823],{"class":51626},[35,92688,55565],{"class":48},[35,92690,544],{"class":359},[35,92692,92693],{"class":306},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[35,92695,55573],{"class":48},[35,92697,544],{"class":359},[35,92699,7986],{"class":306},[35,92701,59453],{"class":359},[35,92703,92704,92706,92708],{"class":37,"line":10157},[35,92705,55733],{"class":359},[35,92707,734],{"class":51626},[35,92709,51633],{"class":359},[35,92711,92712,92714,92716],{"class":37,"line":10178},[35,92713,52102],{"class":359},[35,92715,51937],{"class":51626},[35,92717,51633],{"class":359},[35,92719,92720,92722,92724,92726,92728,92731],{"class":37,"line":10184},[35,92721,51667],{"class":359},[35,92723,51937],{"class":51626},[35,92725,53812],{"class":48},[35,92727,544],{"class":359},[35,92729,92730],{"class":306},"\"video\"",[35,92732,51633],{"class":359},[35,92734,92735,92737,92739,92741,92743,92746,92749,92751,92753],{"class":37,"line":10198},[35,92736,55560],{"class":359},[35,92738,28510],{"class":51626},[35,92740,55565],{"class":48},[35,92742,544],{"class":359},[35,92744,92745],{"class":306},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[35,92747,92748],{"class":48}," controls",[35,92750,55640],{"class":359},[35,92752,28510],{"class":51626},[35,92754,51633],{"class":359},[35,92756,92757,92759,92761],{"class":37,"line":10204},[35,92758,52102],{"class":359},[35,92760,51937],{"class":51626},[35,92762,51633],{"class":359},[35,92764,92765,92767,92769,92771,92773,92776],{"class":37,"line":10231},[35,92766,51667],{"class":359},[35,92768,51937],{"class":51626},[35,92770,53812],{"class":48},[35,92772,544],{"class":359},[35,92774,92775],{"class":306},"\"elevator\"",[35,92777,51633],{"class":359},[35,92779,92780,92782,92784,92786,92788,92790,92793,92795,92797,92800,92802],{"class":37,"line":10240},[35,92781,55560],{"class":359},[35,92783,734],{"class":51626},[35,92785,61383],{"class":48},[35,92787,544],{"class":359},[35,92789,64562],{"class":306},[35,92791,92792],{"class":48}," data-ref",[35,92794,544],{"class":359},[35,92796,92730],{"class":306},[35,92798,92799],{"class":359},">视频介绍\u003C\u002F",[35,92801,734],{"class":51626},[35,92803,51633],{"class":359},[35,92805,92806,92808,92810,92812,92814,92816,92818,92820,92823,92826,92828],{"class":37,"line":10246},[35,92807,55560],{"class":359},[35,92809,734],{"class":51626},[35,92811,61383],{"class":48},[35,92813,544],{"class":359},[35,92815,64562],{"class":306},[35,92817,92792],{"class":48},[35,92819,544],{"class":359},[35,92821,92822],{"class":306},"\"intro\"",[35,92824,92825],{"class":359},">课程简介\u003C\u002F",[35,92827,734],{"class":51626},[35,92829,51633],{"class":359},[35,92831,92832,92834,92836,92838,92840,92842,92844,92846,92849,92852,92854],{"class":37,"line":10254},[35,92833,55560],{"class":359},[35,92835,734],{"class":51626},[35,92837,61383],{"class":48},[35,92839,544],{"class":359},[35,92841,64562],{"class":306},[35,92843,92792],{"class":48},[35,92845,544],{"class":359},[35,92847,92848],{"class":306},"\"outline\"",[35,92850,92851],{"class":359},">评论列表\u003C\u002F",[35,92853,734],{"class":51626},[35,92855,51633],{"class":359},[35,92857,92858,92860,92862],{"class":37,"line":10259},[35,92859,52102],{"class":359},[35,92861,51937],{"class":51626},[35,92863,51633],{"class":359},[35,92865,92866,92868,92870],{"class":37,"line":16938},[35,92867,52743],{"class":359},[35,92869,51937],{"class":51626},[35,92871,51633],{"class":359},[35,92873,92874,92876,92878,92880,92882,92885,92887,92889],{"class":37,"line":16944},[35,92875,52470],{"class":359},[35,92877,52139],{"class":51626},[35,92879,55565],{"class":48},[35,92881,544],{"class":359},[35,92883,92884],{"class":306},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[35,92886,55640],{"class":359},[35,92888,52139],{"class":51626},[35,92890,51633],{"class":359},[35,92892,92893,92895,92897],{"class":37,"line":16967},[35,92894,52470],{"class":359},[35,92896,52139],{"class":51626},[35,92898,51633],{"class":359},[35,92900,92901],{"class":37,"line":16973},[35,92902,92903],{"class":41},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[35,92905,92906,92908,92910,92912,92914,92916,92918,92921],{"class":37,"line":16996},[35,92907,11555],{"class":495},[35,92909,92380],{"class":58},[35,92911,13898],{"class":495},[35,92913,54722],{"class":359},[35,92915,54725],{"class":48},[35,92917,499],{"class":359},[35,92919,92920],{"class":306},"'video'",[35,92922,505],{"class":359},[35,92924,92925],{"class":37,"line":17010},[35,92926,92927],{"class":41},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[35,92929,92930,92933,92935,92937,92939,92942,92944],{"class":37,"line":17030},[35,92931,92932],{"class":359},"    video.ontimeupdate ",[35,92934,544],{"class":495},[35,92936,88680],{"class":359},[35,92938,91498],{"class":48},[35,92940,92941],{"class":359},"(() ",[35,92943,85047],{"class":495},[35,92945,15906],{"class":359},[35,92947,92948],{"class":37,"line":17036},[35,92949,92950],{"class":41},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[35,92952,92953],{"class":37,"line":17047},[35,92954,92955],{"class":41},"      \u002F\u002F 控制台输出当前的时间\n",[35,92957,92958,92961],{"class":37,"line":17070},[35,92959,92960],{"class":41},"      \u002F\u002F console.log(video.currentTime)",[35,92962,92963],{"class":41},"  \u002F\u002F获得当前的视频时间\n",[35,92965,92966],{"class":37,"line":17092},[35,92967,92968],{"class":41},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[35,92970,92971,92973,92975,92977,92980],{"class":37,"line":17097},[35,92972,75008],{"class":359},[35,92974,71979],{"class":48},[35,92976,499],{"class":359},[35,92978,92979],{"class":306},"'currentTime'",[35,92981,92982],{"class":359},", video.currentTime)\n",[35,92984,92985,92987,92989],{"class":37,"line":17103},[35,92986,54861],{"class":359},[35,92988,6744],{"class":58},[35,92990,505],{"class":359},[35,92992,92993],{"class":37,"line":17117},[35,92994,92995],{"class":41},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[35,92997,92998,93001,93004,93006,93009,93011],{"class":37,"line":17130},[35,92999,93000],{"class":359},"    video.",[35,93002,93003],{"class":48},"onloadeddata",[35,93005,13898],{"class":495},[35,93007,93008],{"class":359}," () ",[35,93010,85047],{"class":495},[35,93012,15906],{"class":359},[35,93014,93015],{"class":37,"line":17135},[35,93016,60338],{"class":41},[35,93018,93019],{"class":37,"line":17149},[35,93020,93021],{"class":41},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[35,93023,93024,93027,93029,93032,93034,93036,93038,93040,93042],{"class":37,"line":17154},[35,93025,93026],{"class":359},"      video.currentTime ",[35,93028,544],{"class":495},[35,93030,93031],{"class":359}," localStorage.",[35,93033,72010],{"class":48},[35,93035,499],{"class":359},[35,93037,92979],{"class":306},[35,93039,14048],{"class":359},[35,93041,71682],{"class":495},[35,93043,47659],{"class":58},[35,93045,93046],{"class":37,"line":17160},[35,93047,2528],{"class":359},[35,93049,93050,93052,93054],{"class":37,"line":17165},[35,93051,52743],{"class":359},[35,93053,52139],{"class":51626},[35,93055,51633],{"class":359},[35,93057,93058,93060,93062],{"class":37,"line":17179},[35,93059,52111],{"class":359},[35,93061,52126],{"class":51626},[35,93063,51633],{"class":359},[35,93065,93066],{"class":37,"line":17184},[35,93067,141],{"emptyLinePlaceholder":140},[35,93069,93070,93072,93074],{"class":37,"line":17189},[35,93071,52111],{"class":359},[35,93073,50961],{"class":51626},[35,93075,51633],{"class":359},[416,93077,93078],{},"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":30,"searchDepth":45,"depth":45,"links":93080},[93081,93086,93090,93091,93092,93097,93102,93103,93104,93105,93112,93117,93118,93128,93132,93133,93137],{"id":77016,"depth":45,"text":77017,"children":93082},[93083,93084,93085],{"id":77020,"depth":55,"text":77021},{"id":77045,"depth":55,"text":77046},{"id":77057,"depth":55,"text":77058},{"id":77069,"depth":45,"text":77070,"children":93087},[93088,93089],{"id":77073,"depth":55,"text":77074},{"id":77088,"depth":55,"text":77089},{"id":77140,"depth":45,"text":77141},{"id":77184,"depth":45,"text":77185},{"id":77201,"depth":45,"text":77202,"children":93093},[93094,93095,93096],{"id":77205,"depth":55,"text":77206},{"id":77218,"depth":55,"text":77219},{"id":77323,"depth":55,"text":77324},{"id":77612,"depth":45,"text":77613,"children":93098},[93099,93100,93101],{"id":77616,"depth":55,"text":77617},{"id":78059,"depth":55,"text":78060},{"id":78470,"depth":55,"text":78471},{"id":78533,"depth":45,"text":78534},{"id":78612,"depth":45,"text":78613},{"id":78705,"depth":45,"text":78706},{"id":80550,"depth":45,"text":80551,"children":93106},[93107,93108,93109,93110,93111],{"id":80554,"depth":55,"text":80555},{"id":80566,"depth":55,"text":80567},{"id":80785,"depth":55,"text":80786},{"id":80803,"depth":55,"text":80804},{"id":80863,"depth":55,"text":80864},{"id":85131,"depth":45,"text":85132,"children":93113},[93114,93115,93116],{"id":85135,"depth":55,"text":85136},{"id":85153,"depth":55,"text":85154},{"id":85179,"depth":55,"text":85180},{"id":85188,"depth":45,"text":85189},{"id":85210,"depth":45,"text":85211,"children":93119},[93120,93121,93122,93123,93124,93125,93126,93127],{"id":85214,"depth":55,"text":85215},{"id":85475,"depth":55,"text":85476},{"id":85661,"depth":55,"text":85662},{"id":86028,"depth":55,"text":86029},{"id":86144,"depth":55,"text":86145},{"id":86180,"depth":55,"text":86181},{"id":86227,"depth":55,"text":86228},{"id":86261,"depth":55,"text":86262},{"id":87624,"depth":45,"text":87625,"children":93129},[93130,93131],{"id":87628,"depth":55,"text":87629},{"id":87665,"depth":55,"text":87666},{"id":89020,"depth":45,"text":89021},{"id":89391,"depth":45,"text":89392,"children":93134},[93135,93136],{"id":89395,"depth":55,"text":89396},{"id":89429,"depth":55,"text":89430},{"id":90158,"depth":45,"text":90159,"children":93138},[93139,93140,93141,93142],{"id":90162,"depth":55,"text":90163},{"id":91120,"depth":55,"text":91121},{"id":92062,"depth":55,"text":92063},{"id":92136,"depth":55,"text":92137},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77005,"description":421},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93149,"title":93150,"body":93151,"description":93162,"extension":422,"meta":93163,"navigation":140,"path":93165,"seo":93166,"stem":93167,"__hash__":93168},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93152,"toc":93160},[93153],[21,93154,93155,93156],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[734,93157,93158],{"href":93158,"rel":93159},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24198],{"title":30,"searchDepth":45,"depth":45,"links":93161},[],"三件套第三套学习",{"category":93164},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93150,"description":93162},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93170,"title":93171,"body":93172,"description":421,"extension":422,"meta":93277,"navigation":140,"path":93278,"seo":93279,"stem":93280,"__hash__":93281},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93173,"toc":93272},[93174,93181,93184,93187,93190,93194,93203,93206,93209,93213,93222,93225,93229,93232,93252,93255,93269],[21,93175,93176],{},[734,93177,93180],{"href":93178,"rel":93179},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24198],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93182,93171],{"id":93183},"_1安装",[21,93185,93186],{},"numpy是科学计算基础库,底层是C语言",[21,93188,93189],{},"三种方式：",[438,93191,93193],{"id":93192},"_11-通过pip安装","1.1 通过pip安装",[25,93195,93197],{"className":30704,"code":93196,"language":30706,"meta":30,"style":30},"pip install numpy\n",[32,93198,93199],{"__ignoreMap":30},[35,93200,93201],{"class":37,"line":38},[35,93202,93196],{"class":359},[21,93204,93205],{},"首选方式，自动处理依赖项",[21,93207,93208],{},"在提示系统命令符中使用cmd",[438,93210,93212],{"id":93211},"_12-通过anaconda安装","1.2 通过Anaconda安装",[25,93214,93216],{"className":30704,"code":93215,"language":30706,"meta":30,"style":30},"conda install numpy\n",[32,93217,93218],{"__ignoreMap":30},[35,93219,93220],{"class":37,"line":38},[35,93221,93215],{"class":359},[21,93223,93224],{},"自动解决环境依赖",[438,93226,93228],{"id":93227},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[21,93230,93231],{},"对于Debian\u002FUbuntu",[25,93233,93235],{"className":30704,"code":93234,"language":30706,"meta":30,"style":30},"sudo apt-get install python3-numpy\n",[32,93236,93237],{"__ignoreMap":30},[35,93238,93239,93242,93244,93247,93249],{"class":37,"line":38},[35,93240,93241],{"class":359},"sudo apt",[35,93243,1026],{"class":495},[35,93245,93246],{"class":359},"get install python3",[35,93248,1026],{"class":495},[35,93250,93251],{"class":359},"numpy\n",[21,93253,93254],{},"对于Fedora:",[25,93256,93258],{"className":30704,"code":93257,"language":30706,"meta":30,"style":30},"sudo dnf install python3-numpy\n",[32,93259,93260],{"__ignoreMap":30},[35,93261,93262,93265,93267],{"class":37,"line":38},[35,93263,93264],{"class":359},"sudo dnf install python3",[35,93266,1026],{"class":495},[35,93268,93251],{"class":359},[416,93270,93271],{},"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":30,"searchDepth":45,"depth":45,"links":93273},[93274,93275,93276],{"id":93192,"depth":45,"text":93193},{"id":93211,"depth":45,"text":93212},{"id":93227,"depth":45,"text":93228},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93171,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93283,"title":93284,"body":93285,"description":421,"extension":422,"meta":93398,"navigation":140,"path":93399,"seo":93400,"stem":93401,"__hash__":93402},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93286,"toc":93396},[93287,93290,93293,93296,93299,93302,93305,93308,93311,93314,93390,93393],[10,93288,93284],{"id":93289},"_10算数函数",[21,93291,93292],{},"加减乘除运算跟python基础语法没区别",[21,93294,93295],{},"除了python那种方法外还可以使用函数",[21,93297,93298],{},"加：np.add(a,b)",[21,93300,93301],{},"减：np.subtract(a,b)",[21,93303,93304],{},"乘：np.multiply(a,b)",[21,93306,93307],{},"除：np.divide(a,b) == a\u002Fb",[21,93309,93310],{},"取余：np.mod(a,b) == a%b",[21,93312,93313],{},"必须会的用法：",[25,93315,93317],{"className":30704,"code":93316,"language":30706,"meta":30,"style":30},"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",[32,93318,93319,93341,93362,93372,93385],{"__ignoreMap":30},[35,93320,93321,93323,93325,93328,93330,93333,93335,93337,93339],{"class":37,"line":38},[35,93322,734],{"class":359},[35,93324,544],{"class":495},[35,93326,93327],{"class":359},"np.arange(",[35,93329,914],{"class":58},[35,93331,93332],{"class":359},").reshape(",[35,93334,568],{"class":58},[35,93336,872],{"class":359},[35,93338,568],{"class":58},[35,93340,505],{"class":359},[35,93342,93343,93345,93347,93350,93352,93354,93356,93358,93360],{"class":37,"line":45},[35,93344,759],{"class":359},[35,93346,544],{"class":495},[35,93348,93349],{"class":359},"np.array([",[35,93351,940],{"class":58},[35,93353,872],{"class":359},[35,93355,940],{"class":58},[35,93357,872],{"class":359},[35,93359,940],{"class":58},[35,93361,4991],{"class":359},[35,93363,93364,93367,93369],{"class":37,"line":55},[35,93365,93366],{"class":359},"result",[35,93368,544],{"class":495},[35,93370,93371],{"class":359},"np.empty_like(a)\n",[35,93373,93374,93377,93380,93382],{"class":37,"line":65},[35,93375,93376],{"class":359},"np.add(a,b,",[35,93378,93379],{"class":5550},"out",[35,93381,544],{"class":495},[35,93383,93384],{"class":359},"result)\n",[35,93386,93387],{"class":37,"line":74},[35,93388,93389],{"class":359},"result\n",[21,93391,93392],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[416,93394,93395],{},"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":30,"searchDepth":45,"depth":45,"links":93397},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93284,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93404,"title":93405,"body":93406,"description":421,"extension":422,"meta":94168,"navigation":140,"path":94169,"seo":94170,"stem":94171,"__hash__":94172},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93407,"toc":94155},[93408,93411,93414,93417,93421,93460,93464,93508,93568,93572,93575,93614,93617,93662,93666,93702,93706,93775,93779,93843,93847,93850,93853,93856,93859,93895,93899,93939,93943,94015,94018,94022,94085,94089,94152],[10,93409,93405],{"id":93410},"_11统计函数",[21,93412,93413],{},"sum max min mean",[21,93415,93416],{},"这些有axis参数，可以指定方向",[438,93418,93420],{"id":93419},"_111-sum求和函数","11.1 sum()求和函数",[25,93422,93424],{"className":30704,"code":93423,"language":30706,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[32,93425,93426,93431,93452],{"__ignoreMap":30},[35,93427,93428],{"class":37,"line":38},[35,93429,93430],{"class":41},"#创建一维数组\n",[35,93432,93433,93435,93437,93440,93442,93444,93446,93448,93450],{"class":37,"line":45},[35,93434,734],{"class":359},[35,93436,544],{"class":495},[35,93438,93439],{"class":359},"np.random.randint(",[35,93441,713],{"class":58},[35,93443,872],{"class":359},[35,93445,807],{"class":58},[35,93447,872],{"class":359},[35,93449,1194],{"class":58},[35,93451,505],{"class":359},[35,93453,93454,93457],{"class":37,"line":55},[35,93455,93456],{"class":359},"np.sum(a)",[35,93458,93459],{"class":41},"#求和\n",[438,93461,93463],{"id":93462},"_112-max求最大值函数","11.2 max()求最大值函数",[25,93465,93467],{"className":30704,"code":93466,"language":30706,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[32,93468,93469,93473,93493,93498,93503],{"__ignoreMap":30},[35,93470,93471],{"class":37,"line":38},[35,93472,93430],{"class":41},[35,93474,93475,93477,93479,93481,93483,93485,93487,93489,93491],{"class":37,"line":45},[35,93476,734],{"class":359},[35,93478,544],{"class":495},[35,93480,93439],{"class":359},[35,93482,713],{"class":58},[35,93484,872],{"class":359},[35,93486,807],{"class":58},[35,93488,872],{"class":359},[35,93490,1194],{"class":58},[35,93492,505],{"class":359},[35,93494,93495],{"class":37,"line":55},[35,93496,93497],{"class":359},"np.max(a)\n",[35,93499,93500],{"class":37,"line":65},[35,93501,93502],{"class":41},"#最大索引(求最大元素的索引)arg\n",[35,93504,93505],{"class":37,"line":74},[35,93506,93507],{"class":359},"np.argmax(a)\n",[25,93509,93511],{"className":30704,"code":93510,"language":30706,"meta":30,"style":30},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[32,93512,93513,93534,93554,93558],{"__ignoreMap":30},[35,93514,93515,93517,93519,93522,93524,93526,93528,93530,93532],{"class":37,"line":38},[35,93516,11253],{"class":359},[35,93518,544],{"class":495},[35,93520,93521],{"class":359}," np.array([",[35,93523,713],{"class":58},[35,93525,12769],{"class":359},[35,93527,372],{"class":58},[35,93529,12769],{"class":359},[35,93531,568],{"class":58},[35,93533,4991],{"class":359},[35,93535,93536,93538,93540,93542,93544,93546,93548,93550,93552],{"class":37,"line":45},[35,93537,11279],{"class":359},[35,93539,544],{"class":495},[35,93541,93521],{"class":359},[35,93543,568],{"class":58},[35,93545,12769],{"class":359},[35,93547,574],{"class":58},[35,93549,12769],{"class":359},[35,93551,789],{"class":58},[35,93553,4991],{"class":359},[35,93555,93556],{"class":37,"line":55},[35,93557,141],{"emptyLinePlaceholder":140},[35,93559,93560,93562,93565],{"class":37,"line":65},[35,93561,30741],{"class":58},[35,93563,93564],{"class":359},"(np.maximum(a, b))   ",[35,93566,93567],{"class":41},"# [3 5 4]，每个位置上取较大值\n",[438,93569,93571],{"id":93570},"_113-mean求平均值函数","11.3 mean()求平均值函数",[21,93573,93574],{},"①一维数组：",[25,93576,93578],{"className":30704,"code":93577,"language":30706,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[32,93579,93580,93584,93604,93609],{"__ignoreMap":30},[35,93581,93582],{"class":37,"line":38},[35,93583,93430],{"class":41},[35,93585,93586,93588,93590,93592,93594,93596,93598,93600,93602],{"class":37,"line":45},[35,93587,734],{"class":359},[35,93589,544],{"class":495},[35,93591,93439],{"class":359},[35,93593,713],{"class":58},[35,93595,872],{"class":359},[35,93597,807],{"class":58},[35,93599,872],{"class":359},[35,93601,1194],{"class":58},[35,93603,505],{"class":359},[35,93605,93606],{"class":37,"line":55},[35,93607,93608],{"class":41},"#求平均值\n",[35,93610,93611],{"class":37,"line":65},[35,93612,93613],{"class":359},"np.mean(a)\n",[21,93615,93616],{},"②二维数组",[25,93618,93620],{"className":30704,"code":93619,"language":30706,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[32,93621,93622,93627,93652,93657],{"__ignoreMap":30},[35,93623,93624],{"class":37,"line":38},[35,93625,93626],{"class":41},"#二维数组\n",[35,93628,93629,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650],{"class":37,"line":45},[35,93630,93631],{"class":359},"aa",[35,93633,544],{"class":495},[35,93635,93327],{"class":359},[35,93637,713],{"class":58},[35,93639,872],{"class":359},[35,93641,1017],{"class":58},[35,93643,93332],{"class":359},[35,93645,568],{"class":58},[35,93647,872],{"class":359},[35,93649,789],{"class":58},[35,93651,505],{"class":359},[35,93653,93654],{"class":37,"line":55},[35,93655,93656],{"class":41},"#对数组中的所有数求平均\n",[35,93658,93659],{"class":37,"line":65},[35,93660,93661],{"class":359},"np.mean(aa)\n",[438,93663,93665],{"id":93664},"_114-median求中位数函数","11.4 median()求中位数函数",[25,93667,93669],{"className":30704,"code":93668,"language":30706,"meta":30,"style":30},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[32,93670,93671,93676,93692,93697],{"__ignoreMap":30},[35,93672,93673],{"class":37,"line":38},[35,93674,93675],{"class":41},"#求中位数\n",[35,93677,93678,93680,93682,93684,93686,93688,93690],{"class":37,"line":45},[35,93679,759],{"class":359},[35,93681,544],{"class":495},[35,93683,93327],{"class":359},[35,93685,713],{"class":58},[35,93687,872],{"class":359},[35,93689,940],{"class":58},[35,93691,505],{"class":359},[35,93693,93694],{"class":37,"line":55},[35,93695,93696],{"class":359},"np.median(b)\n",[35,93698,93699],{"class":37,"line":65},[35,93700,93701],{"class":41},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[438,93703,93705],{"id":93704},"_115-power求幂运算函数","11.5 power()求幂运算函数",[25,93707,93709],{"className":30704,"code":93708,"language":30706,"meta":30,"style":30},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[32,93710,93711,93727,93732,93737,93746,93751,93760],{"__ignoreMap":30},[35,93712,93713,93715,93717,93719,93721,93723,93725],{"class":37,"line":38},[35,93714,759],{"class":359},[35,93716,544],{"class":495},[35,93718,93327],{"class":359},[35,93720,713],{"class":58},[35,93722,872],{"class":359},[35,93724,940],{"class":58},[35,93726,505],{"class":359},[35,93728,93729],{"class":37,"line":45},[35,93730,93731],{"class":41},"#幂运算\n",[35,93733,93734],{"class":37,"line":55},[35,93735,93736],{"class":41},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[35,93738,93739,93742,93744],{"class":37,"line":65},[35,93740,93741],{"class":359},"np.power(b,",[35,93743,574],{"class":58},[35,93745,505],{"class":359},[35,93747,93748],{"class":37,"line":74},[35,93749,93750],{"class":41},"#或者以下代码，将数据存储起来\n",[35,93752,93753,93755,93757],{"class":37,"line":83},[35,93754,1339],{"class":359},[35,93756,544],{"class":495},[35,93758,93759],{"class":359},"np.empty_like(b)\n",[35,93761,93762,93764,93766,93768,93770,93772],{"class":37,"line":92},[35,93763,93741],{"class":359},[35,93765,574],{"class":58},[35,93767,872],{"class":359},[35,93769,93379],{"class":5550},[35,93771,544],{"class":495},[35,93773,93774],{"class":359},"y)\n",[438,93776,93778],{"id":93777},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[25,93780,93782],{"className":30704,"code":93781,"language":30706,"meta":30,"style":30},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[32,93783,93784,93800,93805,93810,93814,93832],{"__ignoreMap":30},[35,93785,93786,93788,93790,93792,93794,93796,93798],{"class":37,"line":38},[35,93787,759],{"class":359},[35,93789,544],{"class":495},[35,93791,93327],{"class":359},[35,93793,713],{"class":58},[35,93795,872],{"class":359},[35,93797,940],{"class":58},[35,93799,505],{"class":359},[35,93801,93802],{"class":37,"line":45},[35,93803,93804],{"class":41},"#开方\n",[35,93806,93807],{"class":37,"line":55},[35,93808,93809],{"class":359},"np.sqrt(b)\n",[35,93811,93812],{"class":37,"line":65},[35,93813,93750],{"class":41},[35,93815,93816,93818,93820,93823,93826,93828,93830],{"class":37,"line":74},[35,93817,1339],{"class":359},[35,93819,544],{"class":495},[35,93821,93822],{"class":359},"np.empty_like(b,",[35,93824,93825],{"class":5550},"dtype",[35,93827,544],{"class":495},[35,93829,538],{"class":58},[35,93831,505],{"class":359},[35,93833,93834,93837,93839,93841],{"class":37,"line":83},[35,93835,93836],{"class":359},"np.sqrt(b,",[35,93838,93379],{"class":5550},[35,93840,544],{"class":495},[35,93842,93774],{"class":359},[438,93844,93846],{"id":93845},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[21,93848,93849],{},"对数组中的元素累计求和，可指定轴",[21,93851,93852],{},"#累计求和的意思是：",[21,93854,93855],{},"a = np.array([1, 2, 3, 4])",[21,93857,93858],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[25,93860,93862],{"className":30704,"code":93861,"language":30706,"meta":30,"style":30},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[32,93863,93864,93880,93885,93890],{"__ignoreMap":30},[35,93865,93866,93868,93870,93872,93874,93876,93878],{"class":37,"line":38},[35,93867,759],{"class":359},[35,93869,544],{"class":495},[35,93871,93327],{"class":359},[35,93873,713],{"class":58},[35,93875,872],{"class":359},[35,93877,940],{"class":58},[35,93879,505],{"class":359},[35,93881,93882],{"class":37,"line":45},[35,93883,93884],{"class":359},"np.cumsum(b)\n",[35,93886,93887],{"class":37,"line":55},[35,93888,93889],{"class":41},"#结果：\n",[35,93891,93892],{"class":37,"line":65},[35,93893,93894],{"class":41},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[438,93896,93898],{"id":93897},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[25,93900,93902],{"className":30704,"code":93901,"language":30706,"meta":30,"style":30},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[32,93903,93904,93920,93925,93930,93934],{"__ignoreMap":30},[35,93905,93906,93908,93910,93912,93914,93916,93918],{"class":37,"line":38},[35,93907,759],{"class":359},[35,93909,544],{"class":495},[35,93911,93327],{"class":359},[35,93913,713],{"class":58},[35,93915,872],{"class":359},[35,93917,940],{"class":58},[35,93919,505],{"class":359},[35,93921,93922],{"class":37,"line":45},[35,93923,93924],{"class":41},"#对数组中的元素累计求积，可指定轴\n",[35,93926,93927],{"class":37,"line":55},[35,93928,93929],{"class":359},"np.cumprod(b)\n",[35,93931,93932],{"class":37,"line":65},[35,93933,93889],{"class":41},[35,93935,93936],{"class":37,"line":74},[35,93937,93938],{"class":41},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[438,93940,93942],{"id":93941},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[25,93944,93946],{"className":30704,"code":93945,"language":30706,"meta":30,"style":30},"#删除数组中的重复数据，并对数据进行排序\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",[32,93947,93948,93953,94001,94006,94010],{"__ignoreMap":30},[35,93949,93950],{"class":37,"line":38},[35,93951,93952],{"class":41},"#删除数组中的重复数据，并对数据进行排序\n",[35,93954,93955,93957,93959,93961,93963,93965,93967,93969,93971,93973,93975,93977,93979,93981,93983,93985,93987,93989,93991,93993,93995,93997,93999],{"class":37,"line":45},[35,93956,734],{"class":359},[35,93958,544],{"class":495},[35,93960,93349],{"class":359},[35,93962,713],{"class":58},[35,93964,872],{"class":359},[35,93966,574],{"class":58},[35,93968,872],{"class":359},[35,93970,568],{"class":58},[35,93972,872],{"class":359},[35,93974,992],{"class":58},[35,93976,872],{"class":359},[35,93978,568],{"class":58},[35,93980,872],{"class":359},[35,93982,940],{"class":58},[35,93984,872],{"class":359},[35,93986,693],{"class":58},[35,93988,872],{"class":359},[35,93990,687],{"class":58},[35,93992,872],{"class":359},[35,93994,1269],{"class":58},[35,93996,872],{"class":359},[35,93998,789],{"class":58},[35,94000,4991],{"class":359},[35,94002,94003],{"class":37,"line":55},[35,94004,94005],{"class":359},"np.unique(a)\n",[35,94007,94008],{"class":37,"line":65},[35,94009,93889],{"class":41},[35,94011,94012],{"class":37,"line":74},[35,94013,94014],{"class":41},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[21,94016,94017],{},"升序形式排序",[438,94019,94021],{"id":94020},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[25,94023,94025],{"className":30704,"code":94024,"language":30706,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[32,94026,94027,94075,94080],{"__ignoreMap":30},[35,94028,94029,94031,94033,94035,94037,94039,94041,94043,94045,94047,94049,94051,94053,94055,94057,94059,94061,94063,94065,94067,94069,94071,94073],{"class":37,"line":38},[35,94030,734],{"class":359},[35,94032,544],{"class":495},[35,94034,93349],{"class":359},[35,94036,713],{"class":58},[35,94038,872],{"class":359},[35,94040,574],{"class":58},[35,94042,872],{"class":359},[35,94044,568],{"class":58},[35,94046,872],{"class":359},[35,94048,992],{"class":58},[35,94050,872],{"class":359},[35,94052,568],{"class":58},[35,94054,872],{"class":359},[35,94056,940],{"class":58},[35,94058,872],{"class":359},[35,94060,693],{"class":58},[35,94062,872],{"class":359},[35,94064,687],{"class":58},[35,94066,872],{"class":359},[35,94068,1269],{"class":58},[35,94070,872],{"class":359},[35,94072,789],{"class":58},[35,94074,4991],{"class":359},[35,94076,94077],{"class":37,"line":45},[35,94078,94079],{"class":41},"#返回数组中非零元素的索引\n",[35,94081,94082],{"class":37,"line":55},[35,94083,94084],{"class":359},"np.nonzero(a)\n",[438,94086,94088],{"id":94087},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[25,94090,94092],{"className":30704,"code":94091,"language":30706,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[32,94093,94094,94142,94147],{"__ignoreMap":30},[35,94095,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128,94130,94132,94134,94136,94138,94140],{"class":37,"line":38},[35,94097,734],{"class":359},[35,94099,544],{"class":495},[35,94101,93349],{"class":359},[35,94103,713],{"class":58},[35,94105,872],{"class":359},[35,94107,574],{"class":58},[35,94109,872],{"class":359},[35,94111,568],{"class":58},[35,94113,872],{"class":359},[35,94115,992],{"class":58},[35,94117,872],{"class":359},[35,94119,568],{"class":58},[35,94121,872],{"class":359},[35,94123,940],{"class":58},[35,94125,872],{"class":359},[35,94127,693],{"class":58},[35,94129,872],{"class":359},[35,94131,687],{"class":58},[35,94133,872],{"class":359},[35,94135,1269],{"class":58},[35,94137,872],{"class":359},[35,94139,789],{"class":58},[35,94141,4991],{"class":359},[35,94143,94144],{"class":37,"line":45},[35,94145,94146],{"class":41},"#计算一组数中最大值与最小值的差，可指定轴\n",[35,94148,94149],{"class":37,"line":55},[35,94150,94151],{"class":359},"np.ptp(a)\n",[416,94153,94154],{},"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":30,"searchDepth":45,"depth":45,"links":94156},[94157,94158,94159,94160,94161,94162,94163,94164,94165,94166,94167],{"id":93419,"depth":45,"text":93420},{"id":93462,"depth":45,"text":93463},{"id":93570,"depth":45,"text":93571},{"id":93664,"depth":45,"text":93665},{"id":93704,"depth":45,"text":93705},{"id":93777,"depth":45,"text":93778},{"id":93845,"depth":45,"text":93846},{"id":93897,"depth":45,"text":93898},{"id":93941,"depth":45,"text":93942},{"id":94020,"depth":45,"text":94021},{"id":94087,"depth":45,"text":94088},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93405,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94174,"title":94175,"body":94176,"description":421,"extension":422,"meta":94831,"navigation":140,"path":94832,"seo":94833,"stem":94834,"__hash__":94835},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94177,"toc":94819},[94178,94181,94185,94188,94404,94408,94411,94620,94624,94690,94695,94699,94702,94705,94743,94747,94750,94755,94759,94762,94765,94770,94774,94777,94781,94784,94787,94792,94796,94799,94802,94807,94811,94816],[10,94179,94175],{"id":94180},"_12其他常用函数",[438,94182,94184],{"id":94183},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[21,94186,94187],{},"将数组的数据按照行列复制扩展",[25,94189,94191],{"className":30704,"code":94190,"language":30706,"meta":30,"style":30},"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",[32,94192,94193,94209,94218,94222,94227,94232,94245,94249,94254,94259,94264,94268,94273,94297,94309,94313,94317,94322,94327,94332,94337,94341,94354,94358,94362,94367,94372,94377,94382,94387,94391,94395,94400],{"__ignoreMap":30},[35,94194,94195,94197,94199,94201,94203,94205,94207],{"class":37,"line":38},[35,94196,734],{"class":359},[35,94198,544],{"class":495},[35,94200,93327],{"class":359},[35,94202,713],{"class":58},[35,94204,872],{"class":359},[35,94206,372],{"class":58},[35,94208,505],{"class":359},[35,94210,94211,94214,94216],{"class":37,"line":45},[35,94212,94213],{"class":359},"np.tile(a,",[35,94215,574],{"class":58},[35,94217,505],{"class":359},[35,94219,94220],{"class":37,"line":55},[35,94221,93889],{"class":41},[35,94223,94224],{"class":37,"line":65},[35,94225,94226],{"class":41},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[35,94228,94229],{"class":37,"line":74},[35,94230,94231],{"class":41},"#行复制两次，列复制三次\n",[35,94233,94234,94237,94239,94241,94243],{"class":37,"line":83},[35,94235,94236],{"class":359},"np.tile(a,(",[35,94238,574],{"class":58},[35,94240,872],{"class":359},[35,94242,568],{"class":58},[35,94244,30823],{"class":359},[35,94246,94247],{"class":37,"line":92},[35,94248,93889],{"class":41},[35,94250,94251],{"class":37,"line":101},[35,94252,94253],{"class":306},"'''\n",[35,94255,94256],{"class":37,"line":110},[35,94257,94258],{"class":306},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[35,94260,94261],{"class":37,"line":119},[35,94262,94263],{"class":306},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[35,94265,94266],{"class":37,"line":128},[35,94267,94253],{"class":306},[35,94269,94270],{"class":37,"line":137},[35,94271,94272],{"class":41},"#创建二维数组\n",[35,94274,94275,94277,94279,94281,94283,94285,94287,94289,94291,94293,94295],{"class":37,"line":144},[35,94276,93631],{"class":359},[35,94278,544],{"class":495},[35,94280,93327],{"class":359},[35,94282,713],{"class":58},[35,94284,872],{"class":359},[35,94286,1017],{"class":58},[35,94288,93332],{"class":359},[35,94290,789],{"class":58},[35,94292,872],{"class":359},[35,94294,568],{"class":58},[35,94296,505],{"class":359},[35,94298,94299,94302,94304,94306],{"class":37,"line":150},[35,94300,94301],{"class":359},"np.tile(aa,",[35,94303,574],{"class":58},[35,94305,923],{"class":359},[35,94307,94308],{"class":41},"#一个数的时候就是行\n",[35,94310,94311],{"class":37,"line":159},[35,94312,93889],{"class":41},[35,94314,94315],{"class":37,"line":168},[35,94316,94253],{"class":306},[35,94318,94319],{"class":37,"line":177},[35,94320,94321],{"class":306},"array([[ 1,  2,  3,  1,  2,  3],\n",[35,94323,94324],{"class":37,"line":182},[35,94325,94326],{"class":306},"       [ 4,  5,  6,  4,  5,  6],\n",[35,94328,94329],{"class":37,"line":188},[35,94330,94331],{"class":306},"       [ 7,  8,  9,  7,  8,  9],\n",[35,94333,94334],{"class":37,"line":197},[35,94335,94336],{"class":306},"       [10, 11, 12, 10, 11, 12]])\n",[35,94338,94339],{"class":37,"line":206},[35,94340,94253],{"class":306},[35,94342,94343,94346,94348,94350,94352],{"class":37,"line":215},[35,94344,94345],{"class":359},"np.tile(aa,(",[35,94347,574],{"class":58},[35,94349,872],{"class":359},[35,94351,568],{"class":58},[35,94353,30823],{"class":359},[35,94355,94356],{"class":37,"line":224},[35,94357,93889],{"class":41},[35,94359,94360],{"class":37,"line":233},[35,94361,94253],{"class":306},[35,94363,94364],{"class":37,"line":238},[35,94365,94366],{"class":306},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[35,94368,94369],{"class":37,"line":244},[35,94370,94371],{"class":306},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[35,94373,94374],{"class":37,"line":253},[35,94375,94376],{"class":306},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[35,94378,94379],{"class":37,"line":262},[35,94380,94381],{"class":306},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[35,94383,94384],{"class":37,"line":271},[35,94385,94386],{"class":306},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[35,94388,94389],{"class":37,"line":280},[35,94390,94371],{"class":306},[35,94392,94393],{"class":37,"line":289},[35,94394,94376],{"class":306},[35,94396,94397],{"class":37,"line":294},[35,94398,94399],{"class":306},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[35,94401,94402],{"class":37,"line":300},[35,94403,94253],{"class":306},[438,94405,94407],{"id":94406},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[21,94409,94410],{},"repeat()将数组中的每个元素重复若干次",[25,94412,94414],{"className":30704,"code":94413,"language":30706,"meta":30,"style":30},"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",[32,94415,94416,94432,94441,94445,94450,94474,94479,94488,94492,94497,94501,94506,94522,94526,94530,94535,94540,94545,94549,94554,94558,94563,94568,94572,94588,94592,94596,94601,94606,94611,94616],{"__ignoreMap":30},[35,94417,94418,94420,94422,94424,94426,94428,94430],{"class":37,"line":38},[35,94419,734],{"class":359},[35,94421,544],{"class":495},[35,94423,93327],{"class":359},[35,94425,713],{"class":58},[35,94427,872],{"class":359},[35,94429,372],{"class":58},[35,94431,505],{"class":359},[35,94433,94434,94437,94439],{"class":37,"line":45},[35,94435,94436],{"class":359},"np.repeat(a,",[35,94438,568],{"class":58},[35,94440,505],{"class":359},[35,94442,94443],{"class":37,"line":55},[35,94444,93889],{"class":41},[35,94446,94447],{"class":37,"line":65},[35,94448,94449],{"class":41},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[35,94451,94452,94454,94456,94458,94460,94462,94464,94466,94468,94470,94472],{"class":37,"line":74},[35,94453,93631],{"class":359},[35,94455,544],{"class":495},[35,94457,93327],{"class":359},[35,94459,713],{"class":58},[35,94461,872],{"class":359},[35,94463,1017],{"class":58},[35,94465,93332],{"class":359},[35,94467,789],{"class":58},[35,94469,872],{"class":359},[35,94471,568],{"class":58},[35,94473,505],{"class":359},[35,94475,94476],{"class":37,"line":83},[35,94477,94478],{"class":41},"#这个重复之后二维变成一维\n",[35,94480,94481,94484,94486],{"class":37,"line":92},[35,94482,94483],{"class":359},"np.repeat(aa,",[35,94485,574],{"class":58},[35,94487,505],{"class":359},[35,94489,94490],{"class":37,"line":101},[35,94491,94253],{"class":306},[35,94493,94494],{"class":37,"line":110},[35,94495,94496],{"class":306},"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",[35,94498,94499],{"class":37,"line":119},[35,94500,94253],{"class":306},[35,94502,94503],{"class":37,"line":128},[35,94504,94505],{"class":41},"#指定axis\n",[35,94507,94508,94510,94512,94514,94516,94518,94520],{"class":37,"line":137},[35,94509,94483],{"class":359},[35,94511,574],{"class":58},[35,94513,872],{"class":359},[35,94515,47840],{"class":5550},[35,94517,544],{"class":495},[35,94519,687],{"class":58},[35,94521,505],{"class":359},[35,94523,94524],{"class":37,"line":144},[35,94525,93889],{"class":41},[35,94527,94528],{"class":37,"line":150},[35,94529,94253],{"class":306},[35,94531,94532],{"class":37,"line":159},[35,94533,94534],{"class":306},"array([[ 1,  2,  3],\n",[35,94536,94537],{"class":37,"line":168},[35,94538,94539],{"class":306},"       [ 1,  2,  3],\n",[35,94541,94542],{"class":37,"line":177},[35,94543,94544],{"class":306},"       [ 4,  5,  6],\n",[35,94546,94547],{"class":37,"line":182},[35,94548,94544],{"class":306},[35,94550,94551],{"class":37,"line":188},[35,94552,94553],{"class":306},"       [ 7,  8,  9],\n",[35,94555,94556],{"class":37,"line":197},[35,94557,94553],{"class":306},[35,94559,94560],{"class":37,"line":206},[35,94561,94562],{"class":306},"       [10, 11, 12],\n",[35,94564,94565],{"class":37,"line":215},[35,94566,94567],{"class":306},"       [10, 11, 12]])\n",[35,94569,94570],{"class":37,"line":224},[35,94571,94253],{"class":306},[35,94573,94574,94576,94578,94580,94582,94584,94586],{"class":37,"line":233},[35,94575,94483],{"class":359},[35,94577,574],{"class":58},[35,94579,872],{"class":359},[35,94581,47840],{"class":5550},[35,94583,544],{"class":495},[35,94585,713],{"class":58},[35,94587,505],{"class":359},[35,94589,94590],{"class":37,"line":238},[35,94591,93889],{"class":41},[35,94593,94594],{"class":37,"line":244},[35,94595,94253],{"class":306},[35,94597,94598],{"class":37,"line":253},[35,94599,94600],{"class":306},"array([[ 1,  1,  2,  2,  3,  3],\n",[35,94602,94603],{"class":37,"line":262},[35,94604,94605],{"class":306},"       [ 4,  4,  5,  5,  6,  6],\n",[35,94607,94608],{"class":37,"line":271},[35,94609,94610],{"class":306},"       [ 7,  7,  8,  8,  9,  9],\n",[35,94612,94613],{"class":37,"line":280},[35,94614,94615],{"class":306},"       [10, 10, 11, 11, 12, 12]])\n",[35,94617,94618],{"class":37,"line":289},[35,94619,94253],{"class":306},[438,94621,94623],{"id":94622},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[25,94625,94627],{"className":30704,"code":94626,"language":30706,"meta":30,"style":30},"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",[32,94628,94629,94645,94650,94662,94666,94671,94681,94685],{"__ignoreMap":30},[35,94630,94631,94633,94635,94637,94639,94641,94643],{"class":37,"line":38},[35,94632,734],{"class":359},[35,94634,544],{"class":495},[35,94636,93327],{"class":359},[35,94638,713],{"class":58},[35,94640,872],{"class":359},[35,94642,372],{"class":58},[35,94644,505],{"class":359},[35,94646,94647],{"class":37,"line":45},[35,94648,94649],{"class":41},"#array([，2，3，4])\n",[35,94651,94652,94655,94657,94659],{"class":37,"line":55},[35,94653,94654],{"class":359},"np.roll(a,",[35,94656,574],{"class":58},[35,94658,923],{"class":359},[35,94660,94661],{"class":41},"#传正数向后调多少位，传负数向前调多少位\n",[35,94663,94664],{"class":37,"line":65},[35,94665,93889],{"class":41},[35,94667,94668],{"class":37,"line":74},[35,94669,94670],{"class":41},"#array([3, 4, 1, 2])\n",[35,94672,94673,94675,94677,94679],{"class":37,"line":83},[35,94674,94654],{"class":359},[35,94676,1026],{"class":495},[35,94678,713],{"class":58},[35,94680,505],{"class":359},[35,94682,94683],{"class":37,"line":92},[35,94684,93889],{"class":41},[35,94686,94687],{"class":37,"line":101},[35,94688,94689],{"class":41},"#array([2, 3, 4, 1])\n",[21,94691,94692],{},[1823,94693],{"alt":30,"src":94694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[438,94696,94698],{"id":94697},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[21,94700,94701],{},"resize()重新调整数组的大小",[21,94703,94704],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[25,94706,94708],{"className":30704,"code":94707,"language":30706,"meta":30,"style":30},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[32,94709,94710,94715,94728],{"__ignoreMap":30},[35,94711,94712],{"class":37,"line":38},[35,94713,94714],{"class":41},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[35,94716,94717,94720,94722,94724,94726],{"class":37,"line":45},[35,94718,94719],{"class":359},"np.resize(aa,(",[35,94721,574],{"class":58},[35,94723,872],{"class":359},[35,94725,408],{"class":58},[35,94727,30823],{"class":359},[35,94729,94730,94732,94734,94736,94738,94740],{"class":37,"line":55},[35,94731,94719],{"class":359},[35,94733,574],{"class":58},[35,94735,872],{"class":359},[35,94737,914],{"class":58},[35,94739,83096],{"class":359},[35,94741,94742],{"class":41},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[438,94744,94746],{"id":94745},"_125-placeput函数","12.5 place()\u002Fput()函数",[21,94748,94749],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[21,94751,94752],{},[1823,94753],{"alt":30,"src":94754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[438,94756,94758],{"id":94757},"_126-保存加载文件","12.6 保存加载文件",[21,94760,94761],{},"savetxt():将数据保存到txt文件中",[21,94763,94764],{},"loadtxt():从文件加载数据",[21,94766,94767],{},[1823,94768],{"alt":30,"src":94769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[438,94771,94773],{"id":94772},"_127-genfromtxt函数","12.7 genfromtxt()函数",[21,94775,94776],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[438,94778,94780],{"id":94779},"_128-anyall函数","12.8 any()\u002Fall()函数",[21,94782,94783],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[21,94785,94786],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[21,94788,94789],{},[1823,94790],{"alt":30,"src":94791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[438,94793,94795],{"id":94794},"_129-where语句","12.9 where语句",[21,94797,94798],{},"np.where(条件,x,y)",[21,94800,94801],{},"如果条件为True,对应值为x,否则对应值为y",[21,94803,94804],{},[1823,94805],{"alt":30,"src":94806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[438,94808,94810],{"id":94809},"_1210-dot矩阵","12.10 dot()矩阵",[21,94812,94813],{},[1823,94814],{"alt":30,"src":94815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[416,94817,94818],{},"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":30,"searchDepth":45,"depth":45,"links":94820},[94821,94822,94823,94824,94825,94826,94827,94828,94829,94830],{"id":94183,"depth":45,"text":94184},{"id":94406,"depth":45,"text":94407},{"id":94622,"depth":45,"text":94623},{"id":94697,"depth":45,"text":94698},{"id":94745,"depth":45,"text":94746},{"id":94757,"depth":45,"text":94758},{"id":94772,"depth":45,"text":94773},{"id":94779,"depth":45,"text":94780},{"id":94794,"depth":45,"text":94795},{"id":94809,"depth":45,"text":94810},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94175,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94837,"title":94838,"body":94839,"description":421,"extension":422,"meta":95192,"navigation":140,"path":95193,"seo":95194,"stem":95195,"__hash__":95196},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94840,"toc":95190},[94841,94844,94847,94850,94853,94856,94921,94923,95187],[10,94842,94838],{"id":94843},"_13数组排序",[21,94845,94846],{},"排序主要用到的方法是np.sort和np.argsort",[21,94848,94849],{},"其中np.sort()对数组直接排序",[21,94851,94852],{},"而np.argsort()是返回排序后的原始索引",[21,94854,94855],{},"①一维数组",[25,94857,94859],{"className":30704,"code":94858,"language":30706,"meta":30,"style":30},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[32,94860,94861,94865,94905,94913],{"__ignoreMap":30},[35,94862,94863],{"class":37,"line":38},[35,94864,93430],{"class":41},[35,94866,94867,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887,94889,94891,94893,94895,94897,94899,94901,94903],{"class":37,"line":45},[35,94868,734],{"class":359},[35,94870,544],{"class":495},[35,94872,93349],{"class":359},[35,94874,568],{"class":58},[35,94876,872],{"class":359},[35,94878,992],{"class":58},[35,94880,872],{"class":359},[35,94882,889],{"class":58},[35,94884,872],{"class":359},[35,94886,1269],{"class":58},[35,94888,872],{"class":359},[35,94890,775],{"class":58},[35,94892,872],{"class":359},[35,94894,1387],{"class":58},[35,94896,872],{"class":359},[35,94898,408],{"class":58},[35,94900,872],{"class":359},[35,94902,940],{"class":58},[35,94904,4991],{"class":359},[35,94906,94907,94910],{"class":37,"line":55},[35,94908,94909],{"class":359},"np.sort(a)",[35,94911,94912],{"class":41},"#升序排序\n",[35,94914,94915,94918],{"class":37,"line":65},[35,94916,94917],{"class":359},"np.argsort(a)",[35,94919,94920],{"class":41},"#按照元素大小来索引排序\n",[21,94922,93616],{},[25,94924,94926],{"className":30704,"code":94925,"language":30706,"meta":30,"style":30},"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",[32,94927,94928,94940,94966,94971,94975,94980,94985,94990,94995,94999,95007,95011,95016,95021,95026,95031,95035,95040,95053,95057,95062,95067,95072,95077,95081,95086,95098,95102,95106,95110,95114,95118,95122,95127,95142,95147,95156,95161,95165,95169,95174,95178,95183],{"__ignoreMap":30},[35,94929,94930,94933,94935,94937],{"class":37,"line":38},[35,94931,94932],{"class":359},"np.random.seed(",[35,94934,687],{"class":58},[35,94936,923],{"class":359},[35,94938,94939],{"class":41},"#保证每次值一样\n",[35,94941,94942,94944,94946,94948,94950,94952,94954,94956,94958,94960,94962,94964],{"class":37,"line":45},[35,94943,93631],{"class":359},[35,94945,544],{"class":495},[35,94947,93439],{"class":359},[35,94949,807],{"class":58},[35,94951,872],{"class":359},[35,94953,31822],{"class":5550},[35,94955,544],{"class":495},[35,94957,499],{"class":359},[35,94959,789],{"class":58},[35,94961,872],{"class":359},[35,94963,408],{"class":58},[35,94965,30823],{"class":359},[35,94967,94968],{"class":37,"line":55},[35,94969,94970],{"class":41},"#原数组：\n",[35,94972,94973],{"class":37,"line":65},[35,94974,94253],{"class":306},[35,94976,94977],{"class":37,"line":74},[35,94978,94979],{"class":306},"array([[44, 47, 64, 67, 67,  9],\n",[35,94981,94982],{"class":37,"line":83},[35,94983,94984],{"class":306},"       [83, 21, 36, 87, 70, 88],\n",[35,94986,94987],{"class":37,"line":92},[35,94988,94989],{"class":306},"       [88, 12, 58, 65, 39, 87],\n",[35,94991,94992],{"class":37,"line":101},[35,94993,94994],{"class":306},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[35,94996,94997],{"class":37,"line":110},[35,94998,94253],{"class":306},[35,95000,95001,95004],{"class":37,"line":119},[35,95002,95003],{"class":359},"np.sort(aa)",[35,95005,95006],{"class":41},"#每行进行了排序\n",[35,95008,95009],{"class":37,"line":128},[35,95010,94253],{"class":306},[35,95012,95013],{"class":37,"line":137},[35,95014,95015],{"class":306},"array([[ 9, 44, 47, 64, 67, 67],\n",[35,95017,95018],{"class":37,"line":144},[35,95019,95020],{"class":306},"       [21, 36, 70, 83, 87, 88],\n",[35,95022,95023],{"class":37,"line":150},[35,95024,95025],{"class":306},"       [12, 39, 58, 65, 87, 88],\n",[35,95027,95028],{"class":37,"line":159},[35,95029,95030],{"class":306},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[35,95032,95033],{"class":37,"line":168},[35,95034,94253],{"class":306},[35,95036,95037],{"class":37,"line":177},[35,95038,95039],{"class":41},"#axis=0时\n",[35,95041,95042,95045,95047,95049,95051],{"class":37,"line":182},[35,95043,95044],{"class":359},"np.sort(aa,",[35,95046,47840],{"class":5550},[35,95048,544],{"class":495},[35,95050,687],{"class":58},[35,95052,505],{"class":359},[35,95054,95055],{"class":37,"line":188},[35,95056,94253],{"class":306},[35,95058,95059],{"class":37,"line":197},[35,95060,95061],{"class":306},"array([[44, 12, 36, 37, 25,  9],\n",[35,95063,95064],{"class":37,"line":206},[35,95065,95066],{"class":306},"       [46, 21, 58, 65, 39, 77],\n",[35,95068,95069],{"class":37,"line":215},[35,95070,95071],{"class":306},"       [83, 47, 64, 67, 67, 87],\n",[35,95073,95074],{"class":37,"line":224},[35,95075,95076],{"class":306},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[35,95078,95079],{"class":37,"line":233},[35,95080,94253],{"class":306},[35,95082,95083],{"class":37,"line":238},[35,95084,95085],{"class":41},"#axis=1时,为默认值\n",[35,95087,95088,95090,95092,95094,95096],{"class":37,"line":244},[35,95089,95044],{"class":359},[35,95091,47840],{"class":5550},[35,95093,544],{"class":495},[35,95095,713],{"class":58},[35,95097,505],{"class":359},[35,95099,95100],{"class":37,"line":253},[35,95101,94253],{"class":306},[35,95103,95104],{"class":37,"line":262},[35,95105,95015],{"class":306},[35,95107,95108],{"class":37,"line":271},[35,95109,95020],{"class":306},[35,95111,95112],{"class":37,"line":280},[35,95113,95025],{"class":306},[35,95115,95116],{"class":37,"line":289},[35,95117,95030],{"class":306},[35,95119,95120],{"class":37,"line":294},[35,95121,94253],{"class":306},[35,95123,95124],{"class":37,"line":300},[35,95125,95126],{"class":41},"#按最后一列排序\n",[35,95128,95129,95131,95133,95136,95138,95140],{"class":37,"line":313},[35,95130,759],{"class":359},[35,95132,544],{"class":495},[35,95134,95135],{"class":359},"aa[:,",[35,95137,1026],{"class":495},[35,95139,713],{"class":58},[35,95141,33572],{"class":359},[35,95143,95144],{"class":37,"line":324},[35,95145,95146],{"class":41},"#获取最后一列排好序的索引\n",[35,95148,95149,95151,95153],{"class":37,"line":2955},[35,95150,74383],{"class":359},[35,95152,544],{"class":495},[35,95154,95155],{"class":359},"np.argsort(b)\n",[35,95157,95158],{"class":37,"line":8282},[35,95159,95160],{"class":359},"aa[index]\n",[35,95162,95163],{"class":37,"line":8306},[35,95164,94253],{"class":306},[35,95166,95167],{"class":37,"line":8311},[35,95168,94979],{"class":306},[35,95170,95171],{"class":37,"line":8317},[35,95172,95173],{"class":306},"       [46, 88, 81, 37, 25, 77],\n",[35,95175,95176],{"class":37,"line":8344},[35,95177,94989],{"class":306},[35,95179,95180],{"class":37,"line":8349},[35,95181,95182],{"class":306},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[35,95184,95185],{"class":37,"line":8355},[35,95186,94253],{"class":306},[416,95188,95189],{},"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":30,"searchDepth":45,"depth":45,"links":95191},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94838,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95198,"title":95199,"body":95200,"description":421,"extension":422,"meta":95230,"navigation":140,"path":95231,"seo":95232,"stem":95233,"__hash__":95234},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95201,"toc":95228},[95202,95205,95208,95211,95214,95217,95220,95223],[10,95203,95199],{"id":95204},"_14广播机制",[21,95206,95207],{},"广播的规则：",[21,95209,95210],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[21,95212,95213],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[21,95215,95216],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[21,95218,95219],{},"3.如果没有维度形状为1，则会引发异常",[21,95221,95222],{},"也就是只有维度或者个数为1才可以进行广播操作",[21,95224,95225],{},[1823,95226],{"alt":30,"src":95227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":30,"searchDepth":45,"depth":45,"links":95229},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95199,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95236,"title":95237,"body":95238,"description":421,"extension":422,"meta":95336,"navigation":140,"path":95337,"seo":95338,"stem":95339,"__hash__":95340},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95239,"toc":95334},[95240,95243,95246,95331],[10,95241,95237],{"id":95242},"_15比较掩码",[21,95244,95245],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[25,95247,95249],{"className":30704,"code":95248,"language":30706,"meta":30,"style":30},"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",[32,95250,95251,95297,95308,95322,95326],{"__ignoreMap":30},[35,95252,95253,95255,95257,95260,95262,95264,95266,95268,95270,95272,95274,95276,95278,95280,95282,95284,95286,95288,95290,95292,95294],{"class":37,"line":38},[35,95254,734],{"class":359},[35,95256,544],{"class":495},[35,95258,95259],{"class":359},"np.array([[",[35,95261,713],{"class":58},[35,95263,872],{"class":359},[35,95265,574],{"class":58},[35,95267,872],{"class":359},[35,95269,568],{"class":58},[35,95271,48356],{"class":359},[35,95273,966],{"class":58},[35,95275,872],{"class":359},[35,95277,992],{"class":58},[35,95279,872],{"class":359},[35,95281,1017],{"class":58},[35,95283,48356],{"class":359},[35,95285,1219],{"class":58},[35,95287,872],{"class":359},[35,95289,1244],{"class":58},[35,95291,872],{"class":359},[35,95293,1269],{"class":58},[35,95295,95296],{"class":359},"]])\n",[35,95298,95299,95301,95303,95305],{"class":37,"line":45},[35,95300,734],{"class":359},[35,95302,1404],{"class":495},[35,95304,1194],{"class":58},[35,95306,95307],{"class":41},"#结果是一个由True,False组成的数组\n",[35,95309,95310,95313,95315,95317,95319],{"class":37,"line":55},[35,95311,95312],{"class":359},"a[a",[35,95314,1404],{"class":495},[35,95316,1194],{"class":58},[35,95318,1434],{"class":359},[35,95320,95321],{"class":41},"#小于20的元素会存到这个数组中\n",[35,95323,95324],{"class":37,"line":65},[35,95325,93889],{"class":41},[35,95327,95328],{"class":37,"line":74},[35,95329,95330],{"class":41},"#array([ 1,  2,  3, 11, 12, 13])\n",[416,95332,95333],{},"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":30,"searchDepth":45,"depth":45,"links":95335},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95237,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95342,"title":95343,"body":95344,"description":421,"extension":422,"meta":95436,"navigation":140,"path":95437,"seo":95438,"stem":95439,"__hash__":95440},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95345,"toc":95434},[95346,95349,95352,95355,95358,95361,95426,95431],[10,95347,95343],{"id":95348},"_16魔法命令time",[21,95350,95351],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[21,95353,95354],{},"%:行模式",[21,95356,95357],{},"%%:单元格模式",[21,95359,95360],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[25,95362,95364],{"className":30704,"code":95363,"language":30706,"meta":30,"style":30},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[32,95365,95366,95371,95378,95383,95392,95405,95409,95417],{"__ignoreMap":30},[35,95367,95368],{"class":37,"line":38},[35,95369,95370],{"class":41},"#程序执行时间\n",[35,95372,95373,95375],{"class":37,"line":45},[35,95374,30718],{"class":495},[35,95376,95377],{"class":359}," time \n",[35,95379,95380],{"class":37,"line":55},[35,95381,95382],{"class":41},"#获取时间\n",[35,95384,95385,95388,95390],{"class":37,"line":65},[35,95386,95387],{"class":359},"start",[35,95389,544],{"class":495},[35,95391,32744],{"class":359},[35,95393,95394,95397,95400,95402],{"class":37,"line":74},[35,95395,95396],{"class":359},"time.sleep(",[35,95398,95399],{"class":58},"0.4",[35,95401,923],{"class":359},[35,95403,95404],{"class":41},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[35,95406,95407],{"class":37,"line":83},[35,95408,95382],{"class":41},[35,95410,95411,95413,95415],{"class":37,"line":92},[35,95412,46127],{"class":359},[35,95414,544],{"class":495},[35,95416,32744],{"class":359},[35,95418,95419,95421,95423],{"class":37,"line":101},[35,95420,46127],{"class":359},[35,95422,1026],{"class":495},[35,95424,95425],{"class":359},"start\n",[21,95427,95428],{},[1823,95429],{"alt":30,"src":95430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[416,95432,95433],{},"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":30,"searchDepth":45,"depth":45,"links":95435},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95343,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95442,"title":95443,"body":95444,"description":421,"extension":422,"meta":95479,"navigation":140,"path":95480,"seo":95481,"stem":95482,"__hash__":95483},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95445,"toc":95477},[95446,95449,95452,95455,95458,95461,95464,95467,95472],[10,95447,95443],{"id":95448},"_17魔法命令timeit",[21,95450,95451],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[21,95453,95454],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[21,95456,95457],{},"单元格模式：",[21,95459,95460],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[21,95462,95463],{},"初始化语句执行次数由轮数来决定",[21,95465,95466],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[21,95468,95469],{},[1823,95470],{"alt":30,"src":95471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[21,95473,95474],{},[1823,95475],{"alt":30,"src":95476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":30,"searchDepth":45,"depth":45,"links":95478},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95443,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95485,"title":95486,"body":95487,"description":421,"extension":422,"meta":95505,"navigation":140,"path":95506,"seo":95507,"stem":95508,"__hash__":95509},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95488,"toc":95503},[95489,95492,95495,95498],[10,95490,95486],{"id":95491},"_18魔法命令writefile和run",[21,95493,95494],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[21,95496,95497],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[21,95499,95500],{},[1823,95501],{"alt":30,"src":95502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":30,"searchDepth":45,"depth":45,"links":95504},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95486,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95511,"title":95512,"body":95513,"description":421,"extension":422,"meta":95566,"navigation":140,"path":95567,"seo":95568,"stem":95569,"__hash__":95570},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95514,"toc":95564},[95515,95518,95521,95523,95526,95529,95534,95537,95540,95543,95546,95549,95552,95555,95558,95561],[10,95516,95512],{"id":95517},"_19魔法命令memit",[21,95519,95520],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[21,95522,24932],{},[21,95524,95525],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[21,95527,95528],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[21,95530,95531],{},[1823,95532],{"alt":30,"src":95533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[21,95535,95536],{},"补充：",[21,95538,95539],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[21,95541,95542],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[21,95544,95545],{},"解决方法：",[21,95547,95548],{},"1.cmd",[21,95550,95551],{},"2.依次输入以下代码：",[21,95553,95554],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[21,95556,95557],{},"pip install --upgrade ipython",[21,95559,95560],{},"#升级 memory_profiler 和 setuptools",[21,95562,95563],{},"pip install --upgrade memory_profiler setuptools",{"title":30,"searchDepth":45,"depth":45,"links":95565},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95512,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95572,"title":95573,"body":95574,"description":421,"extension":422,"meta":97220,"navigation":140,"path":97221,"seo":97222,"stem":97223,"__hash__":97224},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95575,"toc":97190},[95576,95579,95583,95587,95648,95651,95656,95660,95665,95670,95675,95680,95683,95688,95692,95696,95729,95732,95735,95738,95790,95793,95829,95832,95874,95878,95899,95901,95938,95940,95945,95947,95952,95956,95959,95987,95991,95995,96048,96052,96144,96148,96152,96155,96160,96164,96189,96194,96198,96201,96204,96207,96210,96213,96216,96219,96231,96235,96239,96242,96274,96277,96300,96303,96329,96332,96358,96361,96395,96398,96460,96464,96467,96471,96474,96500,96503,96506,96511,96514,96583,96585,96590,96651,96654,96665,96671,96676,96680,96683,96696,96700,96715,96717,96740,96742,96768,96771,96774,96777,96825,96827,96832,96836,96840,96867,96871,96898,96901,96906,96911,97001,97005,97063,97068,97071,97074,97116,97120,97176,97181,97184,97187],[10,95577,95573],{"id":95578},"_2创建数组",[438,95580,95582],{"id":95581},"_21-array函数创建数组","2.1 array()函数创建数组",[465,95584,95586],{"id":95585},"_221-函数语句","2.2.1 函数语句",[25,95588,95590],{"className":30704,"code":95589,"language":30706,"meta":30,"style":30},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[32,95591,95592],{"__ignoreMap":30},[35,95593,95594,95597,95600,95602,95604,95606,95608,95610,95613,95615,95618,95620,95623,95625,95627,95629,95632,95634,95637,95639,95642,95644,95646],{"class":37,"line":38},[35,95595,95596],{"class":359},"numpy.array(",[35,95598,95599],{"class":58},"object",[35,95601,12769],{"class":359},[35,95603,93825],{"class":5550},[35,95605,13898],{"class":495},[35,95607,39259],{"class":58},[35,95609,12769],{"class":359},[35,95611,95612],{"class":5550},"copy",[35,95614,13898],{"class":495},[35,95616,95617],{"class":58}," True",[35,95619,12769],{"class":359},[35,95621,95622],{"class":5550},"order",[35,95624,13898],{"class":495},[35,95626,39259],{"class":58},[35,95628,12769],{"class":359},[35,95630,95631],{"class":5550},"subok",[35,95633,13898],{"class":495},[35,95635,95636],{"class":58}," False",[35,95638,12769],{"class":359},[35,95640,95641],{"class":5550},"ndmin",[35,95643,13898],{"class":495},[35,95645,4427],{"class":58},[35,95647,505],{"class":359},[21,95649,95650],{},"参数：",[21,95652,95653],{},[1823,95654],{"alt":30,"src":95655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[465,95657,95659],{"id":95658},"_222-实例","2.2.2 实例",[21,95661,95662],{},[1823,95663],{"alt":30,"src":95664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[21,95666,95667],{},[1823,95668],{"alt":30,"src":95669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[21,95671,95672],{},[1823,95673],{"alt":30,"src":95674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[21,95676,95677],{},[1823,95678],{"alt":30,"src":95679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[21,95681,95682],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[21,95684,95685],{},[1823,95686],{"alt":30,"src":95687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[438,95689,95691],{"id":95690},"_22-随机数创建数组","2.2 随机数创建数组",[465,95693,95695],{"id":95694},"_221-random语句","2.2.1 random语句",[25,95697,95699],{"className":30704,"code":95698,"language":30706,"meta":30,"style":30},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[32,95700,95701,95706,95711,95719,95724],{"__ignoreMap":30},[35,95702,95703],{"class":37,"line":38},[35,95704,95705],{"class":41},"#random.random()\n",[35,95707,95708],{"class":37,"line":45},[35,95709,95710],{"class":41},"#确定随机种子,就是每次运行结果是相同的\n",[35,95712,95713,95715,95717],{"class":37,"line":55},[35,95714,94932],{"class":359},[35,95716,687],{"class":58},[35,95718,505],{"class":359},[35,95720,95721],{"class":37,"line":65},[35,95722,95723],{"class":359},"np.random.random()\n",[35,95725,95726],{"class":37,"line":74},[35,95727,95728],{"class":41},"#生成一个随机的数目\n",[21,95730,95731],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[21,95733,95734],{},"可以指定数组形状 size",[21,95736,95737],{},"①生成一维数组",[25,95739,95741],{"className":30704,"code":95740,"language":30706,"meta":30,"style":30},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[32,95742,95743,95748,95761,95766,95782],{"__ignoreMap":30},[35,95744,95745],{"class":37,"line":38},[35,95746,95747],{"class":41},"#random.random(size())\n",[35,95749,95750,95753,95755,95757,95759],{"class":37,"line":45},[35,95751,95752],{"class":359},"np.random.random(",[35,95754,31822],{"class":5550},[35,95756,544],{"class":495},[35,95758,372],{"class":58},[35,95760,505],{"class":359},[35,95762,95763],{"class":37,"line":55},[35,95764,95765],{"class":41},"#生成一位的五个元素\n",[35,95767,95768,95770,95772,95774,95776,95778,95780],{"class":37,"line":65},[35,95769,734],{"class":359},[35,95771,544],{"class":495},[35,95773,95752],{"class":359},[35,95775,31822],{"class":5550},[35,95777,544],{"class":495},[35,95779,789],{"class":58},[35,95781,505],{"class":359},[35,95783,95784,95787],{"class":37,"line":74},[35,95785,95786],{"class":359},"a.shape ",[35,95788,95789],{"class":41},"#输出数组形状\n",[21,95791,95792],{},"②生成二维数组",[25,95794,95796],{"className":30704,"code":95795,"language":30706,"meta":30,"style":30},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[32,95797,95798,95802,95824],{"__ignoreMap":30},[35,95799,95800],{"class":37,"line":38},[35,95801,93626],{"class":41},[35,95803,95804,95806,95808,95810,95812,95814,95816,95818,95820,95822],{"class":37,"line":45},[35,95805,93631],{"class":359},[35,95807,544],{"class":495},[35,95809,95752],{"class":359},[35,95811,31822],{"class":5550},[35,95813,544],{"class":495},[35,95815,499],{"class":359},[35,95817,789],{"class":58},[35,95819,872],{"class":359},[35,95821,372],{"class":58},[35,95823,30823],{"class":359},[35,95825,95826],{"class":37,"line":55},[35,95827,95828],{"class":41},"#生成四行五列的数组\n",[21,95830,95831],{},"③生成三维数组",[25,95833,95835],{"className":30704,"code":95834,"language":30706,"meta":30,"style":30},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[32,95836,95837,95842,95869],{"__ignoreMap":30},[35,95838,95839],{"class":37,"line":38},[35,95840,95841],{"class":41},"#三维数组\n",[35,95843,95844,95847,95849,95851,95853,95855,95857,95859,95861,95863,95865,95867],{"class":37,"line":45},[35,95845,95846],{"class":359},"aaa",[35,95848,544],{"class":495},[35,95850,95752],{"class":359},[35,95852,31822],{"class":5550},[35,95854,544],{"class":495},[35,95856,499],{"class":359},[35,95858,574],{"class":58},[35,95860,872],{"class":359},[35,95862,568],{"class":58},[35,95864,872],{"class":359},[35,95866,789],{"class":58},[35,95868,30823],{"class":359},[35,95870,95871],{"class":37,"line":55},[35,95872,95873],{"class":359},"aaa.shape\n",[465,95875,95877],{"id":95876},"_222-randint语句","2.2.2 randint语句",[25,95879,95881],{"className":30704,"code":95880,"language":30706,"meta":30,"style":30},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[32,95882,95883,95888],{"__ignoreMap":30},[35,95884,95885],{"class":37,"line":38},[35,95886,95887],{"class":41},"#生成随机的整数 random.randint(low,high,size)\n",[35,95889,95890,95892,95894,95896],{"class":37,"line":45},[35,95891,93439],{"class":359},[35,95893,372],{"class":58},[35,95895,14048],{"class":359},[35,95897,95898],{"class":41},"#0~5中的随机一个数\n",[21,95900,95737],{},[25,95902,95904],{"className":30704,"code":95903,"language":30706,"meta":30,"style":30},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[32,95905,95906,95911,95933],{"__ignoreMap":30},[35,95907,95908],{"class":37,"line":38},[35,95909,95910],{"class":41},"#一维\n",[35,95912,95913,95915,95917,95919,95921,95923,95925,95927,95929,95931],{"class":37,"line":45},[35,95914,93439],{"class":359},[35,95916,713],{"class":58},[35,95918,872],{"class":359},[35,95920,966],{"class":58},[35,95922,872],{"class":359},[35,95924,31822],{"class":5550},[35,95926,544],{"class":495},[35,95928,499],{"class":359},[35,95930,940],{"class":58},[35,95932,30823],{"class":359},[35,95934,95935],{"class":37,"line":55},[35,95936,95937],{"class":41},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[21,95939,95792],{},[21,95941,95942],{},[1823,95943],{"alt":30,"src":95944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[21,95946,95831],{},[21,95948,95949],{},[1823,95950],{"alt":30,"src":95951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[465,95953,95955],{"id":95954},"_222-rand语句","2.2.2 rand语句",[21,95957,95958],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[25,95960,95962],{"className":30704,"code":95961,"language":30706,"meta":30,"style":30},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[32,95963,95964,95977,95982],{"__ignoreMap":30},[35,95965,95966,95969,95971,95973,95975],{"class":37,"line":38},[35,95967,95968],{"class":359},"np.random.rand(",[35,95970,807],{"class":58},[35,95972,872],{"class":359},[35,95974,940],{"class":58},[35,95976,505],{"class":359},[35,95978,95979],{"class":37,"line":45},[35,95980,95981],{"class":41},"#第一个参数100：行数，表示有100个样本\n",[35,95983,95984],{"class":37,"line":55},[35,95985,95986],{"class":41},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[438,95988,95990],{"id":95989},"_23-arange创建数组","2.3 arange()创建数组",[465,95992,95994],{"id":95993},"_231-函数语句","2.3.1 函数语句",[25,95996,95998],{"className":30704,"code":95997,"language":30706,"meta":30,"style":30},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[32,95999,96000,96014,96019,96024,96029,96034,96039,96044],{"__ignoreMap":30},[35,96001,96002,96005,96007,96009,96012],{"class":37,"line":38},[35,96003,96004],{"class":359},"numpy.arange([start,] stop[, step], ",[35,96006,93825],{"class":5550},[35,96008,544],{"class":495},[35,96010,96011],{"class":58},"None",[35,96013,505],{"class":359},[35,96015,96016],{"class":37,"line":45},[35,96017,96018],{"class":41},"#参数\n",[35,96020,96021],{"class":37,"line":55},[35,96022,96023],{"class":306},"\"\"\"\n",[35,96025,96026],{"class":37,"line":65},[35,96027,96028],{"class":306},"start:起始值，可选，默认从 0 开始。\n",[35,96030,96031],{"class":37,"line":74},[35,96032,96033],{"class":306},"stop:结束值（不包含该值）。\n",[35,96035,96036],{"class":37,"line":83},[35,96037,96038],{"class":306},"step:步长，可选，默认是 1。可以为浮点数。\n",[35,96040,96041],{"class":37,"line":92},[35,96042,96043],{"class":306},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[35,96045,96046],{"class":37,"line":101},[35,96047,96023],{"class":306},[465,96049,96051],{"id":96050},"_232-实例","2.3.2 实例",[25,96053,96055],{"className":30704,"code":96054,"language":30706,"meta":30,"style":30},"#创建一维数组\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",[32,96056,96057,96061,96085,96090,96095,96099,96122,96126,96130,96135,96140],{"__ignoreMap":30},[35,96058,96059],{"class":37,"line":38},[35,96060,93430],{"class":41},[35,96062,96063,96065,96067,96069,96071,96073,96075,96077,96079,96081,96083],{"class":37,"line":45},[35,96064,93327],{"class":359},[35,96066,713],{"class":58},[35,96068,872],{"class":359},[35,96070,1219],{"class":58},[35,96072,872],{"class":359},[35,96074,713],{"class":58},[35,96076,872],{"class":359},[35,96078,93825],{"class":5550},[35,96080,544],{"class":495},[35,96082,502],{"class":58},[35,96084,505],{"class":359},[35,96086,96087],{"class":37,"line":55},[35,96088,96089],{"class":41},"#输出结果：\n",[35,96091,96092],{"class":37,"line":65},[35,96093,96094],{"class":41},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[35,96096,96097],{"class":37,"line":74},[35,96098,94272],{"class":41},[35,96100,96101,96104,96106,96108,96110,96113,96115,96117,96119],{"class":37,"line":83},[35,96102,96103],{"class":359},"np.array([np.arange(",[35,96105,713],{"class":58},[35,96107,872],{"class":359},[35,96109,789],{"class":58},[35,96111,96112],{"class":359},"),np.arange(",[35,96114,789],{"class":58},[35,96116,872],{"class":359},[35,96118,863],{"class":58},[35,96120,96121],{"class":359},")])\n",[35,96123,96124],{"class":37,"line":92},[35,96125,93889],{"class":41},[35,96127,96128],{"class":37,"line":101},[35,96129,96023],{"class":306},[35,96131,96132],{"class":37,"line":110},[35,96133,96134],{"class":306},"array([[1, 2, 3],\n",[35,96136,96137],{"class":37,"line":119},[35,96138,96139],{"class":306},"       [4, 5, 6]])\n",[35,96141,96142],{"class":37,"line":128},[35,96143,96023],{"class":306},[438,96145,96147],{"id":96146},"_24-生态分布","2.4 生态分布",[465,96149,96151],{"id":96150},"_241-标准正态分布","2.4.1 标准正态分布",[21,96153,96154],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[21,96156,96157],{},[1823,96158],{"alt":30,"src":96159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[465,96161,96163],{"id":96162},"_242-常规正态分布","2.4.2 常规正态分布",[25,96165,96167],{"className":30704,"code":96166,"language":30706,"meta":30,"style":30},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[32,96168,96169,96174,96179,96184],{"__ignoreMap":30},[35,96170,96171],{"class":37,"line":38},[35,96172,96173],{"class":359},"random.normal(loc,scale,size)也可以生成正态分布\n",[35,96175,96176],{"class":37,"line":45},[35,96177,96178],{"class":41},"#loc:期望\n",[35,96180,96181],{"class":37,"line":55},[35,96182,96183],{"class":41},"#scale:方差\n",[35,96185,96186],{"class":37,"line":65},[35,96187,96188],{"class":41},"#size:用于确定是几维的数列\n",[21,96190,96191],{},[1823,96192],{"alt":30,"src":96193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[438,96195,96197],{"id":96196},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[21,96199,96200],{},"ndim:秩，维度个数",[21,96202,96203],{},"size:数组元素的个数",[21,96205,96206],{},"shape:数组的形状",[21,96208,96209],{},"dtype:数组元素的类型",[21,96211,96212],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[21,96214,96215],{},"他们都是属性，通过数组.属性的形式来确定",[21,96217,96218],{},"如果需要输出多个可以通过以下方式：",[25,96220,96222],{"className":30704,"code":96221,"language":30706,"meta":30,"style":30},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[32,96223,96224],{"__ignoreMap":30},[35,96225,96226,96228],{"class":37,"line":38},[35,96227,30741],{"class":58},[35,96229,96230],{"class":359},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[438,96232,96234],{"id":96233},"_26-其他方式创建数组","2.6 其他方式创建数组",[465,96236,96238],{"id":96237},"_261-zeros创建数组","2.6.1 zeros()创建数组",[21,96240,96241],{},"①创建一维数组",[25,96243,96245],{"className":30704,"code":96244,"language":30706,"meta":30,"style":30},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[32,96246,96247,96256,96260,96265,96270],{"__ignoreMap":30},[35,96248,96249,96252,96254],{"class":37,"line":38},[35,96250,96251],{"class":359},"np.zeros(",[35,96253,940],{"class":58},[35,96255,505],{"class":359},[35,96257,96258],{"class":37,"line":45},[35,96259,96023],{"class":306},[35,96261,96262],{"class":37,"line":55},[35,96263,96264],{"class":306},"输出结果：\n",[35,96266,96267],{"class":37,"line":65},[35,96268,96269],{"class":306},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[35,96271,96272],{"class":37,"line":74},[35,96273,96023],{"class":306},[21,96275,96276],{},"上方代码等价于：",[25,96278,96280],{"className":30704,"code":96279,"language":30706,"meta":30,"style":30},"np.zeros(shape=(10))#创建10个元素的0数组\n",[32,96281,96282],{"__ignoreMap":30},[35,96283,96284,96286,96289,96291,96293,96295,96297],{"class":37,"line":38},[35,96285,96251],{"class":359},[35,96287,96288],{"class":5550},"shape",[35,96290,544],{"class":495},[35,96292,499],{"class":359},[35,96294,940],{"class":58},[35,96296,83096],{"class":359},[35,96298,96299],{"class":41},"#创建10个元素的0数组\n",[21,96301,96302],{},"也可以指定类型",[25,96304,96306],{"className":30704,"code":96305,"language":30706,"meta":30,"style":30},"#指定类型\nnp.zeros(5,dtype=int)\n",[32,96307,96308,96313],{"__ignoreMap":30},[35,96309,96310],{"class":37,"line":38},[35,96311,96312],{"class":41},"#指定类型\n",[35,96314,96315,96317,96319,96321,96323,96325,96327],{"class":37,"line":45},[35,96316,96251],{"class":359},[35,96318,372],{"class":58},[35,96320,872],{"class":359},[35,96322,93825],{"class":5550},[35,96324,544],{"class":495},[35,96326,502],{"class":58},[35,96328,505],{"class":359},[21,96330,96331],{},"②创建二维数组",[25,96333,96335],{"className":30704,"code":96334,"language":30706,"meta":30,"style":30},"np.zeros((3,4),dtype=int)\n",[32,96336,96337],{"__ignoreMap":30},[35,96338,96339,96342,96344,96346,96348,96350,96352,96354,96356],{"class":37,"line":38},[35,96340,96341],{"class":359},"np.zeros((",[35,96343,568],{"class":58},[35,96345,872],{"class":359},[35,96347,789],{"class":58},[35,96349,42582],{"class":359},[35,96351,93825],{"class":5550},[35,96353,544],{"class":495},[35,96355,502],{"class":58},[35,96357,505],{"class":359},[21,96359,96360],{},"③创建三维数组",[25,96362,96364],{"className":30704,"code":96363,"language":30706,"meta":30,"style":30},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[32,96365,96366,96371],{"__ignoreMap":30},[35,96367,96368],{"class":37,"line":38},[35,96369,96370],{"class":41},"#创建三维数组\n",[35,96372,96373,96375,96377,96379,96381,96383,96385,96387,96389,96391,96393],{"class":37,"line":45},[35,96374,96341],{"class":359},[35,96376,568],{"class":58},[35,96378,872],{"class":359},[35,96380,789],{"class":58},[35,96382,872],{"class":359},[35,96384,372],{"class":58},[35,96386,42582],{"class":359},[35,96388,93825],{"class":5550},[35,96390,544],{"class":495},[35,96392,502],{"class":58},[35,96394,505],{"class":359},[21,96396,96397],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[25,96399,96401],{"className":30704,"code":96400,"language":30706,"meta":30,"style":30},"#使用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",[32,96402,96403,96408,96423,96428,96433,96455],{"__ignoreMap":30},[35,96404,96405],{"class":37,"line":38},[35,96406,96407],{"class":41},"#使用zeros_like将创建的一维数组变成全0的数组\n",[35,96409,96410,96412,96414,96416,96418,96420],{"class":37,"line":45},[35,96411,734],{"class":359},[35,96413,544],{"class":495},[35,96415,93327],{"class":359},[35,96417,789],{"class":58},[35,96419,923],{"class":359},[35,96421,96422],{"class":41},"#这个得到的结果：一维数组0，1，2，3\n",[35,96424,96425],{"class":37,"line":55},[35,96426,96427],{"class":359},"np.zeros_like(a)\n",[35,96429,96430],{"class":37,"line":65},[35,96431,96432],{"class":41},"#使用zeros_like将创建的二维数组变成全0的数组\n",[35,96434,96435,96437,96439,96441,96443,96445,96447,96449,96451,96453],{"class":37,"line":74},[35,96436,93631],{"class":359},[35,96438,544],{"class":495},[35,96440,95752],{"class":359},[35,96442,31822],{"class":5550},[35,96444,544],{"class":495},[35,96446,499],{"class":359},[35,96448,789],{"class":58},[35,96450,872],{"class":359},[35,96452,372],{"class":58},[35,96454,30823],{"class":359},[35,96456,96457],{"class":37,"line":83},[35,96458,96459],{"class":359},"np.zeros_like(aa)\n",[465,96461,96463],{"id":96462},"_262-ones创建数组","2.6.2 ones()创建数组",[21,96465,96466],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[465,96468,96470],{"id":96469},"_263-empty创建数组","2.6.3 empty()创建数组",[21,96472,96473],{},"①empty()用法",[25,96475,96477],{"className":30704,"code":96476,"language":30706,"meta":30,"style":30},"numpy.empty(shape,dtype=float,order='c')\n",[32,96478,96479],{"__ignoreMap":30},[35,96480,96481,96484,96486,96488,96490,96492,96494,96496,96498],{"class":37,"line":38},[35,96482,96483],{"class":359},"numpy.empty(shape,",[35,96485,93825],{"class":5550},[35,96487,544],{"class":495},[35,96489,538],{"class":58},[35,96491,872],{"class":359},[35,96493,95622],{"class":5550},[35,96495,544],{"class":495},[35,96497,76353],{"class":306},[35,96499,505],{"class":359},[21,96501,96502],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[21,96504,96505],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[21,96507,96508],{},[1823,96509],{"alt":30,"src":96510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[21,96512,96513],{},"②empty()用法",[25,96515,96517],{"className":30704,"code":96516,"language":30706,"meta":30,"style":30},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[32,96518,96519,96540,96552,96573,96578],{"__ignoreMap":30},[35,96520,96521,96523,96525,96528,96530,96532,96534,96536,96538],{"class":37,"line":38},[35,96522,1339],{"class":359},[35,96524,544],{"class":495},[35,96526,96527],{"class":359},"np.empty(",[35,96529,940],{"class":58},[35,96531,872],{"class":359},[35,96533,93825],{"class":5550},[35,96535,544],{"class":495},[35,96537,502],{"class":58},[35,96539,505],{"class":359},[35,96541,96542,96544,96546,96548,96550],{"class":37,"line":45},[35,96543,1314],{"class":359},[35,96545,544],{"class":495},[35,96547,93327],{"class":359},[35,96549,372],{"class":58},[35,96551,505],{"class":359},[35,96553,96554,96557,96559,96562,96564,96566,96569,96571],{"class":37,"line":55},[35,96555,96556],{"class":359},"np.add(",[35,96558,574],{"class":58},[35,96560,96561],{"class":359},",x,",[35,96563,93379],{"class":5550},[35,96565,544],{"class":495},[35,96567,96568],{"class":359},"y[:",[35,96570,372],{"class":58},[35,96572,4991],{"class":359},[35,96574,96575],{"class":37,"line":65},[35,96576,96577],{"class":41},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[35,96579,96580],{"class":37,"line":74},[35,96581,96582],{"class":359},"y\n",[21,96584,11848],{},[21,96586,96587],{},[1823,96588],{"alt":30,"src":96589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[25,96591,96593],{"className":30704,"code":96592,"language":30706,"meta":30,"style":30},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[32,96594,96595,96611,96631,96646],{"__ignoreMap":30},[35,96596,96597,96599,96601,96603,96605,96607,96609],{"class":37,"line":38},[35,96598,1314],{"class":359},[35,96600,544],{"class":495},[35,96602,93327],{"class":359},[35,96604,713],{"class":58},[35,96606,872],{"class":359},[35,96608,408],{"class":58},[35,96610,505],{"class":359},[35,96612,96613,96615,96617,96619,96621,96623,96625,96627,96629],{"class":37,"line":45},[35,96614,1339],{"class":359},[35,96616,544],{"class":495},[35,96618,96527],{"class":359},[35,96620,372],{"class":58},[35,96622,872],{"class":359},[35,96624,93825],{"class":5550},[35,96626,544],{"class":495},[35,96628,502],{"class":58},[35,96630,505],{"class":359},[35,96632,96633,96636,96638,96640,96642,96644],{"class":37,"line":55},[35,96634,96635],{"class":359},"np.add(x,",[35,96637,574],{"class":58},[35,96639,872],{"class":359},[35,96641,93379],{"class":5550},[35,96643,544],{"class":495},[35,96645,93774],{"class":359},[35,96647,96648],{"class":37,"line":65},[35,96649,96650],{"class":41},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[21,96652,96653],{},"③empty_like()",[21,96655,96656],{},[645,96657,96658,96659,96664],{},"创建一个",[645,96660,96661],{},[645,96662,96663],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[21,96666,96667,96670],{},[32,96668,96669],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[21,96672,96673],{},[1823,96674],{"alt":30,"src":96675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[465,96677,96679],{"id":96678},"_264-用法","2.6.4 ？？用法",[21,96681,96682],{},"当想查看一个函数的参数时，可以通过？？来实现",[25,96684,96686],{"className":30704,"code":96685,"language":30706,"meta":30,"style":30},"np.full??\n",[32,96687,96688],{"__ignoreMap":30},[35,96689,96690,96693],{"class":37,"line":38},[35,96691,96692],{"class":359},"np.full",[35,96694,96695],{"class":77728},"??\n",[465,96697,96699],{"id":96698},"_265-full创建数组","2.6.5 full()创建数组",[25,96701,96703],{"className":30704,"code":96702,"language":30706,"meta":30,"style":30},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[32,96704,96705,96710],{"__ignoreMap":30},[35,96706,96707],{"class":37,"line":38},[35,96708,96709],{"class":359},"full(shape,fill_value)\n",[35,96711,96712],{"class":37,"line":45},[35,96713,96714],{"class":359},"创建全为某个指定值的数组\n",[21,96716,94855],{},[25,96718,96720],{"className":30704,"code":96719,"language":30706,"meta":30,"style":30},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[32,96721,96722,96727],{"__ignoreMap":30},[35,96723,96724],{"class":37,"line":38},[35,96725,96726],{"class":41},"#创建一个一维数组,以20进行填充\n",[35,96728,96729,96732,96734,96736,96738],{"class":37,"line":45},[35,96730,96731],{"class":359},"np.full(",[35,96733,940],{"class":58},[35,96735,872],{"class":359},[35,96737,1194],{"class":58},[35,96739,505],{"class":359},[21,96741,93616],{},[25,96743,96745],{"className":30704,"code":96744,"language":30706,"meta":30,"style":30},"#创建二维数组\nnp.full((3,5),11)\n",[32,96746,96747,96751],{"__ignoreMap":30},[35,96748,96749],{"class":37,"line":38},[35,96750,94272],{"class":41},[35,96752,96753,96756,96758,96760,96762,96764,96766],{"class":37,"line":45},[35,96754,96755],{"class":359},"np.full((",[35,96757,568],{"class":58},[35,96759,872],{"class":359},[35,96761,372],{"class":58},[35,96763,42582],{"class":359},[35,96765,966],{"class":58},[35,96767,505],{"class":359},[21,96769,96770],{},"③full_like用法",[21,96772,96773],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[21,96775,96776],{},"这里是指定填充而已",[25,96778,96780],{"className":30704,"code":96779,"language":30706,"meta":30,"style":30},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[32,96781,96782,96787,96811,96816],{"__ignoreMap":30},[35,96783,96784],{"class":37,"line":38},[35,96785,96786],{"class":41},"#创建一个指定形状数组\n",[35,96788,96789,96791,96793,96795,96797,96799,96801,96803,96805,96807,96809],{"class":37,"line":45},[35,96790,734],{"class":359},[35,96792,544],{"class":495},[35,96794,93327],{"class":359},[35,96796,713],{"class":58},[35,96798,872],{"class":359},[35,96800,820],{"class":58},[35,96802,93332],{"class":359},[35,96804,789],{"class":58},[35,96806,872],{"class":359},[35,96808,914],{"class":58},[35,96810,505],{"class":359},[35,96812,96813],{"class":37,"line":55},[35,96814,96815],{"class":41},"#进行指定填充\n",[35,96817,96818,96821,96823],{"class":37,"line":65},[35,96819,96820],{"class":359},"np.full_like(a,",[35,96822,940],{"class":58},[35,96824,505],{"class":359},[21,96826,11848],{},[21,96828,96829],{},[1823,96830],{"alt":30,"src":96831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[465,96833,96835],{"id":96834},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22332,96837,96839],{"id":96838},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[25,96841,96843],{"className":30704,"code":96842,"language":30706,"meta":30,"style":30},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[32,96844,96845,96862],{"__ignoreMap":30},[35,96846,96847,96850,96852,96854,96856,96858,96860],{"class":37,"line":38},[35,96848,96849],{"class":359},"np.eye(",[35,96851,789],{"class":58},[35,96853,872],{"class":359},[35,96855,93825],{"class":5550},[35,96857,544],{"class":495},[35,96859,502],{"class":58},[35,96861,505],{"class":359},[35,96863,96864],{"class":37,"line":45},[35,96865,96866],{"class":41},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22332,96868,96870],{"id":96869},"_2662-法2identity","2.6.6.2 法2：identity()",[25,96872,96874],{"className":30704,"code":96873,"language":30706,"meta":30,"style":30},"#identity()\nnp.identity(5,dtype=int)\n",[32,96875,96876,96881],{"__ignoreMap":30},[35,96877,96878],{"class":37,"line":38},[35,96879,96880],{"class":41},"#identity()\n",[35,96882,96883,96886,96888,96890,96892,96894,96896],{"class":37,"line":45},[35,96884,96885],{"class":359},"np.identity(",[35,96887,372],{"class":58},[35,96889,872],{"class":359},[35,96891,93825],{"class":5550},[35,96893,544],{"class":495},[35,96895,502],{"class":58},[35,96897,505],{"class":359},[21,96899,96900],{},"两个函数是有区别的",[21,96902,96903],{},[1823,96904],{"alt":30,"src":96905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[21,96907,96908],{},[1823,96909],{"alt":30,"src":96910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[25,96912,96914],{"className":30704,"code":96913,"language":30706,"meta":30,"style":30},"# 创建一个 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",[32,96915,96916,96921,96933,96938,96943,96948,96953,96957,96962,96982,96986,96991,96996],{"__ignoreMap":30},[35,96917,96918],{"class":37,"line":38},[35,96919,96920],{"class":41},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[35,96922,96923,96925,96927,96929,96931],{"class":37,"line":45},[35,96924,96849],{"class":359},[35,96926,568],{"class":58},[35,96928,12769],{"class":359},[35,96930,789],{"class":58},[35,96932,505],{"class":359},[35,96934,96935],{"class":37,"line":55},[35,96936,96937],{"class":41},"# 输出:\n",[35,96939,96940],{"class":37,"line":65},[35,96941,96942],{"class":41},"# [[1. 0. 0. 0.]\n",[35,96944,96945],{"class":37,"line":74},[35,96946,96947],{"class":41},"#  [0. 1. 0. 0.]\n",[35,96949,96950],{"class":37,"line":83},[35,96951,96952],{"class":41},"#  [0. 0. 1. 0.]]\n",[35,96954,96955],{"class":37,"line":92},[35,96956,141],{"emptyLinePlaceholder":140},[35,96958,96959],{"class":37,"line":101},[35,96960,96961],{"class":41},"# 对角线向上偏移1\n",[35,96963,96964,96966,96968,96970,96972,96974,96976,96978,96980],{"class":37,"line":110},[35,96965,96849],{"class":359},[35,96967,568],{"class":58},[35,96969,12769],{"class":359},[35,96971,789],{"class":58},[35,96973,12769],{"class":359},[35,96975,987],{"class":5550},[35,96977,544],{"class":495},[35,96979,713],{"class":58},[35,96981,505],{"class":359},[35,96983,96984],{"class":37,"line":119},[35,96985,96937],{"class":41},[35,96987,96988],{"class":37,"line":128},[35,96989,96990],{"class":41},"# [[0. 1. 0. 0.]\n",[35,96992,96993],{"class":37,"line":137},[35,96994,96995],{"class":41},"#  [0. 0. 1. 0.]\n",[35,96997,96998],{"class":37,"line":144},[35,96999,97000],{"class":41},"#  [0. 0. 0. 1.]]\n",[465,97002,97004],{"id":97003},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[25,97006,97008],{"className":30704,"code":97007,"language":30706,"meta":30,"style":30},"#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",[32,97009,97010,97015,97019,97024,97029,97034,97039,97044,97049,97054,97059],{"__ignoreMap":30},[35,97011,97012],{"class":37,"line":38},[35,97013,97014],{"class":41},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[35,97016,97017],{"class":37,"line":45},[35,97018,96023],{"class":306},[35,97020,97021],{"class":37,"line":55},[35,97022,97023],{"class":306},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[35,97025,97026],{"class":37,"line":65},[35,97027,97028],{"class":306},"参数介绍：\n",[35,97030,97031],{"class":37,"line":74},[35,97032,97033],{"class":306},"start：序列的起始值\n",[35,97035,97036],{"class":37,"line":83},[35,97037,97038],{"class":306},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[35,97040,97041],{"class":37,"line":92},[35,97042,97043],{"class":306},"num：要生长的等步长的样本数量，默认为50\n",[35,97045,97046],{"class":37,"line":101},[35,97047,97048],{"class":306},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[35,97050,97051],{"class":37,"line":110},[35,97052,97053],{"class":306},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[35,97055,97056],{"class":37,"line":119},[35,97057,97058],{"class":306},"dtype：ndarry的数据类型\n",[35,97060,97061],{"class":37,"line":128},[35,97062,96023],{"class":306},[21,97064,97065],{},[1823,97066],{"alt":30,"src":97067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[21,97069,97070],{},"这里num=是可以省略的",[21,97072,97073],{},"也就是下方两行代码结果是一模一样的",[25,97075,97077],{"className":30704,"code":97076,"language":30706,"meta":30,"style":30},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[32,97078,97079,97096],{"__ignoreMap":30},[35,97080,97081,97084,97086,97088,97090,97092,97094],{"class":37,"line":38},[35,97082,97083],{"class":359},"np.linspace(",[35,97085,713],{"class":58},[35,97087,872],{"class":359},[35,97089,372],{"class":58},[35,97091,872],{"class":359},[35,97093,372],{"class":58},[35,97095,505],{"class":359},[35,97097,97098,97100,97102,97104,97106,97108,97110,97112,97114],{"class":37,"line":45},[35,97099,97083],{"class":359},[35,97101,713],{"class":58},[35,97103,872],{"class":359},[35,97105,372],{"class":58},[35,97107,872],{"class":359},[35,97109,2019],{"class":5550},[35,97111,544],{"class":495},[35,97113,372],{"class":58},[35,97115,505],{"class":359},[465,97117,97119],{"id":97118},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[25,97121,97123],{"className":30704,"code":97122,"language":30706,"meta":30,"style":30},"#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",[32,97124,97125,97130,97134,97139,97144,97149,97154,97158,97163,97168,97172],{"__ignoreMap":30},[35,97126,97127],{"class":37,"line":38},[35,97128,97129],{"class":41},"#logspace函数用于创建一个等比数列，格式如下：\n",[35,97131,97132],{"class":37,"line":45},[35,97133,96023],{"class":306},[35,97135,97136],{"class":37,"line":55},[35,97137,97138],{"class":306},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[35,97140,97141],{"class":37,"line":65},[35,97142,97143],{"class":306},"参数为：\n",[35,97145,97146],{"class":37,"line":74},[35,97147,97148],{"class":306},"start:序列的起始位置为：base**start\n",[35,97150,97151],{"class":37,"line":83},[35,97152,97153],{"class":306},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[35,97155,97156],{"class":37,"line":92},[35,97157,97043],{"class":306},[35,97159,97160],{"class":37,"line":101},[35,97161,97162],{"class":306},"endpoint：是否包含 stop 这个值，默认是 True\n",[35,97164,97165],{"class":37,"line":110},[35,97166,97167],{"class":306},"base：对数的底数，默认是 10（常见对数）\n",[35,97169,97170],{"class":37,"line":119},[35,97171,97058],{"class":306},[35,97173,97174],{"class":37,"line":128},[35,97175,96023],{"class":306},[21,97177,97178],{},[1823,97179],{"alt":30,"src":97180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[21,97182,97183],{},"logspace()函数中的num参数也是可以不写num=的",[21,97185,97186],{},"endpoint是不可以省略的",[416,97188,97189],{},"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":30,"searchDepth":45,"depth":45,"links":97191},[97192,97196,97201,97205,97209,97210],{"id":95581,"depth":45,"text":95582,"children":97193},[97194,97195],{"id":95585,"depth":55,"text":95586},{"id":95658,"depth":55,"text":95659},{"id":95690,"depth":45,"text":95691,"children":97197},[97198,97199,97200],{"id":95694,"depth":55,"text":95695},{"id":95876,"depth":55,"text":95877},{"id":95954,"depth":55,"text":95955},{"id":95989,"depth":45,"text":95990,"children":97202},[97203,97204],{"id":95993,"depth":55,"text":95994},{"id":96050,"depth":55,"text":96051},{"id":96146,"depth":45,"text":96147,"children":97206},[97207,97208],{"id":96150,"depth":55,"text":96151},{"id":96162,"depth":55,"text":96163},{"id":96196,"depth":45,"text":96197},{"id":96233,"depth":45,"text":96234,"children":97211},[97212,97213,97214,97215,97216,97217,97218,97219],{"id":96237,"depth":55,"text":96238},{"id":96462,"depth":55,"text":96463},{"id":96469,"depth":55,"text":96470},{"id":96678,"depth":55,"text":96679},{"id":96698,"depth":55,"text":96699},{"id":96834,"depth":55,"text":96835},{"id":97003,"depth":55,"text":97004},{"id":97118,"depth":55,"text":97119},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95573,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97226,"title":97227,"body":97228,"description":421,"extension":422,"meta":97321,"navigation":140,"path":97322,"seo":97323,"stem":97324,"__hash__":97325},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97229,"toc":97319},[97230,97233,97236,97239,97242,97245,97248,97251,97254,97257,97260,97263,97265,97268,97271,97276,97279,97282,97316],[10,97231,97227],{"id":97232},"_20魔法命令mprun",[21,97234,97235],{},"逐行分析数据内存的使用情况",[21,97237,97238],{},"语法格式：",[21,97240,97241],{},"%mprun -f 模块名.函数名 模块名.函数名()",[21,97243,97244],{},"分析结果列如下：",[21,97246,97247],{},"Line行号",[21,97249,97250],{},"Mem usage内存使用大小",[21,97252,97253],{},"increment内存增量",[21,97255,97256],{},"Line content代码内容",[21,97258,97259],{},"补充说明：",[21,97261,97262],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[21,97264,95528],{},[21,97266,97267],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[21,97269,97270],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[21,97272,97273],{},[1823,97274],{"alt":30,"src":97275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[21,97277,97278],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[21,97280,97281],{},"这时候需要重新加载模块",[25,97283,97285],{"className":30704,"code":97284,"language":30706,"meta":30,"style":30},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[32,97286,97287,97292,97299,97304],{"__ignoreMap":30},[35,97288,97289],{"class":37,"line":38},[35,97290,97291],{"class":41},"#重新加载模块\n",[35,97293,97294,97296],{"class":37,"line":45},[35,97295,30718],{"class":495},[35,97297,97298],{"class":359}," importlib\n",[35,97300,97301],{"class":37,"line":55},[35,97302,97303],{"class":359},"importlib.reload(mprun_test)\n",[35,97305,97306,97308,97311,97313],{"class":37,"line":65},[35,97307,823],{"class":495},[35,97309,97310],{"class":359},"mprun ",[35,97312,1026],{"class":495},[35,97314,97315],{"class":359},"f mprun_test.fun_test mprun_test.fun_test()\n",[416,97317,97318],{},"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":30,"searchDepth":45,"depth":45,"links":97320},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97227,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97327,"title":97328,"body":97329,"description":421,"extension":422,"meta":97346,"navigation":140,"path":97347,"seo":97348,"stem":97349,"__hash__":97350},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97330,"toc":97344},[97331,97334,97339],[10,97332,97328],{"id":97333},"_3一维数组的索引和切片",[21,97335,97336],{},[1823,97337],{"alt":30,"src":97338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[21,97340,97341],{},[1823,97342],{"alt":30,"src":97343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":30,"searchDepth":45,"depth":45,"links":97345},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97328,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97352,"title":97353,"body":97354,"description":421,"extension":422,"meta":97837,"navigation":140,"path":97838,"seo":97839,"stem":97840,"__hash__":97841},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97355,"toc":97835},[97356,97359,97362,97367,97400,97403,97441,97444,97478,97481,97586,97589,97626,97629,97730,97733,97784,97787,97829,97832],[10,97357,97353],{"id":97358},"_4二维数组的索引与切片",[21,97360,97361],{},"①获取指定单个元素",[21,97363,97364],{},[1823,97365],{"alt":30,"src":97366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[25,97368,97370],{"className":30704,"code":97369,"language":30706,"meta":30,"style":30},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[32,97371,97372,97377,97382,97387],{"__ignoreMap":30},[35,97373,97374],{"class":37,"line":38},[35,97375,97376],{"class":41},"#获取元素9\n",[35,97378,97379],{"class":37,"line":45},[35,97380,97381],{"class":41},"#先获取所在行，再获取所在列\n",[35,97383,97384],{"class":37,"line":55},[35,97385,97386],{"class":41},"#数组[行索引号，列索引号]\n",[35,97388,97389,97392,97394,97396,97398],{"class":37,"line":65},[35,97390,97391],{"class":359},"a[",[35,97393,713],{"class":58},[35,97395,872],{"class":359},[35,97397,574],{"class":58},[35,97399,33572],{"class":359},[21,97401,97402],{},"②获取整行元素",[25,97404,97406],{"className":30704,"code":97405,"language":30706,"meta":30,"style":30},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[32,97407,97408,97413,97418,97426,97431],{"__ignoreMap":30},[35,97409,97410],{"class":37,"line":38},[35,97411,97412],{"class":41},"#获取整行 数组[行索引号]\n",[35,97414,97415],{"class":37,"line":45},[35,97416,97417],{"class":41},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[35,97419,97420,97422,97424],{"class":37,"line":55},[35,97421,97391],{"class":359},[35,97423,574],{"class":58},[35,97425,33572],{"class":359},[35,97427,97428],{"class":37,"line":65},[35,97429,97430],{"class":41},"#也可以负索引获取一行\n",[35,97432,97433,97435,97437,97439],{"class":37,"line":74},[35,97434,97391],{"class":359},[35,97436,1026],{"class":495},[35,97438,713],{"class":58},[35,97440,33572],{"class":359},[21,97442,97443],{},"③获取整列元素",[25,97445,97447],{"className":30704,"code":97446,"language":30706,"meta":30,"style":30},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[32,97448,97449,97454,97463,97468],{"__ignoreMap":30},[35,97450,97451],{"class":37,"line":38},[35,97452,97453],{"class":41},"#获取整列 数组名[:,列索引]\n",[35,97455,97456,97459,97461],{"class":37,"line":45},[35,97457,97458],{"class":359},"a[:,",[35,97460,574],{"class":58},[35,97462,33572],{"class":359},[35,97464,97465],{"class":37,"line":55},[35,97466,97467],{"class":41},"#也可以负索引获取一列\n",[35,97469,97470,97472,97474,97476],{"class":37,"line":65},[35,97471,97458],{"class":359},[35,97473,1026],{"class":495},[35,97475,713],{"class":58},[35,97477,33572],{"class":359},[21,97479,97480],{},"④部分行部分列的元素",[25,97482,97484],{"className":30704,"code":97483,"language":30706,"meta":30,"style":30},"#部分行部分列 数组名[行切片，列切片]\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",[32,97485,97486,97491,97501,97505,97509,97514,97519,97523,97535,97539,97543,97548,97553,97558,97563,97567,97572],{"__ignoreMap":30},[35,97487,97488],{"class":37,"line":38},[35,97489,97490],{"class":41},"#部分行部分列 数组名[行切片，列切片]\n",[35,97492,97493,97496,97498],{"class":37,"line":45},[35,97494,97495],{"class":359},"a[:",[35,97497,574],{"class":58},[35,97499,97500],{"class":359},",:]\n",[35,97502,97503],{"class":37,"line":55},[35,97504,93889],{"class":41},[35,97506,97507],{"class":37,"line":65},[35,97508,94253],{"class":306},[35,97510,97511],{"class":37,"line":74},[35,97512,97513],{"class":306},"array([[ 1,  2,  3,  4,  5,  6],\n",[35,97515,97516],{"class":37,"line":83},[35,97517,97518],{"class":306},"       [ 7,  8,  9, 10, 11, 12]])\n",[35,97520,97521],{"class":37,"line":92},[35,97522,94253],{"class":306},[35,97524,97525,97527,97529,97531,97533],{"class":37,"line":101},[35,97526,97458],{"class":359},[35,97528,713],{"class":58},[35,97530,1353],{"class":359},[35,97532,789],{"class":58},[35,97534,33572],{"class":359},[35,97536,97537],{"class":37,"line":110},[35,97538,93889],{"class":41},[35,97540,97541],{"class":37,"line":119},[35,97542,94253],{"class":306},[35,97544,97545],{"class":37,"line":128},[35,97546,97547],{"class":306},"array([[ 2,  3,  4],\n",[35,97549,97550],{"class":37,"line":137},[35,97551,97552],{"class":306},"       [ 8,  9, 10],\n",[35,97554,97555],{"class":37,"line":144},[35,97556,97557],{"class":306},"       [14, 15, 16],\n",[35,97559,97560],{"class":37,"line":150},[35,97561,97562],{"class":306},"       [20, 21, 22]])\n",[35,97564,97565],{"class":37,"line":159},[35,97566,94253],{"class":306},[35,97568,97569],{"class":37,"line":168},[35,97570,97571],{"class":41},"#对列行同时进行切片，使用了step参数\n",[35,97573,97574,97577,97579,97582,97584],{"class":37,"line":177},[35,97575,97576],{"class":359},"a[::",[35,97578,574],{"class":58},[35,97580,97581],{"class":359},",::",[35,97583,574],{"class":58},[35,97585,33572],{"class":359},[21,97587,97588],{},"⑤同时获取两个元素",[25,97590,97592],{"className":30704,"code":97591,"language":30706,"meta":30,"style":30},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[32,97593,97594,97599,97604],{"__ignoreMap":30},[35,97595,97596],{"class":37,"line":38},[35,97597,97598],{"class":41},"#同时获取第三行第二列，第四行第一列\n",[35,97600,97601],{"class":37,"line":45},[35,97602,97603],{"class":41},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[35,97605,97606,97609,97611,97613,97615,97617,97619,97621,97623],{"class":37,"line":55},[35,97607,97608],{"class":359},"a[(",[35,97610,574],{"class":58},[35,97612,872],{"class":359},[35,97614,568],{"class":58},[35,97616,42573],{"class":359},[35,97618,713],{"class":58},[35,97620,872],{"class":359},[35,97622,687],{"class":58},[35,97624,97625],{"class":359},")]\n",[21,97627,97628],{},"⑥切片，对行进行反向获取",[25,97630,97632],{"className":30704,"code":97631,"language":30706,"meta":30,"style":30},"#切片 对所有行进行反向获取\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",[32,97633,97634,97639,97649,97653,97657,97662,97667,97672,97677,97681,97686,97702,97706,97711,97716,97721,97726],{"__ignoreMap":30},[35,97635,97636],{"class":37,"line":38},[35,97637,97638],{"class":41},"#切片 对所有行进行反向获取\n",[35,97640,97641,97643,97645,97647],{"class":37,"line":45},[35,97642,97576],{"class":359},[35,97644,1026],{"class":495},[35,97646,713],{"class":58},[35,97648,33572],{"class":359},[35,97650,97651],{"class":37,"line":55},[35,97652,93889],{"class":41},[35,97654,97655],{"class":37,"line":65},[35,97656,94253],{"class":306},[35,97658,97659],{"class":37,"line":74},[35,97660,97661],{"class":306},"array([[19, 20, 21, 22, 23, 24],\n",[35,97663,97664],{"class":37,"line":83},[35,97665,97666],{"class":306},"       [13, 14, 15, 16, 17, 18],\n",[35,97668,97669],{"class":37,"line":92},[35,97670,97671],{"class":306},"       [ 7,  8,  9, 10, 11, 12],\n",[35,97673,97674],{"class":37,"line":101},[35,97675,97676],{"class":306},"       [ 1,  2,  3,  4,  5,  6]])\n",[35,97678,97679],{"class":37,"line":110},[35,97680,94253],{"class":306},[35,97682,97683],{"class":37,"line":119},[35,97684,97685],{"class":41},"#对行列都进行反向切片获取\n",[35,97687,97688,97690,97692,97694,97696,97698,97700],{"class":37,"line":128},[35,97689,97576],{"class":359},[35,97691,1026],{"class":495},[35,97693,713],{"class":58},[35,97695,97581],{"class":359},[35,97697,1026],{"class":495},[35,97699,713],{"class":58},[35,97701,33572],{"class":359},[35,97703,97704],{"class":37,"line":137},[35,97705,94253],{"class":306},[35,97707,97708],{"class":37,"line":144},[35,97709,97710],{"class":306},"array([[24, 23, 22, 21, 20, 19],\n",[35,97712,97713],{"class":37,"line":150},[35,97714,97715],{"class":306},"       [18, 17, 16, 15, 14, 13],\n",[35,97717,97718],{"class":37,"line":159},[35,97719,97720],{"class":306},"       [12, 11, 10,  9,  8,  7],\n",[35,97722,97723],{"class":37,"line":168},[35,97724,97725],{"class":306},"       [ 6,  5,  4,  3,  2,  1]])\n",[35,97727,97728],{"class":37,"line":177},[35,97729,94253],{"class":306},[21,97731,97732],{},"⑦修改元素",[25,97734,97736],{"className":30704,"code":97735,"language":30706,"meta":30,"style":30},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[32,97737,97738,97743,97761,97766],{"__ignoreMap":30},[35,97739,97740],{"class":37,"line":38},[35,97741,97742],{"class":41},"#获取前两行和前两列\n",[35,97744,97745,97748,97750,97752,97754,97757,97759],{"class":37,"line":45},[35,97746,97747],{"class":359},"sub_a",[35,97749,544],{"class":495},[35,97751,97495],{"class":359},[35,97753,574],{"class":58},[35,97755,97756],{"class":359},",:",[35,97758,574],{"class":58},[35,97760,33572],{"class":359},[35,97762,97763],{"class":37,"line":55},[35,97764,97765],{"class":41},"#修改sub_a第一个元素的值\n",[35,97767,97768,97771,97773,97775,97777,97779,97781],{"class":37,"line":65},[35,97769,97770],{"class":359},"sub_a[",[35,97772,687],{"class":58},[35,97774,872],{"class":359},[35,97776,687],{"class":58},[35,97778,1434],{"class":359},[35,97780,544],{"class":495},[35,97782,97783],{"class":58},"100\n",[21,97785,97786],{},"⑧数组复制copy()",[25,97788,97790],{"className":30704,"code":97789,"language":30706,"meta":30,"style":30},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[32,97791,97792,97797,97807,97812],{"__ignoreMap":30},[35,97793,97794],{"class":37,"line":38},[35,97795,97796],{"class":41},"#数组复制\n",[35,97798,97799,97802,97804],{"class":37,"line":45},[35,97800,97801],{"class":359},"copy_a",[35,97803,544],{"class":495},[35,97805,97806],{"class":359},"np.copy(sub_a)\n",[35,97808,97809],{"class":37,"line":55},[35,97810,97811],{"class":41},"#修改copy_a后不影响原数组\n",[35,97813,97814,97817,97819,97821,97823,97825,97827],{"class":37,"line":65},[35,97815,97816],{"class":359},"copy_a[",[35,97818,687],{"class":58},[35,97820,872],{"class":359},[35,97822,687],{"class":58},[35,97824,1434],{"class":359},[35,97826,544],{"class":495},[35,97828,97783],{"class":58},[21,97830,97831],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[416,97833,97834],{},"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":30,"searchDepth":45,"depth":45,"links":97836},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97353,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97843,"title":97844,"body":97845,"description":421,"extension":422,"meta":98337,"navigation":140,"path":98338,"seo":98339,"stem":98340,"__hash__":98341},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97846,"toc":98329},[97847,97850,97854,97857,97860,97913,97916,97941,97944,97963,97983,97986,98002,98006,98052,98056,98098,98102,98105,98108,98111,98114,98117,98179,98239,98243,98246,98303,98307,98312,98321,98326],[10,97848,97844],{"id":97849},"_5改变数组的维度",[438,97851,97853],{"id":97852},"_51-使用reshape","5.1 使用reshape()",[21,97855,97856],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[21,97858,97859],{},"①一维数组转换为二维数组",[25,97861,97863],{"className":30704,"code":97862,"language":30706,"meta":30,"style":30},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[32,97864,97865,97881,97886,97891,97896],{"__ignoreMap":30},[35,97866,97867,97869,97871,97873,97875,97877,97879],{"class":37,"line":38},[35,97868,734],{"class":359},[35,97870,544],{"class":495},[35,97872,93327],{"class":359},[35,97874,713],{"class":58},[35,97876,872],{"class":359},[35,97878,1017],{"class":58},[35,97880,505],{"class":359},[35,97882,97883],{"class":37,"line":45},[35,97884,97885],{"class":41},"#将一维数组进行转换\n",[35,97887,97888],{"class":37,"line":55},[35,97889,97890],{"class":41},"#注意点：元素个数不可以变\n",[35,97892,97893],{"class":37,"line":65},[35,97894,97895],{"class":41},"#转换维度要保持一致，不一致就异常！！！\n",[35,97897,97898,97900,97902,97905,97907,97909,97911],{"class":37,"line":74},[35,97899,93631],{"class":359},[35,97901,544],{"class":495},[35,97903,97904],{"class":359},"a.reshape(",[35,97906,574],{"class":58},[35,97908,872],{"class":359},[35,97910,408],{"class":58},[35,97912,505],{"class":359},[21,97914,97915],{},"②一维数组转换为三维数组",[25,97917,97919],{"className":30704,"code":97918,"language":30706,"meta":30,"style":30},"aaa=a.reshape(2,3,2)\n",[32,97920,97921],{"__ignoreMap":30},[35,97922,97923,97925,97927,97929,97931,97933,97935,97937,97939],{"class":37,"line":38},[35,97924,95846],{"class":359},[35,97926,544],{"class":495},[35,97928,97904],{"class":359},[35,97930,574],{"class":58},[35,97932,872],{"class":359},[35,97934,568],{"class":58},[35,97936,872],{"class":359},[35,97938,574],{"class":58},[35,97940,505],{"class":359},[21,97942,97943],{},"③二维数组转化为一维数组",[25,97945,97947],{"className":30704,"code":97946,"language":30706,"meta":30,"style":30},"#知道元素个数：\naa.reshape(12)\n",[32,97948,97949,97954],{"__ignoreMap":30},[35,97950,97951],{"class":37,"line":38},[35,97952,97953],{"class":41},"#知道元素个数：\n",[35,97955,97956,97959,97961],{"class":37,"line":45},[35,97957,97958],{"class":359},"aa.reshape(",[35,97960,992],{"class":58},[35,97962,505],{"class":359},[25,97964,97966],{"className":30704,"code":97965,"language":30706,"meta":30,"style":30},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[32,97967,97968,97973],{"__ignoreMap":30},[35,97969,97970],{"class":37,"line":38},[35,97971,97972],{"class":41},"#不知道元素个数，参数传递-1\n",[35,97974,97975,97977,97979,97981],{"class":37,"line":45},[35,97976,97958],{"class":359},[35,97978,1026],{"class":495},[35,97980,713],{"class":58},[35,97982,505],{"class":359},[21,97984,97985],{},"④三维数组转换为一维数组",[25,97987,97989],{"className":30704,"code":97988,"language":30706,"meta":30,"style":30},"aaa.reshape(-1)\n",[32,97990,97991],{"__ignoreMap":30},[35,97992,97993,97996,97998,98000],{"class":37,"line":38},[35,97994,97995],{"class":359},"aaa.reshape(",[35,97997,1026],{"class":495},[35,97999,713],{"class":58},[35,98001,505],{"class":359},[438,98003,98005],{"id":98004},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[25,98007,98009],{"className":30704,"code":98008,"language":30706,"meta":30,"style":30},"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",[32,98010,98011,98038,98043,98047],{"__ignoreMap":30},[35,98012,98013,98015,98017,98019,98021,98023,98025,98027,98029,98031,98033,98035],{"class":37,"line":38},[35,98014,93631],{"class":359},[35,98016,544],{"class":495},[35,98018,93327],{"class":359},[35,98020,713],{"class":58},[35,98022,872],{"class":359},[35,98024,1017],{"class":58},[35,98026,93332],{"class":359},[35,98028,574],{"class":58},[35,98030,872],{"class":359},[35,98032,408],{"class":58},[35,98034,923],{"class":359},[35,98036,98037],{"class":41},"#转换为2行6列的数组\n",[35,98039,98040],{"class":37,"line":45},[35,98041,98042],{"class":359},"aa.revel()\n",[35,98044,98045],{"class":37,"line":55},[35,98046,93889],{"class":41},[35,98048,98049],{"class":37,"line":65},[35,98050,98051],{"class":41},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[438,98053,98055],{"id":98054},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[25,98057,98059],{"className":30704,"code":98058,"language":30706,"meta":30,"style":30},"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",[32,98060,98061,98085,98090,98094],{"__ignoreMap":30},[35,98062,98063,98065,98067,98069,98071,98073,98075,98077,98079,98081,98083],{"class":37,"line":38},[35,98064,93631],{"class":359},[35,98066,544],{"class":495},[35,98068,93327],{"class":359},[35,98070,713],{"class":58},[35,98072,872],{"class":359},[35,98074,1017],{"class":58},[35,98076,93332],{"class":359},[35,98078,574],{"class":58},[35,98080,872],{"class":359},[35,98082,408],{"class":58},[35,98084,505],{"class":359},[35,98086,98087],{"class":37,"line":45},[35,98088,98089],{"class":359},"aa.flatten()\n",[35,98091,98092],{"class":37,"line":55},[35,98093,93889],{"class":41},[35,98095,98096],{"class":37,"line":65},[35,98097,98051],{"class":41},[438,98099,98101],{"id":98100},"_54-使用resize","5.4 使用resize()",[21,98103,98104],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[21,98106,98107],{},"通过resize方法可以改变数组的维度",[21,98109,98110],{},"#resize修改数组维度",[21,98112,98113],{},"#以元组的形式指定形状",[21,98115,98116],{},"#改变的是原数组",[25,98118,98120],{"className":30704,"code":98119,"language":30706,"meta":30,"style":30},"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",[32,98121,98122,98138,98158,98171,98175],{"__ignoreMap":30},[35,98123,98124,98126,98128,98130,98132,98134,98136],{"class":37,"line":38},[35,98125,734],{"class":359},[35,98127,544],{"class":495},[35,98129,93327],{"class":359},[35,98131,713],{"class":58},[35,98133,872],{"class":359},[35,98135,1017],{"class":58},[35,98137,505],{"class":359},[35,98139,98140,98143,98145,98147,98149,98151,98153,98155],{"class":37,"line":45},[35,98141,98142],{"class":359},"a.shape",[35,98144,544],{"class":495},[35,98146,499],{"class":359},[35,98148,574],{"class":58},[35,98150,872],{"class":359},[35,98152,408],{"class":58},[35,98154,923],{"class":359},[35,98156,98157],{"class":41},"#改变了原数组\n",[35,98159,98160,98162,98164,98167,98169],{"class":37,"line":55},[35,98161,734],{"class":359},[35,98163,544],{"class":495},[35,98165,98166],{"class":359},"resize((",[35,98168,992],{"class":58},[35,98170,30823],{"class":359},[35,98172,98173],{"class":37,"line":65},[35,98174,93889],{"class":41},[35,98176,98177],{"class":37,"line":74},[35,98178,98051],{"class":41},[25,98180,98182],{"className":30704,"code":98181,"language":30706,"meta":30,"style":30},"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",[32,98183,98184,98197,98201,98205,98210,98215,98220,98225,98230,98235],{"__ignoreMap":30},[35,98185,98186,98189,98191,98193,98195],{"class":37,"line":38},[35,98187,98188],{"class":359},"a.resize((",[35,98190,408],{"class":58},[35,98192,872],{"class":359},[35,98194,574],{"class":58},[35,98196,30823],{"class":359},[35,98198,98199],{"class":37,"line":45},[35,98200,93889],{"class":41},[35,98202,98203],{"class":37,"line":55},[35,98204,94253],{"class":306},[35,98206,98207],{"class":37,"line":65},[35,98208,98209],{"class":306},"array([[ 1,  2],\n",[35,98211,98212],{"class":37,"line":74},[35,98213,98214],{"class":306},"       [ 3,  4],\n",[35,98216,98217],{"class":37,"line":83},[35,98218,98219],{"class":306},"       [ 5,  6],\n",[35,98221,98222],{"class":37,"line":92},[35,98223,98224],{"class":306},"       [ 7,  8],\n",[35,98226,98227],{"class":37,"line":101},[35,98228,98229],{"class":306},"       [ 9, 10],\n",[35,98231,98232],{"class":37,"line":110},[35,98233,98234],{"class":306},"       [11, 12]])\n",[35,98236,98237],{"class":37,"line":119},[35,98238,94253],{"class":306},[438,98240,98242],{"id":98241},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[21,98244,98245],{},"改变了原数组",[25,98247,98249],{"className":30704,"code":98248,"language":30706,"meta":30,"style":30},"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",[32,98250,98251,98267,98283,98287,98291,98295,98299],{"__ignoreMap":30},[35,98252,98253,98255,98257,98259,98261,98263,98265],{"class":37,"line":38},[35,98254,734],{"class":359},[35,98256,544],{"class":495},[35,98258,93327],{"class":359},[35,98260,713],{"class":58},[35,98262,872],{"class":359},[35,98264,1017],{"class":58},[35,98266,505],{"class":359},[35,98268,98269,98271,98273,98275,98277,98279,98281],{"class":37,"line":45},[35,98270,98142],{"class":359},[35,98272,544],{"class":495},[35,98274,499],{"class":359},[35,98276,574],{"class":58},[35,98278,872],{"class":359},[35,98280,408],{"class":58},[35,98282,505],{"class":359},[35,98284,98285],{"class":37,"line":55},[35,98286,93889],{"class":41},[35,98288,98289],{"class":37,"line":65},[35,98290,94253],{"class":306},[35,98292,98293],{"class":37,"line":74},[35,98294,97513],{"class":306},[35,98296,98297],{"class":37,"line":83},[35,98298,97518],{"class":306},[35,98300,98301],{"class":37,"line":92},[35,98302,94253],{"class":306},[438,98304,98306],{"id":98305},"_56-重要比较","5.6 重要比较：",[21,98308,98309],{},[1823,98310],{"alt":30,"src":98311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[21,98313,98314,98315,98317,98318,98320],{},"口诀：NumPy 函数要么用 ",[32,98316,96288],{},"，要么用 ",[32,98319,31822],{},"，创建结构用 shape，造数据用 size",[21,98322,98323],{},[1823,98324],{"alt":30,"src":98325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[416,98327,98328],{},"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":30,"searchDepth":45,"depth":45,"links":98330},[98331,98332,98333,98334,98335,98336],{"id":97852,"depth":45,"text":97853},{"id":98004,"depth":45,"text":98005},{"id":98054,"depth":45,"text":98055},{"id":98100,"depth":45,"text":98101},{"id":98241,"depth":45,"text":98242},{"id":98305,"depth":45,"text":98306},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97844,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98343,"title":98344,"body":98345,"description":421,"extension":422,"meta":99417,"navigation":140,"path":99418,"seo":99419,"stem":99420,"__hash__":99421},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98346,"toc":99411},[98347,98350,98354,98357,98360,98363,98428,98431,98471,98474,98556,98559,98564,98586,98588,98593,98598,98601,98604,98759,98762,98964,98968,98971,98974,99042,99044,99049,99052,99055,99135,99139,99142,99144,99217,99219,99224,99226,99306,99310,99313,99316,99319,99322,99325,99328,99408],[10,98348,98344],{"id":98349},"_6数组的拼接",[438,98351,98353],{"id":98352},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[21,98355,98356],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[21,98358,98359],{},"函数内部传两个数列构成的数列或者元组",[21,98361,98362],{},"①一维数组的拼接",[25,98364,98366],{"className":30704,"code":98365,"language":30706,"meta":30,"style":30},"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",[32,98367,98368,98388,98408,98413,98418,98423],{"__ignoreMap":30},[35,98369,98370,98372,98374,98376,98378,98380,98382,98384,98386],{"class":37,"line":38},[35,98371,734],{"class":359},[35,98373,544],{"class":495},[35,98375,93349],{"class":359},[35,98377,713],{"class":58},[35,98379,872],{"class":359},[35,98381,574],{"class":58},[35,98383,872],{"class":359},[35,98385,568],{"class":58},[35,98387,4991],{"class":359},[35,98389,98390,98392,98394,98396,98398,98400,98402,98404,98406],{"class":37,"line":45},[35,98391,759],{"class":359},[35,98393,544],{"class":495},[35,98395,93349],{"class":359},[35,98397,789],{"class":58},[35,98399,872],{"class":359},[35,98401,372],{"class":58},[35,98403,872],{"class":359},[35,98405,408],{"class":58},[35,98407,4991],{"class":359},[35,98409,98410],{"class":37,"line":55},[35,98411,98412],{"class":41},"#调用concatenate进行数组拼接\n",[35,98414,98415],{"class":37,"line":65},[35,98416,98417],{"class":359},"np.concatenate((a,b))\n",[35,98419,98420],{"class":37,"line":74},[35,98421,98422],{"class":41},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[35,98424,98425],{"class":37,"line":83},[35,98426,98427],{"class":41},"#np.concatenate([a,b])\n",[21,98429,98430],{},"②一维多个数组拼接",[25,98432,98434],{"className":30704,"code":98433,"language":30706,"meta":30,"style":30},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[32,98435,98436,98441,98461,98466],{"__ignoreMap":30},[35,98437,98438],{"class":37,"line":38},[35,98439,98440],{"class":41},"#也可以多个数组进行拼接\n",[35,98442,98443,98445,98447,98449,98451,98453,98455,98457,98459],{"class":37,"line":45},[35,98444,784],{"class":359},[35,98446,544],{"class":495},[35,98448,93349],{"class":359},[35,98450,940],{"class":58},[35,98452,872],{"class":359},[35,98454,966],{"class":58},[35,98456,872],{"class":359},[35,98458,1017],{"class":58},[35,98460,4991],{"class":359},[35,98462,98463],{"class":37,"line":55},[35,98464,98465],{"class":359},"c\n",[35,98467,98468],{"class":37,"line":65},[35,98469,98470],{"class":359},"np.concatenate((a,b,c))\n",[21,98472,98473],{},"③二维数组拼接",[25,98475,98477],{"className":30704,"code":98476,"language":30706,"meta":30,"style":30},"#二维数组使用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",[32,98478,98479,98484,98508,98533,98538,98543],{"__ignoreMap":30},[35,98480,98481],{"class":37,"line":38},[35,98482,98483],{"class":41},"#二维数组使用concatenate进行拼接\n",[35,98485,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506],{"class":37,"line":45},[35,98487,93631],{"class":359},[35,98489,544],{"class":495},[35,98491,93327],{"class":359},[35,98493,713],{"class":58},[35,98495,872],{"class":359},[35,98497,1017],{"class":58},[35,98499,93332],{"class":359},[35,98501,568],{"class":58},[35,98503,872],{"class":359},[35,98505,789],{"class":58},[35,98507,505],{"class":359},[35,98509,98510,98513,98515,98517,98519,98521,98523,98525,98527,98529,98531],{"class":37,"line":55},[35,98511,98512],{"class":359},"bb",[35,98514,544],{"class":495},[35,98516,93327],{"class":359},[35,98518,832],{"class":58},[35,98520,872],{"class":359},[35,98522,1136],{"class":58},[35,98524,93332],{"class":359},[35,98526,568],{"class":58},[35,98528,872],{"class":359},[35,98530,789],{"class":58},[35,98532,505],{"class":359},[35,98534,98535],{"class":37,"line":65},[35,98536,98537],{"class":41},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[35,98539,98540],{"class":37,"line":74},[35,98541,98542],{"class":41},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[35,98544,98545,98548,98550,98552,98554],{"class":37,"line":83},[35,98546,98547],{"class":359},"np.concatenate((aa,bb),",[35,98549,47840],{"class":5550},[35,98551,544],{"class":495},[35,98553,687],{"class":58},[35,98555,505],{"class":359},[21,98557,98558],{},"结果：",[21,98560,98561],{},[1823,98562],{"alt":30,"src":98563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[25,98565,98567],{"className":30704,"code":98566,"language":30706,"meta":30,"style":30},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[32,98568,98569,98574],{"__ignoreMap":30},[35,98570,98571],{"class":37,"line":38},[35,98572,98573],{"class":41},"#指定axis为1进行拼接\n",[35,98575,98576,98578,98580,98582,98584],{"class":37,"line":45},[35,98577,98547],{"class":359},[35,98579,47840],{"class":5550},[35,98581,544],{"class":495},[35,98583,713],{"class":58},[35,98585,505],{"class":359},[21,98587,98558],{},[21,98589,98590],{},[1823,98591],{"alt":30,"src":98592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[21,98594,98595],{},[645,98596,98597],{},"二维数组总结：0竖着方向，1横着方向",[21,98599,98600],{},"④三维数组拼接",[21,98602,98603],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[25,98605,98607],{"className":30704,"code":98606,"language":30706,"meta":30,"style":30},"#两个三行六列\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",[32,98608,98609,98614,98642,98672,98677,98694,98699,98704,98709,98726,98731,98736,98741,98754],{"__ignoreMap":30},[35,98610,98611],{"class":37,"line":38},[35,98612,98613],{"class":41},"#两个三行六列\n",[35,98615,98616,98618,98620,98622,98624,98626,98628,98630,98632,98634,98636,98638,98640],{"class":37,"line":45},[35,98617,95846],{"class":359},[35,98619,544],{"class":495},[35,98621,93327],{"class":359},[35,98623,713],{"class":58},[35,98625,872],{"class":359},[35,98627,820],{"class":58},[35,98629,93332],{"class":359},[35,98631,574],{"class":58},[35,98633,872],{"class":359},[35,98635,568],{"class":58},[35,98637,872],{"class":359},[35,98639,408],{"class":58},[35,98641,505],{"class":359},[35,98643,98644,98647,98649,98651,98653,98655,98658,98660,98662,98664,98666,98668,98670],{"class":37,"line":55},[35,98645,98646],{"class":359},"bbb",[35,98648,544],{"class":495},[35,98650,93327],{"class":359},[35,98652,832],{"class":58},[35,98654,872],{"class":359},[35,98656,98657],{"class":58},"137",[35,98659,93332],{"class":359},[35,98661,574],{"class":58},[35,98663,872],{"class":359},[35,98665,568],{"class":58},[35,98667,872],{"class":359},[35,98669,408],{"class":58},[35,98671,505],{"class":359},[35,98673,98674],{"class":37,"line":65},[35,98675,98676],{"class":41},"#axis=0\n",[35,98678,98679,98681,98683,98686,98688,98690,98692],{"class":37,"line":74},[35,98680,1189],{"class":359},[35,98682,544],{"class":495},[35,98684,98685],{"class":359},"np.concatenate((aaa,bbb),",[35,98687,47840],{"class":5550},[35,98689,544],{"class":495},[35,98691,687],{"class":58},[35,98693,505],{"class":359},[35,98695,98696],{"class":37,"line":83},[35,98697,98698],{"class":359},"s.shape\n",[35,98700,98701],{"class":37,"line":92},[35,98702,98703],{"class":41},"#输出：(4,3,6)\n",[35,98705,98706],{"class":37,"line":101},[35,98707,98708],{"class":41},"#axis=1\n",[35,98710,98711,98714,98716,98718,98720,98722,98724],{"class":37,"line":110},[35,98712,98713],{"class":359},"ss",[35,98715,544],{"class":495},[35,98717,98685],{"class":359},[35,98719,47840],{"class":5550},[35,98721,544],{"class":495},[35,98723,713],{"class":58},[35,98725,505],{"class":359},[35,98727,98728],{"class":37,"line":119},[35,98729,98730],{"class":359},"ss.shape\n",[35,98732,98733],{"class":37,"line":128},[35,98734,98735],{"class":41},"#输出：(2,6,6)\n",[35,98737,98738],{"class":37,"line":137},[35,98739,98740],{"class":41},"#axis=2\n",[35,98742,98743,98745,98747,98749,98751],{"class":37,"line":144},[35,98744,98685],{"class":359},[35,98746,47840],{"class":5550},[35,98748,544],{"class":495},[35,98750,574],{"class":58},[35,98752,98753],{"class":359},").shape\n",[35,98755,98756],{"class":37,"line":150},[35,98757,98758],{"class":41},"#输出：（2，3，12）\n",[21,98760,98761],{},"⑤四维数组拼接",[25,98763,98765],{"className":30704,"code":98764,"language":30706,"meta":30,"style":30},"#两个三行六列\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",[32,98766,98767,98771,98799,98827,98852,98878,98882,98895,98900,98904,98916,98921,98925,98937,98942,98947,98959],{"__ignoreMap":30},[35,98768,98769],{"class":37,"line":38},[35,98770,98613],{"class":41},[35,98772,98773,98775,98777,98779,98781,98783,98785,98787,98789,98791,98793,98795,98797],{"class":37,"line":45},[35,98774,95846],{"class":359},[35,98776,544],{"class":495},[35,98778,93327],{"class":359},[35,98780,713],{"class":58},[35,98782,872],{"class":359},[35,98784,820],{"class":58},[35,98786,93332],{"class":359},[35,98788,574],{"class":58},[35,98790,872],{"class":359},[35,98792,568],{"class":58},[35,98794,872],{"class":359},[35,98796,408],{"class":58},[35,98798,505],{"class":359},[35,98800,98801,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825],{"class":37,"line":55},[35,98802,98646],{"class":359},[35,98804,544],{"class":495},[35,98806,93327],{"class":359},[35,98808,832],{"class":58},[35,98810,872],{"class":359},[35,98812,98657],{"class":58},[35,98814,93332],{"class":359},[35,98816,574],{"class":58},[35,98818,872],{"class":359},[35,98820,568],{"class":58},[35,98822,872],{"class":359},[35,98824,408],{"class":58},[35,98826,505],{"class":359},[35,98828,98829,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850],{"class":37,"line":65},[35,98830,98831],{"class":359},"aaaa",[35,98833,544],{"class":495},[35,98835,97995],{"class":359},[35,98837,574],{"class":58},[35,98839,872],{"class":359},[35,98841,568],{"class":58},[35,98843,872],{"class":359},[35,98845,568],{"class":58},[35,98847,872],{"class":359},[35,98849,574],{"class":58},[35,98851,505],{"class":359},[35,98853,98854,98857,98859,98862,98864,98866,98868,98870,98872,98874,98876],{"class":37,"line":74},[35,98855,98856],{"class":359},"bbbb",[35,98858,544],{"class":495},[35,98860,98861],{"class":359},"bbb.reshape(",[35,98863,574],{"class":58},[35,98865,872],{"class":359},[35,98867,568],{"class":58},[35,98869,872],{"class":359},[35,98871,568],{"class":58},[35,98873,872],{"class":359},[35,98875,574],{"class":58},[35,98877,505],{"class":359},[35,98879,98880],{"class":37,"line":83},[35,98881,98676],{"class":41},[35,98883,98884,98887,98889,98891,98893],{"class":37,"line":92},[35,98885,98886],{"class":359},"np.concatenate((aaaa,bbbb),",[35,98888,47840],{"class":5550},[35,98890,544],{"class":495},[35,98892,687],{"class":58},[35,98894,98753],{"class":359},[35,98896,98897],{"class":37,"line":101},[35,98898,98899],{"class":41},"#结果：（4，3，3，2）\n",[35,98901,98902],{"class":37,"line":110},[35,98903,98708],{"class":41},[35,98905,98906,98908,98910,98912,98914],{"class":37,"line":119},[35,98907,98886],{"class":359},[35,98909,47840],{"class":5550},[35,98911,544],{"class":495},[35,98913,713],{"class":58},[35,98915,98753],{"class":359},[35,98917,98918],{"class":37,"line":128},[35,98919,98920],{"class":41},"#结果：（2，6，3，2）\n",[35,98922,98923],{"class":37,"line":137},[35,98924,98740],{"class":41},[35,98926,98927,98929,98931,98933,98935],{"class":37,"line":144},[35,98928,98886],{"class":359},[35,98930,47840],{"class":5550},[35,98932,544],{"class":495},[35,98934,574],{"class":58},[35,98936,98753],{"class":359},[35,98938,98939],{"class":37,"line":150},[35,98940,98941],{"class":41},"#结果：（2，3，6，2）\n",[35,98943,98944],{"class":37,"line":159},[35,98945,98946],{"class":41},"#axis=3\n",[35,98948,98949,98951,98953,98955,98957],{"class":37,"line":168},[35,98950,98886],{"class":359},[35,98952,47840],{"class":5550},[35,98954,544],{"class":495},[35,98956,568],{"class":58},[35,98958,98753],{"class":359},[35,98960,98961],{"class":37,"line":177},[35,98962,98963],{"class":41},"#结果：（2，3，3，4）\n",[438,98965,98967],{"id":98966},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[21,98969,98970],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[21,98972,98973],{},"①二维数组",[25,98975,98977],{"className":30704,"code":98976,"language":30706,"meta":30,"style":30},"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",[32,98978,98979,99003,99027,99032,99037],{"__ignoreMap":30},[35,98980,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001],{"class":37,"line":38},[35,98982,93631],{"class":359},[35,98984,544],{"class":495},[35,98986,93327],{"class":359},[35,98988,713],{"class":58},[35,98990,872],{"class":359},[35,98992,1017],{"class":58},[35,98994,93332],{"class":359},[35,98996,568],{"class":58},[35,98998,872],{"class":359},[35,99000,789],{"class":58},[35,99002,505],{"class":359},[35,99004,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025],{"class":37,"line":45},[35,99006,98512],{"class":359},[35,99008,544],{"class":495},[35,99010,93327],{"class":359},[35,99012,832],{"class":58},[35,99014,872],{"class":359},[35,99016,1136],{"class":58},[35,99018,93332],{"class":359},[35,99020,568],{"class":58},[35,99022,872],{"class":359},[35,99024,789],{"class":58},[35,99026,505],{"class":359},[35,99028,99029],{"class":37,"line":55},[35,99030,99031],{"class":359},"np.hstack((aa,bb))\n",[35,99033,99034],{"class":37,"line":65},[35,99035,99036],{"class":41},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[35,99038,99039],{"class":37,"line":74},[35,99040,99041],{"class":41},"#np.hstack([aa,bb])\n",[21,99043,98558],{},[21,99045,99046],{},[1823,99047],{"alt":30,"src":99048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[21,99050,99051],{},"等效于concatenate()函数中axis=1时的情况",[21,99053,99054],{},"②三维数组",[25,99056,99058],{"className":30704,"code":99057,"language":30706,"meta":30,"style":30},"#两个三行六列\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",[32,99059,99060,99064,99092,99120,99125,99130],{"__ignoreMap":30},[35,99061,99062],{"class":37,"line":38},[35,99063,98613],{"class":41},[35,99065,99066,99068,99070,99072,99074,99076,99078,99080,99082,99084,99086,99088,99090],{"class":37,"line":45},[35,99067,95846],{"class":359},[35,99069,544],{"class":495},[35,99071,93327],{"class":359},[35,99073,713],{"class":58},[35,99075,872],{"class":359},[35,99077,820],{"class":58},[35,99079,93332],{"class":359},[35,99081,574],{"class":58},[35,99083,872],{"class":359},[35,99085,568],{"class":58},[35,99087,872],{"class":359},[35,99089,408],{"class":58},[35,99091,505],{"class":359},[35,99093,99094,99096,99098,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118],{"class":37,"line":55},[35,99095,98646],{"class":359},[35,99097,544],{"class":495},[35,99099,93327],{"class":359},[35,99101,832],{"class":58},[35,99103,872],{"class":359},[35,99105,98657],{"class":58},[35,99107,93332],{"class":359},[35,99109,574],{"class":58},[35,99111,872],{"class":359},[35,99113,568],{"class":58},[35,99115,872],{"class":359},[35,99117,408],{"class":58},[35,99119,505],{"class":359},[35,99121,99122],{"class":37,"line":65},[35,99123,99124],{"class":41},"#使用hstack\n",[35,99126,99127],{"class":37,"line":74},[35,99128,99129],{"class":359},"np.hstack((aaa,bbb)).shape\n",[35,99131,99132],{"class":37,"line":83},[35,99133,99134],{"class":41},"#输出：（2，6，6）\n",[438,99136,99138],{"id":99137},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[21,99140,99141],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[21,99143,98973],{},[25,99145,99147],{"className":30704,"code":99146,"language":30706,"meta":30,"style":30},"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",[32,99148,99149,99173,99197,99202,99207,99212],{"__ignoreMap":30},[35,99150,99151,99153,99155,99157,99159,99161,99163,99165,99167,99169,99171],{"class":37,"line":38},[35,99152,93631],{"class":359},[35,99154,544],{"class":495},[35,99156,93327],{"class":359},[35,99158,713],{"class":58},[35,99160,872],{"class":359},[35,99162,1017],{"class":58},[35,99164,93332],{"class":359},[35,99166,568],{"class":58},[35,99168,872],{"class":359},[35,99170,789],{"class":58},[35,99172,505],{"class":359},[35,99174,99175,99177,99179,99181,99183,99185,99187,99189,99191,99193,99195],{"class":37,"line":45},[35,99176,98512],{"class":359},[35,99178,544],{"class":495},[35,99180,93327],{"class":359},[35,99182,832],{"class":58},[35,99184,872],{"class":359},[35,99186,1136],{"class":58},[35,99188,93332],{"class":359},[35,99190,568],{"class":58},[35,99192,872],{"class":359},[35,99194,789],{"class":58},[35,99196,505],{"class":359},[35,99198,99199],{"class":37,"line":55},[35,99200,99201],{"class":41},"#vstack 垂直方向进行堆叠\n",[35,99203,99204],{"class":37,"line":65},[35,99205,99206],{"class":359},"np.vstack((aa,bb))\n",[35,99208,99209],{"class":37,"line":74},[35,99210,99211],{"class":41},"#与hstack传的参数类似，等价于：\n",[35,99213,99214],{"class":37,"line":83},[35,99215,99216],{"class":359},"np.vstack([aa,bb])\n",[21,99218,98558],{},[21,99220,99221],{},[1823,99222],{"alt":30,"src":99223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[21,99225,99054],{},[25,99227,99229],{"className":30704,"code":99228,"language":30706,"meta":30,"style":30},"#两个三行六列\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",[32,99230,99231,99235,99263,99291,99296,99301],{"__ignoreMap":30},[35,99232,99233],{"class":37,"line":38},[35,99234,98613],{"class":41},[35,99236,99237,99239,99241,99243,99245,99247,99249,99251,99253,99255,99257,99259,99261],{"class":37,"line":45},[35,99238,95846],{"class":359},[35,99240,544],{"class":495},[35,99242,93327],{"class":359},[35,99244,713],{"class":58},[35,99246,872],{"class":359},[35,99248,820],{"class":58},[35,99250,93332],{"class":359},[35,99252,574],{"class":58},[35,99254,872],{"class":359},[35,99256,568],{"class":58},[35,99258,872],{"class":359},[35,99260,408],{"class":58},[35,99262,505],{"class":359},[35,99264,99265,99267,99269,99271,99273,99275,99277,99279,99281,99283,99285,99287,99289],{"class":37,"line":55},[35,99266,98646],{"class":359},[35,99268,544],{"class":495},[35,99270,93327],{"class":359},[35,99272,832],{"class":58},[35,99274,872],{"class":359},[35,99276,98657],{"class":58},[35,99278,93332],{"class":359},[35,99280,574],{"class":58},[35,99282,872],{"class":359},[35,99284,568],{"class":58},[35,99286,872],{"class":359},[35,99288,408],{"class":58},[35,99290,505],{"class":359},[35,99292,99293],{"class":37,"line":65},[35,99294,99295],{"class":41},"#使用vstack\n",[35,99297,99298],{"class":37,"line":74},[35,99299,99300],{"class":359},"np.vstack((aaa,bbb)).shape\n",[35,99302,99303],{"class":37,"line":83},[35,99304,99305],{"class":41},"#输出：（4，3，6）\n",[438,99307,99309],{"id":99308},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[21,99311,99312],{},"该方法是三维数组特有的方法",[21,99314,99315],{},"也就是说",[21,99317,99318],{},"一维数组拼接方法用：concatenate()",[21,99320,99321],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[21,99323,99324],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[21,99326,99327],{},"四维数组及多维数组只能用concatenate进行拼接",[25,99329,99331],{"className":30704,"code":99330,"language":30706,"meta":30,"style":30},"#两个三行六列\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",[32,99332,99333,99337,99365,99393,99398,99403],{"__ignoreMap":30},[35,99334,99335],{"class":37,"line":38},[35,99336,98613],{"class":41},[35,99338,99339,99341,99343,99345,99347,99349,99351,99353,99355,99357,99359,99361,99363],{"class":37,"line":45},[35,99340,95846],{"class":359},[35,99342,544],{"class":495},[35,99344,93327],{"class":359},[35,99346,713],{"class":58},[35,99348,872],{"class":359},[35,99350,820],{"class":58},[35,99352,93332],{"class":359},[35,99354,574],{"class":58},[35,99356,872],{"class":359},[35,99358,568],{"class":58},[35,99360,872],{"class":359},[35,99362,408],{"class":58},[35,99364,505],{"class":359},[35,99366,99367,99369,99371,99373,99375,99377,99379,99381,99383,99385,99387,99389,99391],{"class":37,"line":55},[35,99368,98646],{"class":359},[35,99370,544],{"class":495},[35,99372,93327],{"class":359},[35,99374,832],{"class":58},[35,99376,872],{"class":359},[35,99378,98657],{"class":58},[35,99380,93332],{"class":359},[35,99382,574],{"class":58},[35,99384,872],{"class":359},[35,99386,568],{"class":58},[35,99388,872],{"class":359},[35,99390,408],{"class":58},[35,99392,505],{"class":359},[35,99394,99395],{"class":37,"line":65},[35,99396,99397],{"class":41},"#使用dstack\n",[35,99399,99400],{"class":37,"line":74},[35,99401,99402],{"class":359},"np.dstack((aaa,bbb)).shape\n",[35,99404,99405],{"class":37,"line":83},[35,99406,99407],{"class":41},"#结果：（2，3，12）\n",[416,99409,99410],{},"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":30,"searchDepth":45,"depth":45,"links":99412},[99413,99414,99415,99416],{"id":98352,"depth":45,"text":98353},{"id":98966,"depth":45,"text":98967},{"id":99137,"depth":45,"text":99138},{"id":99308,"depth":45,"text":99309},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98344,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99423,"title":99424,"body":99425,"description":421,"extension":422,"meta":99700,"navigation":140,"path":99701,"seo":99702,"stem":99703,"__hash__":99704},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99426,"toc":99698},[99427,99430,99433,99527,99530,99533,99536,99539,99542,99545,99548,99551,99695],[10,99428,99424],{"id":99429},"_7数组转置",[21,99431,99432],{},"使用transpose()函数",[25,99434,99436],{"className":30704,"code":99435,"language":30706,"meta":30,"style":30},"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",[32,99437,99438,99448,99472,99477,99482,99487,99492,99500,99504,99508,99513,99518,99523],{"__ignoreMap":30},[35,99439,99440,99442,99444,99446],{"class":37,"line":38},[35,99441,30718],{"class":495},[35,99443,31706],{"class":359},[35,99445,31709],{"class":495},[35,99447,31712],{"class":359},[35,99449,99450,99452,99454,99456,99458,99460,99462,99464,99466,99468,99470],{"class":37,"line":45},[35,99451,734],{"class":359},[35,99453,544],{"class":495},[35,99455,32043],{"class":359},[35,99457,713],{"class":58},[35,99459,872],{"class":359},[35,99461,1017],{"class":58},[35,99463,93332],{"class":359},[35,99465,789],{"class":58},[35,99467,872],{"class":359},[35,99469,568],{"class":58},[35,99471,505],{"class":359},[35,99473,99474],{"class":37,"line":55},[35,99475,99476],{"class":41},"#二维数组转置\n",[35,99478,99479],{"class":37,"line":65},[35,99480,99481],{"class":41},"#调用transpose()函数\n",[35,99483,99484],{"class":37,"line":74},[35,99485,99486],{"class":359},"a.transpose()\n",[35,99488,99489],{"class":37,"line":83},[35,99490,99491],{"class":41},"#对于二维数组也可以采用.T来实现\n",[35,99493,99494,99497],{"class":37,"line":92},[35,99495,99496],{"class":359},"a.T",[35,99498,99499],{"class":41},"#与上述代码一样\n",[35,99501,99502],{"class":37,"line":101},[35,99503,93889],{"class":41},[35,99505,99506],{"class":37,"line":110},[35,99507,94253],{"class":306},[35,99509,99510],{"class":37,"line":119},[35,99511,99512],{"class":306},"array([[ 1,  4,  7, 10],\n",[35,99514,99515],{"class":37,"line":128},[35,99516,99517],{"class":306},"       [ 2,  5,  8, 11],\n",[35,99519,99520],{"class":37,"line":137},[35,99521,99522],{"class":306},"       [ 3,  6,  9, 12]])\n",[35,99524,99525],{"class":37,"line":144},[35,99526,94253],{"class":306},[21,99528,99529],{},"也可以使用np.transpose()的形式",[21,99531,99532],{},"#多维数组进行转置 np.transpose()",[21,99534,99535],{},"#对二维数组也可以使用np.transpose()进行转置",[21,99537,99538],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[21,99540,99541],{},"第二个参数，维度可以理解为用axis中的数来理解",[21,99543,99544],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[21,99546,99547],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[21,99549,99550],{},"四维及以上的数组也是一样的道理",[25,99552,99554],{"className":30704,"code":99553,"language":30706,"meta":30,"style":30},"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",[32,99555,99556,99584,99589,99594,99599,99617,99622,99654,99659,99664,99669,99690],{"__ignoreMap":30},[35,99557,99558,99560,99562,99564,99566,99568,99570,99572,99574,99576,99578,99580,99582],{"class":37,"line":38},[35,99559,1314],{"class":359},[35,99561,544],{"class":495},[35,99563,93327],{"class":359},[35,99565,713],{"class":58},[35,99567,872],{"class":359},[35,99569,820],{"class":58},[35,99571,93332],{"class":359},[35,99573,568],{"class":58},[35,99575,872],{"class":359},[35,99577,408],{"class":58},[35,99579,872],{"class":359},[35,99581,574],{"class":58},[35,99583,505],{"class":359},[35,99585,99586],{"class":37,"line":45},[35,99587,99588],{"class":359},"x.shape\n",[35,99590,99591],{"class":37,"line":55},[35,99592,99593],{"class":41},"#结果：（3,6,2）\n",[35,99595,99596],{"class":37,"line":65},[35,99597,99598],{"class":41},"#使用np.transpose()进行转置 变为(2,6,3)\n",[35,99600,99601,99604,99606,99608,99610,99612,99614],{"class":37,"line":74},[35,99602,99603],{"class":359},"np.transpose(x,(",[35,99605,574],{"class":58},[35,99607,872],{"class":359},[35,99609,713],{"class":58},[35,99611,872],{"class":359},[35,99613,687],{"class":58},[35,99615,99616],{"class":359},")).shape\n",[35,99618,99619],{"class":37,"line":83},[35,99620,99621],{"class":41},"#结果：(2,6,3)\n",[35,99623,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642,99644,99646,99648,99650,99652],{"class":37,"line":92},[35,99625,98831],{"class":359},[35,99627,544],{"class":495},[35,99629,93327],{"class":359},[35,99631,713],{"class":58},[35,99633,872],{"class":359},[35,99635,820],{"class":58},[35,99637,93332],{"class":359},[35,99639,568],{"class":58},[35,99641,872],{"class":359},[35,99643,574],{"class":58},[35,99645,872],{"class":359},[35,99647,713],{"class":58},[35,99649,872],{"class":359},[35,99651,408],{"class":58},[35,99653,505],{"class":359},[35,99655,99656],{"class":37,"line":101},[35,99657,99658],{"class":359},"aaaa.shape\n",[35,99660,99661],{"class":37,"line":110},[35,99662,99663],{"class":41},"#结果：（3，2，1，6）\n",[35,99665,99666],{"class":37,"line":119},[35,99667,99668],{"class":41},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[35,99670,99671,99674,99676,99678,99680,99682,99684,99686,99688],{"class":37,"line":128},[35,99672,99673],{"class":359},"np.transpose(aaaa,(",[35,99675,713],{"class":58},[35,99677,872],{"class":359},[35,99679,574],{"class":58},[35,99681,872],{"class":359},[35,99683,687],{"class":58},[35,99685,872],{"class":359},[35,99687,568],{"class":58},[35,99689,99616],{"class":359},[35,99691,99692],{"class":37,"line":137},[35,99693,99694],{"class":41},"#结果：(2,1,3,6)\n",[416,99696,99697],{},"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":30,"searchDepth":45,"depth":45,"links":99699},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99424,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99706,"title":99707,"body":99708,"description":421,"extension":422,"meta":100442,"navigation":140,"path":100443,"seo":100444,"stem":100445,"__hash__":100446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99709,"toc":100440},[99710,99713,99716,99719,99722,99725,99728,99731,99734,99843,99846,99849,100437],[10,99711,99707],{"id":99712},"_8数组分割",[21,99714,99715],{},"split分割",[21,99717,99718],{},"numpy.split(ary,indics_or_sections,axis)",[21,99720,99721],{},"解释：",[21,99723,99724],{},"ary:被分割的数组",[21,99726,99727],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[21,99729,99730],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[21,99732,99733],{},"①一维数组的分割",[25,99735,99737],{"className":30704,"code":99736,"language":30706,"meta":30,"style":30},"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",[32,99738,99739,99755,99760,99769,99773,99778,99786,99790,99795,99800,99813,99817,99822,99834,99838],{"__ignoreMap":30},[35,99740,99741,99743,99745,99747,99749,99751,99753],{"class":37,"line":38},[35,99742,734],{"class":359},[35,99744,544],{"class":495},[35,99746,93327],{"class":359},[35,99748,713],{"class":58},[35,99750,872],{"class":359},[35,99752,914],{"class":58},[35,99754,505],{"class":359},[35,99756,99757],{"class":37,"line":45},[35,99758,99759],{"class":41},"#如果传入整数，必须能够平分，否则会报错\n",[35,99761,99762,99765,99767],{"class":37,"line":55},[35,99763,99764],{"class":359},"np.split(a,",[35,99766,574],{"class":58},[35,99768,505],{"class":359},[35,99770,99771],{"class":37,"line":65},[35,99772,93889],{"class":41},[35,99774,99775],{"class":37,"line":74},[35,99776,99777],{"class":41},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[35,99779,99780,99782,99784],{"class":37,"line":83},[35,99781,99764],{"class":359},[35,99783,789],{"class":58},[35,99785,505],{"class":359},[35,99787,99788],{"class":37,"line":92},[35,99789,93889],{"class":41},[35,99791,99792],{"class":37,"line":101},[35,99793,99794],{"class":41},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[35,99796,99797],{"class":37,"line":110},[35,99798,99799],{"class":41},"#传入数组\n",[35,99801,99802,99805,99807,99809,99811],{"class":37,"line":119},[35,99803,99804],{"class":359},"np.split(a,[",[35,99806,568],{"class":58},[35,99808,872],{"class":359},[35,99810,372],{"class":58},[35,99812,4991],{"class":359},[35,99814,99815],{"class":37,"line":128},[35,99816,93889],{"class":41},[35,99818,99819],{"class":37,"line":137},[35,99820,99821],{"class":41},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[35,99823,99824,99826,99828,99830,99832],{"class":37,"line":144},[35,99825,99804],{"class":359},[35,99827,372],{"class":58},[35,99829,872],{"class":359},[35,99831,863],{"class":58},[35,99833,4991],{"class":359},[35,99835,99836],{"class":37,"line":150},[35,99837,93889],{"class":41},[35,99839,99840],{"class":37,"line":159},[35,99841,99842],{"class":41},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[21,99844,99845],{},"②二维数组的分割",[21,99847,99848],{},"使用split()",[25,99850,99852],{"className":30704,"code":99851,"language":30706,"meta":30,"style":30},"#二维数组分割\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",[32,99853,99854,99859,99883,99888,99897,99901,99905,99910,99915,99920,99925,99930,99935,99940,99944,99957,99961,99965,99969,99973,99977,99982,99987,99992,99996,100001,100017,100021,100025,100030,100035,100040,100045,100050,100055,100060,100065,100070,100075,100080,100085,100090,100095,100100,100105,100110,100115,100119,100123,100143,100147,100151,100156,100161,100166,100171,100176,100181,100186,100191,100196,100201,100206,100211,100216,100221,100226,100231,100236,100241,100245,100250,100259,100263,100267,100271,100275,100279,100283,100287,100291,100295,100304,100308,100312,100316,100320,100324,100328,100332,100336,100340,100344,100348,100352,100356,100360,100364,100368,100372,100376,100380,100384,100388,100401,100405,100409,100413,100417,100421,100425,100429,100433],{"__ignoreMap":30},[35,99855,99856],{"class":37,"line":38},[35,99857,99858],{"class":41},"#二维数组分割\n",[35,99860,99861,99863,99865,99867,99869,99871,99873,99875,99877,99879,99881],{"class":37,"line":45},[35,99862,93631],{"class":359},[35,99864,544],{"class":495},[35,99866,93327],{"class":359},[35,99868,713],{"class":58},[35,99870,872],{"class":359},[35,99872,820],{"class":58},[35,99874,93332],{"class":359},[35,99876,408],{"class":58},[35,99878,872],{"class":359},[35,99880,408],{"class":58},[35,99882,505],{"class":359},[35,99884,99885],{"class":37,"line":55},[35,99886,99887],{"class":41},"#默认axis=0  传入整数平均分,按行来的\n",[35,99889,99890,99893,99895],{"class":37,"line":65},[35,99891,99892],{"class":359},"np.split(aa,",[35,99894,568],{"class":58},[35,99896,505],{"class":359},[35,99898,99899],{"class":37,"line":74},[35,99900,96089],{"class":41},[35,99902,99903],{"class":37,"line":83},[35,99904,94253],{"class":306},[35,99906,99907],{"class":37,"line":92},[35,99908,99909],{"class":306},"[array([[ 1,  2,  3,  4,  5,  6],\n",[35,99911,99912],{"class":37,"line":101},[35,99913,99914],{"class":306},"        [ 7,  8,  9, 10, 11, 12]]),\n",[35,99916,99917],{"class":37,"line":110},[35,99918,99919],{"class":306}," array([[13, 14, 15, 16, 17, 18],\n",[35,99921,99922],{"class":37,"line":119},[35,99923,99924],{"class":306},"        [19, 20, 21, 22, 23, 24]]),\n",[35,99926,99927],{"class":37,"line":128},[35,99928,99929],{"class":306}," array([[25, 26, 27, 28, 29, 30],\n",[35,99931,99932],{"class":37,"line":137},[35,99933,99934],{"class":306},"        [31, 32, 33, 34, 35, 36]])]\n",[35,99936,99937],{"class":37,"line":144},[35,99938,99939],{"class":306}," '''\n",[35,99941,99942],{"class":37,"line":150},[35,99943,99799],{"class":41},[35,99945,99946,99949,99951,99953,99955],{"class":37,"line":159},[35,99947,99948],{"class":359},"np.split(aa,[",[35,99950,574],{"class":58},[35,99952,872],{"class":359},[35,99954,372],{"class":58},[35,99956,4991],{"class":359},[35,99958,99959],{"class":37,"line":168},[35,99960,96089],{"class":41},[35,99962,99963],{"class":37,"line":177},[35,99964,94253],{"class":306},[35,99966,99967],{"class":37,"line":182},[35,99968,99909],{"class":306},[35,99970,99971],{"class":37,"line":188},[35,99972,99914],{"class":306},[35,99974,99975],{"class":37,"line":197},[35,99976,99919],{"class":306},[35,99978,99979],{"class":37,"line":206},[35,99980,99981],{"class":306},"        [19, 20, 21, 22, 23, 24],\n",[35,99983,99984],{"class":37,"line":215},[35,99985,99986],{"class":306},"        [25, 26, 27, 28, 29, 30]]),\n",[35,99988,99989],{"class":37,"line":224},[35,99990,99991],{"class":306}," array([[31, 32, 33, 34, 35, 36]])]\n",[35,99993,99994],{"class":37,"line":233},[35,99995,94253],{"class":306},[35,99997,99998],{"class":37,"line":238},[35,99999,100000],{"class":41},"#axis=1 按照列来分\n",[35,100002,100003,100005,100007,100009,100011,100013,100015],{"class":37,"line":244},[35,100004,99892],{"class":359},[35,100006,568],{"class":58},[35,100008,872],{"class":359},[35,100010,47840],{"class":5550},[35,100012,544],{"class":495},[35,100014,713],{"class":58},[35,100016,505],{"class":359},[35,100018,100019],{"class":37,"line":253},[35,100020,96089],{"class":41},[35,100022,100023],{"class":37,"line":262},[35,100024,94253],{"class":306},[35,100026,100027],{"class":37,"line":271},[35,100028,100029],{"class":306},"[array([[ 1,  2],\n",[35,100031,100032],{"class":37,"line":280},[35,100033,100034],{"class":306},"        [ 7,  8],\n",[35,100036,100037],{"class":37,"line":289},[35,100038,100039],{"class":306},"        [13, 14],\n",[35,100041,100042],{"class":37,"line":294},[35,100043,100044],{"class":306},"        [19, 20],\n",[35,100046,100047],{"class":37,"line":300},[35,100048,100049],{"class":306},"        [25, 26],\n",[35,100051,100052],{"class":37,"line":313},[35,100053,100054],{"class":306},"        [31, 32]]),\n",[35,100056,100057],{"class":37,"line":324},[35,100058,100059],{"class":306}," array([[ 3,  4],\n",[35,100061,100062],{"class":37,"line":2955},[35,100063,100064],{"class":306},"        [ 9, 10],\n",[35,100066,100067],{"class":37,"line":8282},[35,100068,100069],{"class":306},"        [15, 16],\n",[35,100071,100072],{"class":37,"line":8306},[35,100073,100074],{"class":306},"        [21, 22],\n",[35,100076,100077],{"class":37,"line":8311},[35,100078,100079],{"class":306},"        [27, 28],\n",[35,100081,100082],{"class":37,"line":8317},[35,100083,100084],{"class":306},"        [33, 34]]),\n",[35,100086,100087],{"class":37,"line":8344},[35,100088,100089],{"class":306}," array([[ 5,  6],\n",[35,100091,100092],{"class":37,"line":8349},[35,100093,100094],{"class":306},"        [11, 12],\n",[35,100096,100097],{"class":37,"line":8355},[35,100098,100099],{"class":306},"        [17, 18],\n",[35,100101,100102],{"class":37,"line":8367},[35,100103,100104],{"class":306},"        [23, 24],\n",[35,100106,100107],{"class":37,"line":8379},[35,100108,100109],{"class":306},"        [29, 30],\n",[35,100111,100112],{"class":37,"line":8391},[35,100113,100114],{"class":306},"        [35, 36]])]\n",[35,100116,100117],{"class":37,"line":10050},[35,100118,99939],{"class":306},[35,100120,100121],{"class":37,"line":10075},[35,100122,99799],{"class":41},[35,100124,100125,100127,100129,100131,100133,100135,100137,100139,100141],{"class":37,"line":10098},[35,100126,99948],{"class":359},[35,100128,713],{"class":58},[35,100130,872],{"class":359},[35,100132,574],{"class":58},[35,100134,41935],{"class":359},[35,100136,47840],{"class":5550},[35,100138,544],{"class":495},[35,100140,713],{"class":58},[35,100142,505],{"class":359},[35,100144,100145],{"class":37,"line":10122},[35,100146,93889],{"class":41},[35,100148,100149],{"class":37,"line":10127},[35,100150,94253],{"class":306},[35,100152,100153],{"class":37,"line":10132},[35,100154,100155],{"class":306},"[array([[ 1],\n",[35,100157,100158],{"class":37,"line":10137},[35,100159,100160],{"class":306},"        [ 7],\n",[35,100162,100163],{"class":37,"line":10146},[35,100164,100165],{"class":306},"        [13],\n",[35,100167,100168],{"class":37,"line":10151},[35,100169,100170],{"class":306},"        [19],\n",[35,100172,100173],{"class":37,"line":10157},[35,100174,100175],{"class":306},"        [25],\n",[35,100177,100178],{"class":37,"line":10178},[35,100179,100180],{"class":306},"        [31]]),\n",[35,100182,100183],{"class":37,"line":10184},[35,100184,100185],{"class":306}," array([[ 2],\n",[35,100187,100188],{"class":37,"line":10198},[35,100189,100190],{"class":306},"        [ 8],\n",[35,100192,100193],{"class":37,"line":10204},[35,100194,100195],{"class":306},"        [14],\n",[35,100197,100198],{"class":37,"line":10231},[35,100199,100200],{"class":306},"        [20],\n",[35,100202,100203],{"class":37,"line":10240},[35,100204,100205],{"class":306},"        [26],\n",[35,100207,100208],{"class":37,"line":10246},[35,100209,100210],{"class":306},"        [32]]),\n",[35,100212,100213],{"class":37,"line":10254},[35,100214,100215],{"class":306}," array([[ 3,  4,  5,  6],\n",[35,100217,100218],{"class":37,"line":10259},[35,100219,100220],{"class":306},"        [ 9, 10, 11, 12],\n",[35,100222,100223],{"class":37,"line":16938},[35,100224,100225],{"class":306},"        [15, 16, 17, 18],\n",[35,100227,100228],{"class":37,"line":16944},[35,100229,100230],{"class":306},"        [21, 22, 23, 24],\n",[35,100232,100233],{"class":37,"line":16967},[35,100234,100235],{"class":306},"        [27, 28, 29, 30],\n",[35,100237,100238],{"class":37,"line":16973},[35,100239,100240],{"class":306},"        [33, 34, 35, 36]])]\n",[35,100242,100243],{"class":37,"line":16996},[35,100244,94253],{"class":306},[35,100246,100247],{"class":37,"line":17010},[35,100248,100249],{"class":41},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[35,100251,100252,100255,100257],{"class":37,"line":17030},[35,100253,100254],{"class":359},"np.vsplit(aa,",[35,100256,568],{"class":58},[35,100258,505],{"class":359},[35,100260,100261],{"class":37,"line":17036},[35,100262,93889],{"class":41},[35,100264,100265],{"class":37,"line":17047},[35,100266,94253],{"class":306},[35,100268,100269],{"class":37,"line":17070},[35,100270,99909],{"class":306},[35,100272,100273],{"class":37,"line":17092},[35,100274,99914],{"class":306},[35,100276,100277],{"class":37,"line":17097},[35,100278,99919],{"class":306},[35,100280,100281],{"class":37,"line":17103},[35,100282,99924],{"class":306},[35,100284,100285],{"class":37,"line":17117},[35,100286,99929],{"class":306},[35,100288,100289],{"class":37,"line":17130},[35,100290,99934],{"class":306},[35,100292,100293],{"class":37,"line":17135},[35,100294,94253],{"class":306},[35,100296,100297,100300,100302],{"class":37,"line":17149},[35,100298,100299],{"class":359},"np.hsplit(aa,",[35,100301,568],{"class":58},[35,100303,505],{"class":359},[35,100305,100306],{"class":37,"line":17154},[35,100307,93889],{"class":41},[35,100309,100310],{"class":37,"line":17160},[35,100311,94253],{"class":306},[35,100313,100314],{"class":37,"line":17165},[35,100315,100029],{"class":306},[35,100317,100318],{"class":37,"line":17179},[35,100319,100034],{"class":306},[35,100321,100322],{"class":37,"line":17184},[35,100323,100039],{"class":306},[35,100325,100326],{"class":37,"line":17189},[35,100327,100044],{"class":306},[35,100329,100330],{"class":37,"line":17203},[35,100331,100049],{"class":306},[35,100333,100334],{"class":37,"line":17215},[35,100335,100054],{"class":306},[35,100337,100338],{"class":37,"line":17220},[35,100339,100059],{"class":306},[35,100341,100342],{"class":37,"line":17233},[35,100343,100064],{"class":306},[35,100345,100346],{"class":37,"line":17238},[35,100347,100069],{"class":306},[35,100349,100350],{"class":37,"line":17243},[35,100351,100074],{"class":306},[35,100353,100354],{"class":37,"line":17248},[35,100355,100079],{"class":306},[35,100357,100358],{"class":37,"line":17261},[35,100359,100084],{"class":306},[35,100361,100362],{"class":37,"line":17266},[35,100363,100089],{"class":306},[35,100365,100366],{"class":37,"line":32959},[35,100367,100094],{"class":306},[35,100369,100370],{"class":37,"line":32965},[35,100371,100099],{"class":306},[35,100373,100374],{"class":37,"line":32971},[35,100375,100104],{"class":306},[35,100377,100378],{"class":37,"line":32977},[35,100379,100109],{"class":306},[35,100381,100382],{"class":37,"line":32983},[35,100383,100114],{"class":306},[35,100385,100386],{"class":37,"line":32994},[35,100387,94253],{"class":306},[35,100389,100390,100393,100395,100397,100399],{"class":37,"line":33000},[35,100391,100392],{"class":359},"np.vsplit(aa,[",[35,100394,574],{"class":58},[35,100396,872],{"class":359},[35,100398,372],{"class":58},[35,100400,4991],{"class":359},[35,100402,100403],{"class":37,"line":33020},[35,100404,93889],{"class":41},[35,100406,100407],{"class":37,"line":33026},[35,100408,94253],{"class":306},[35,100410,100411],{"class":37,"line":33037},[35,100412,99909],{"class":306},[35,100414,100415],{"class":37,"line":33043},[35,100416,99914],{"class":306},[35,100418,100419],{"class":37,"line":33049},[35,100420,99919],{"class":306},[35,100422,100423],{"class":37,"line":33055},[35,100424,99981],{"class":306},[35,100426,100427],{"class":37,"line":33061},[35,100428,99986],{"class":306},[35,100430,100431],{"class":37,"line":33067},[35,100432,99991],{"class":306},[35,100434,100435],{"class":37,"line":33073},[35,100436,99939],{"class":306},[416,100438,100439],{},"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":30,"searchDepth":45,"depth":45,"links":100441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99707,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100448,"title":100449,"body":100450,"description":421,"extension":422,"meta":100944,"navigation":140,"path":100945,"seo":100946,"stem":100947,"__hash__":100948},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100451,"toc":100935},[100452,100455,100458,100483,100487,100546,100598,100602,100604,100640,100694,100696,100734,100805,100809,100814,100818,100821,100854,100857,100861,100864,100867,100870,100873,100878,100882,100885,100888,100891,100894,100899,100903,100908,100911,100932],[10,100453,100449],{"id":100454},"_9数学函数",[21,100456,100457],{},"补充回顾：python的列表推导式",[25,100459,100461],{"className":30704,"code":100460,"language":30706,"meta":30,"style":30},"[1\u002Fi for i in a]\n",[32,100462,100463],{"__ignoreMap":30},[35,100464,100465,100467,100469,100471,100474,100476,100478,100480],{"class":37,"line":38},[35,100466,1384],{"class":359},[35,100468,713],{"class":58},[35,100470,1078],{"class":495},[35,100472,100473],{"class":359},"i ",[35,100475,3359],{"class":495},[35,100477,9772],{"class":359},[35,100479,26374],{"class":495},[35,100481,100482],{"class":359}," a]\n",[438,100484,100486],{"id":100485},"_91-求倒数","9.1 求倒数",[25,100488,100490],{"className":30704,"code":100489,"language":30706,"meta":30,"style":30},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[32,100491,100492,100497,100525,100537],{"__ignoreMap":30},[35,100493,100494],{"class":37,"line":38},[35,100495,100496],{"class":41},"#数组求倒数\n",[35,100498,100499,100501,100503,100505,100507,100509,100511,100513,100515,100517,100519,100521,100523],{"class":37,"line":45},[35,100500,734],{"class":359},[35,100502,544],{"class":495},[35,100504,1384],{"class":359},[35,100506,713],{"class":58},[35,100508,872],{"class":359},[35,100510,574],{"class":58},[35,100512,872],{"class":359},[35,100514,568],{"class":58},[35,100516,872],{"class":359},[35,100518,789],{"class":58},[35,100520,872],{"class":359},[35,100522,372],{"class":58},[35,100524,33572],{"class":359},[35,100526,100527,100529,100531,100534],{"class":37,"line":55},[35,100528,759],{"class":359},[35,100530,544],{"class":495},[35,100532,100533],{"class":359},"np.array(a)",[35,100535,100536],{"class":41},"#将列表转换为数组\n",[35,100538,100539,100541,100543],{"class":37,"line":65},[35,100540,713],{"class":58},[35,100542,1078],{"class":495},[35,100544,100545],{"class":359},"b\n",[25,100547,100549],{"className":30704,"code":100548,"language":30706,"meta":30,"style":30},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[32,100550,100551,100579,100588,100593],{"__ignoreMap":30},[35,100552,100553,100555,100557,100559,100561,100563,100565,100567,100569,100571,100573,100575,100577],{"class":37,"line":38},[35,100554,734],{"class":359},[35,100556,544],{"class":495},[35,100558,1384],{"class":359},[35,100560,713],{"class":58},[35,100562,872],{"class":359},[35,100564,574],{"class":58},[35,100566,872],{"class":359},[35,100568,568],{"class":58},[35,100570,872],{"class":359},[35,100572,789],{"class":58},[35,100574,872],{"class":359},[35,100576,372],{"class":58},[35,100578,33572],{"class":359},[35,100580,100581,100583,100585],{"class":37,"line":45},[35,100582,759],{"class":359},[35,100584,544],{"class":495},[35,100586,100587],{"class":359},"np.array(a)\n",[35,100589,100590],{"class":37,"line":55},[35,100591,100592],{"class":41},"#调用numpy中的函数reciprocal()\n",[35,100594,100595],{"class":37,"line":65},[35,100596,100597],{"class":359},"np.reciprocal(b)\n",[438,100599,100601],{"id":100600},"_92-求平方","9.2 求平方",[21,100603,94855],{},[25,100605,100607],{"className":30704,"code":100606,"language":30706,"meta":30,"style":30},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[32,100608,100609,100614,100619,100635],{"__ignoreMap":30},[35,100610,100611],{"class":37,"line":38},[35,100612,100613],{"class":41},"#square()，求平方\n",[35,100615,100616],{"class":37,"line":45},[35,100617,100618],{"class":41},"#一维数组\n",[35,100620,100621,100623,100625,100627,100629,100631,100633],{"class":37,"line":55},[35,100622,734],{"class":359},[35,100624,544],{"class":495},[35,100626,93327],{"class":359},[35,100628,713],{"class":58},[35,100630,872],{"class":359},[35,100632,940],{"class":58},[35,100634,505],{"class":359},[35,100636,100637],{"class":37,"line":65},[35,100638,100639],{"class":359},"np.square(a)\n",[25,100641,100643],{"className":30704,"code":100642,"language":30706,"meta":30,"style":30},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[32,100644,100645,100650,100655,100676],{"__ignoreMap":30},[35,100646,100647],{"class":37,"line":38},[35,100648,100649],{"class":41},"#或者通过循环遍历的形式来计算\n",[35,100651,100652],{"class":37,"line":45},[35,100653,100654],{"class":41},"#这是一个列表\n",[35,100656,100657,100660,100662,100664,100666,100668,100670,100673],{"class":37,"line":55},[35,100658,100659],{"class":359},"[i",[35,100661,949],{"class":495},[35,100663,100473],{"class":359},[35,100665,3359],{"class":495},[35,100667,9772],{"class":359},[35,100669,26374],{"class":495},[35,100671,100672],{"class":359}," a]",[35,100674,100675],{"class":41},"#这个求完之后在数列当中\n",[35,100677,100678,100681,100683,100685,100687,100689,100691],{"class":37,"line":65},[35,100679,100680],{"class":359},"np.array([i",[35,100682,949],{"class":495},[35,100684,100473],{"class":359},[35,100686,3359],{"class":495},[35,100688,9772],{"class":359},[35,100690,26374],{"class":495},[35,100692,100693],{"class":359}," a])\n",[21,100695,93616],{},[25,100697,100699],{"className":30704,"code":100698,"language":30706,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[32,100700,100701,100705,100729],{"__ignoreMap":30},[35,100702,100703],{"class":37,"line":38},[35,100704,93626],{"class":41},[35,100706,100707,100709,100711,100713,100715,100717,100719,100721,100723,100725,100727],{"class":37,"line":45},[35,100708,93631],{"class":359},[35,100710,544],{"class":495},[35,100712,93327],{"class":359},[35,100714,713],{"class":58},[35,100716,872],{"class":359},[35,100718,1017],{"class":58},[35,100720,93332],{"class":359},[35,100722,789],{"class":58},[35,100724,872],{"class":359},[35,100726,568],{"class":58},[35,100728,505],{"class":359},[35,100730,100731],{"class":37,"line":55},[35,100732,100733],{"class":359},"np.square(aa)\n",[25,100735,100737],{"className":30704,"code":100736,"language":30706,"meta":30,"style":30},"#传统的方式\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",[32,100738,100739,100744,100753,100769,100785,100800],{"__ignoreMap":30},[35,100740,100741],{"class":37,"line":38},[35,100742,100743],{"class":41},"#传统的方式\n",[35,100745,100746,100748,100750],{"class":37,"line":45},[35,100747,98512],{"class":359},[35,100749,544],{"class":495},[35,100751,100752],{"class":359},"np.empty_like(aa)\n",[35,100754,100755,100757,100759,100761,100763,100765,100767],{"class":37,"line":55},[35,100756,3359],{"class":495},[35,100758,9772],{"class":359},[35,100760,26374],{"class":495},[35,100762,32769],{"class":58},[35,100764,499],{"class":359},[35,100766,789],{"class":58},[35,100768,31112],{"class":359},[35,100770,100771,100773,100775,100777,100779,100781,100783],{"class":37,"line":65},[35,100772,3535],{"class":495},[35,100774,9834],{"class":359},[35,100776,26374],{"class":495},[35,100778,32769],{"class":58},[35,100780,499],{"class":359},[35,100782,568],{"class":58},[35,100784,31112],{"class":359},[35,100786,100787,100790,100792,100795,100797],{"class":37,"line":74},[35,100788,100789],{"class":359},"        bb[i,j]",[35,100791,544],{"class":495},[35,100793,100794],{"class":359},"aa[i,j]",[35,100796,949],{"class":495},[35,100798,100799],{"class":359},"aa[i,j]\n",[35,100801,100802],{"class":37,"line":83},[35,100803,100804],{"class":359},"bb\n",[438,100806,100808],{"id":100807},"_93-求各元素的符号","9.3 求各元素的符号",[21,100810,100811],{},[1823,100812],{"alt":30,"src":100813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[438,100815,100817],{"id":100816},"_94-modf函数","9.4 modf函数",[21,100819,100820],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[25,100822,100824],{"className":30704,"code":100823,"language":30706,"meta":30,"style":30},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[32,100825,100826,100849],{"__ignoreMap":30},[35,100827,100828,100830,100832,100834,100836,100838,100840,100842,100844,100847],{"class":37,"line":38},[35,100829,734],{"class":359},[35,100831,544],{"class":495},[35,100833,93327],{"class":359},[35,100835,1026],{"class":495},[35,100837,940],{"class":58},[35,100839,872],{"class":359},[35,100841,940],{"class":58},[35,100843,872],{"class":359},[35,100845,100846],{"class":58},"0.3",[35,100848,505],{"class":359},[35,100850,100851],{"class":37,"line":45},[35,100852,100853],{"class":359},"np.modf(a)\n",[21,100855,100856],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[438,100858,100860],{"id":100859},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[21,100862,100863],{},"np.cell()",[21,100865,100866],{},"np.floor()",[21,100868,100869],{},"np.rint()",[21,100871,100872],{},"对各元素分别向上取整、向下取整、四舍五入",[21,100874,100875],{},[1823,100876],{"alt":30,"src":100877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[438,100879,100881],{"id":100880},"_96-around函数","9.6 around()函数",[21,100883,100884],{},"around()函数也可以实现对数的小数位数进行操作",[21,100886,100887],{},"其中的参数：",[21,100889,100890],{},"1.要传的数组",[21,100892,100893],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[21,100895,100896],{},[1823,100897],{"alt":30,"src":100898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[438,100900,100902],{"id":100901},"_97-三角函数","9.7 三角函数",[21,100904,100905],{},[1823,100906],{"alt":30,"src":100907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[21,100909,100910],{},"引入图像模块非常重要",[25,100912,100914],{"className":30704,"code":100913,"language":30706,"meta":30,"style":30},"from matplotlib import pyplot as plt\n",[32,100915,100916],{"__ignoreMap":30},[35,100917,100918,100920,100923,100925,100928,100930],{"class":37,"line":38},[35,100919,31063],{"class":495},[35,100921,100922],{"class":359}," matplotlib ",[35,100924,30718],{"class":495},[35,100926,100927],{"class":359}," pyplot ",[35,100929,31709],{"class":495},[35,100931,31763],{"class":359},[416,100933,100934],{},"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":30,"searchDepth":45,"depth":45,"links":100936},[100937,100938,100939,100940,100941,100942,100943],{"id":100485,"depth":45,"text":100486},{"id":100600,"depth":45,"text":100601},{"id":100807,"depth":45,"text":100808},{"id":100816,"depth":45,"text":100817},{"id":100859,"depth":45,"text":100860},{"id":100880,"depth":45,"text":100881},{"id":100901,"depth":45,"text":100902},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100449,"description":421},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100950,"title":100951,"body":100952,"description":421,"extension":422,"meta":100956,"navigation":140,"path":100957,"seo":100958,"stem":100959,"__hash__":100960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100953,"toc":100954},[],{"title":30,"searchDepth":45,"depth":45,"links":100955},[],{"category":50746},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100951,"description":421},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100962,"title":100963,"body":100964,"description":30,"extension":422,"meta":102969,"navigation":140,"path":102970,"seo":102971,"stem":102972,"__hash__":102973},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100965,"toc":102945},[100966,100969,100973,100976,100979,100985,100988,101011,101014,101048,101051,101092,101096,101099,101192,101195,101239,101242,101259,101262,101276,101279,101282,101327,101330,101367,101371,101374,101380,101385,101405,101409,101412,101478,101481,101499,101503,101506,101535,101545,101551,101555,101558,101564,101575,101579,101582,101609,101612,101892,101895,101898,101909,101912,101915,101937,101944,101947,101965,101968,101971,101985,101993,101996,102022,102028,102031,102034,102044,102056,102076,102085,102105,102115,102139,102152,102166,102171,102212,102229,102254,102266,102286,102292,102337,102356,102373,102386,102402,102409,102421,102430,102465,102486,102511,102524,102548,102563,102588,102591,102612,102621,102624,102635,102639,102642,102648,102660,102667,102671,102674,102686,102689,102703,102706,102716,102726,102729,102769,102772,102776,102782,102785,102799,102803,102806,102839,102843,102846,102869,102877,102880,102886,102892,102895,102898,102926,102930,102933,102939,102942],[10,100967,100963],{"id":100968},"_1环境安装与第一个-mujoco-程序",[438,100970,100972],{"id":100971},"_1目标说明","1.目标说明",[21,100974,100975],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[21,100977,100978],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[25,100980,100983],{"className":100981,"code":100982,"language":5521,"meta":30},[5519],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[32,100984,100982],{"__ignoreMap":30},[21,100986,100987],{},"需要掌握:",[14,100989,100990,100993,100996,101001,101006],{},[17,100991,100992],{},"Fedora 44 下 MuJoCo 的系统依赖",[17,100994,100995],{},"Python 虚拟环境创建",[17,100997,100998],{},[32,100999,101000],{},"mujoco.MjModel",[17,101002,101003],{},[32,101004,101005],{},"mujoco.MjData",[17,101007,101008],{},[32,101009,101010],{},"mujoco.mj_step(model, data)",[21,101012,101013],{},"MuJoCo 中最重要的两个对象:",[633,101015,101016,101026],{},[636,101017,101018],{},[639,101019,101020,101023],{},[642,101021,101022],{"align":24070},"对象",[642,101024,101025],{"align":24070},"含义",[680,101027,101028,101038],{},[639,101029,101030,101035],{},[685,101031,101032],{"align":24070},[32,101033,101034],{},"MjModel",[685,101036,101037],{"align":24070},"模型结构，来自 XML，基本不随时间变化",[639,101039,101040,101045],{},[685,101041,101042],{"align":24070},[32,101043,101044],{},"MjData",[685,101046,101047],{"align":24070},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[21,101049,101050],{},"可以先用一个类比理解：",[633,101052,101053,101063],{},[636,101054,101055],{},[639,101056,101057,101060],{},[642,101058,101059],{"align":24070},"类比",[642,101061,101062],{"align":24070},"MuJoCo 对象",[680,101064,101065,101074,101083],{},[639,101066,101067,101070],{},[685,101068,101069],{"align":24070},"游戏地图和角色配置",[685,101071,101072],{"align":24070},[32,101073,101034],{},[639,101075,101076,101079],{},[685,101077,101078],{"align":24070},"游戏运行到当前帧的状态",[685,101080,101081],{"align":24070},[32,101082,101044],{},[639,101084,101085,101088],{},[685,101086,101087],{"align":24070},"前进一帧",[685,101089,101090],{"align":24070},[32,101091,101010],{},[438,101093,101095],{"id":101094},"_2环境与依赖安装","2.环境与依赖安装",[21,101097,101098],{},"Fedora 44 系统依赖:",[25,101100,101102],{"className":24156,"code":101101,"language":24158,"meta":30,"style":30},"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",[32,101103,101104,101116,101129,101142,101152,101162,101181],{"__ignoreMap":30},[35,101105,101106,101108,101110,101112,101114],{"class":37,"line":38},[35,101107,171],{"class":48},[35,101109,26645],{"class":306},[35,101111,318],{"class":306},[35,101113,26730],{"class":58},[35,101115,25010],{"class":58},[35,101117,101118,101121,101124,101127],{"class":37,"line":45},[35,101119,101120],{"class":306},"  python3",[35,101122,101123],{"class":306}," python3-pip",[35,101125,101126],{"class":306}," python3-virtualenv",[35,101128,25010],{"class":58},[35,101130,101131,101134,101137,101140],{"class":37,"line":55},[35,101132,101133],{"class":306},"  mesa-libGL",[35,101135,101136],{"class":306}," mesa-libGLU",[35,101138,101139],{"class":306}," mesa-dri-drivers",[35,101141,25010],{"class":58},[35,101143,101144,101147,101150],{"class":37,"line":65},[35,101145,101146],{"class":306},"  libglvnd-glx",[35,101148,101149],{"class":306}," libglvnd-opengl",[35,101151,25010],{"class":58},[35,101153,101154,101157,101160],{"class":37,"line":74},[35,101155,101156],{"class":306},"  glfw",[35,101158,101159],{"class":306}," glfw-devel",[35,101161,25010],{"class":58},[35,101163,101164,101167,101170,101173,101176,101179],{"class":37,"line":83},[35,101165,101166],{"class":306},"  libX11",[35,101168,101169],{"class":306}," libXcursor",[35,101171,101172],{"class":306}," libXi",[35,101174,101175],{"class":306}," libXinerama",[35,101177,101178],{"class":306}," libXrandr",[35,101180,25010],{"class":58},[35,101182,101183,101186,101189],{"class":37,"line":92},[35,101184,101185],{"class":306},"  gcc",[35,101187,101188],{"class":306}," gcc-c++",[35,101190,101191],{"class":306}," make\n",[21,101193,101194],{},"创建 Python 环境:",[25,101196,101198],{"className":24156,"code":101197,"language":24158,"meta":30,"style":30},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[32,101199,101200,101214,101222],{"__ignoreMap":30},[35,101201,101202,101205,101208,101211],{"class":37,"line":38},[35,101203,101204],{"class":48},"python3",[35,101206,101207],{"class":58}," -m",[35,101209,101210],{"class":306}," venv",[35,101212,101213],{"class":306}," .venv\n",[35,101215,101216,101219],{"class":37,"line":45},[35,101217,101218],{"class":58},"source",[35,101220,101221],{"class":306}," .venv\u002Fbin\u002Factivate\n",[35,101223,101224,101226,101228,101231,101233,101236],{"class":37,"line":55},[35,101225,30706],{"class":48},[35,101227,101207],{"class":58},[35,101229,101230],{"class":306}," pip",[35,101232,318],{"class":306},[35,101234,101235],{"class":58}," --upgrade",[35,101237,101238],{"class":306}," pip\n",[21,101240,101241],{},"pip 安装:",[25,101243,101245],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy\n",[32,101246,101247],{"__ignoreMap":30},[35,101248,101249,101251,101253,101256],{"class":37,"line":38},[35,101250,24165],{"class":48},[35,101252,318],{"class":306},[35,101254,101255],{"class":306}," \"mujoco>=2.3\"",[35,101257,101258],{"class":306}," numpy\n",[21,101260,101261],{},"安装完成后，先做最小检查：",[25,101263,101265],{"className":24156,"code":101264,"language":24158,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[32,101266,101267],{"__ignoreMap":30},[35,101268,101269,101271,101273],{"class":37,"line":38},[35,101270,30706],{"class":48},[35,101272,30684],{"class":58},[35,101274,101275],{"class":306}," \"import mujoco; print(mujoco.__version__)\"\n",[21,101277,101278],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[21,101280,101281],{},"conda 安装:",[25,101283,101285],{"className":24156,"code":101284,"language":24158,"meta":30,"style":30},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[32,101286,101287,101307,101317],{"__ignoreMap":30},[35,101288,101289,101291,101293,101295,101298,101301,101304],{"class":37,"line":38},[35,101290,30656],{"class":48},[35,101292,29502],{"class":306},[35,101294,25447],{"class":58},[35,101296,101297],{"class":306}," mujoco-study",[35,101299,101300],{"class":306}," python=",[35,101302,101303],{"class":58},"3.10",[35,101305,101306],{"class":58}," -y\n",[35,101308,101309,101311,101314],{"class":37,"line":45},[35,101310,30656],{"class":48},[35,101312,101313],{"class":306}," activate",[35,101315,101316],{"class":306}," mujoco-study\n",[35,101318,101319,101321,101323,101325],{"class":37,"line":55},[35,101320,24165],{"class":48},[35,101322,318],{"class":306},[35,101324,101255],{"class":306},[35,101326,101258],{"class":306},[21,101328,101329],{},"版本冲突说明:",[14,101331,101332,101338,101348,101357],{},[17,101333,101334,101335,28711],{},"不要安装 ",[32,101336,101337],{},"mujoco-py",[17,101339,101340,101341,101343,101344,101347],{},"如果旧项目里同时安装了 ",[32,101342,101337],{}," 和 ",[32,101345,101346],{},"mujoco","，建议新建干净虚拟环境。",[17,101349,101350,101353,101354,28711],{},[32,101351,101352],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[32,101355,101356],{},"~\u002F.mujoco\u002Fmujoco210",[17,101358,101359,101360,82864,101363,101366],{},"离屏渲染可能涉及 OpenGL 后端，",[32,101361,101362],{},"MUJOCO_GL=egl",[32,101364,101365],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[438,101368,101370],{"id":101369},"_3核心概念解释","3.核心概念解释",[21,101372,101373],{},"MuJoCo 的基本执行流程:",[25,101375,101378],{"className":101376,"code":101377,"language":5521,"meta":30},[5519],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[32,101379,101377],{"__ignoreMap":30},[21,101381,101382,101384],{},[32,101383,101034],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[21,101386,101387,101389,101390,708,101393,708,101396,708,101399,708,101402,28711],{},[32,101388,101044],{}," 存放仿真运行时状态，例如 ",[32,101391,101392],{},"data.time",[32,101394,101395],{},"data.qpos",[32,101397,101398],{},"data.qvel",[32,101400,101401],{},"data.ctrl",[32,101403,101404],{},"data.xpos",[465,101406,101408],{"id":101407},"xml-是什么","XML 是什么",[21,101410,101411],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[25,101413,101415],{"className":53393,"code":101414,"language":53395,"meta":30,"style":30},"\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",[32,101416,101417,101439,101470],{"__ignoreMap":30},[35,101418,101419,101421,101423,101425,101427,101429,101432,101434,101437],{"class":37,"line":38},[35,101420,1404],{"class":359},[35,101422,52126],{"class":51626},[35,101424,15254],{"class":48},[35,101426,544],{"class":359},[35,101428,53817],{"class":306},[35,101430,101431],{"class":48}," pos",[35,101433,544],{"class":359},[35,101435,101436],{"class":306},"\"0 0 1\"",[35,101438,51633],{"class":359},[35,101440,101441,101443,101446,101448,101450,101453,101455,101457,101459,101462,101464,101467],{"class":37,"line":45},[35,101442,52470],{"class":359},[35,101444,101445],{"class":51626},"geom",[35,101447,15254],{"class":48},[35,101449,544],{"class":359},[35,101451,101452],{"class":306},"\"box_geom\"",[35,101454,54150],{"class":48},[35,101456,544],{"class":359},[35,101458,53817],{"class":306},[35,101460,101461],{"class":48}," size",[35,101463,544],{"class":359},[35,101465,101466],{"class":306},"\"0.1 0.1 0.1\"",[35,101468,101469],{"class":359},"\u002F>\n",[35,101471,101472,101474,101476],{"class":37,"line":55},[35,101473,52111],{"class":359},[35,101475,52126],{"class":51626},[35,101477,51633],{"class":359},[21,101479,101480],{},"这段意思是：",[14,101482,101483,101489,101496],{},[17,101484,101485,101486,101488],{},"创建一个叫 ",[32,101487,54040],{}," 的刚体。",[17,101490,101491,101492,101495],{},"它初始放在 ",[32,101493,101494],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[17,101497,101498],{},"它里面有一个盒子形状的几何体。",[465,101500,101502],{"id":101501},"timestep-是什么","timestep 是什么",[21,101504,101505],{},"XML 里的：",[25,101507,101509],{"className":53393,"code":101508,"language":53395,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[32,101510,101511],{"__ignoreMap":30},[35,101512,101513,101515,101517,101520,101522,101525,101528,101530,101533],{"class":37,"line":38},[35,101514,1404],{"class":359},[35,101516,69492],{"class":51626},[35,101518,101519],{"class":48}," timestep",[35,101521,544],{"class":359},[35,101523,101524],{"class":306},"\"0.01\"",[35,101526,101527],{"class":48}," gravity",[35,101529,544],{"class":359},[35,101531,101532],{"class":306},"\"0 0 -9.81\"",[35,101534,101469],{"class":359},[21,101536,101537,101538,101541,101542,101544],{},"表示每调用一次 ",[32,101539,101540],{},"mj_step","，仿真时间前进 ",[32,101543,39312],{}," 秒。循环 100 次，大约就是 1 秒：",[25,101546,101549],{"className":101547,"code":101548,"language":5521,"meta":30},[5519],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[32,101550,101548],{"__ignoreMap":30},[465,101552,101554],{"id":101553},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[21,101556,101557],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[25,101559,101562],{"className":101560,"code":101561,"language":5521,"meta":30},[5519],"x y z qw qx qy qz\n",[32,101563,101561],{"__ignoreMap":30},[21,101565,101566,101567,101570,101571,101574],{},"表示一个自由刚体的位置和姿态。其中 ",[32,101568,101569],{},"x y z"," 是位置，",[32,101572,101573],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[438,101576,101578],{"id":101577},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[21,101580,101581],{},"新建文件:",[25,101583,101585],{"className":24156,"code":101584,"language":24158,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[32,101586,101587,101596,101602],{"__ignoreMap":30},[35,101588,101589,101591,101593],{"class":37,"line":38},[35,101590,77],{"class":48},[35,101592,29542],{"class":58},[35,101594,101595],{"class":306}," mujoco_tutorial\n",[35,101597,101598,101600],{"class":37,"line":45},[35,101599,59],{"class":58},[35,101601,101595],{"class":306},[35,101603,101604,101606],{"class":37,"line":55},[35,101605,113],{"class":48},[35,101607,101608],{"class":306}," ch1_first_sim.py\n",[21,101610,101611],{},"写入:",[25,101613,101615],{"className":30704,"code":101614,"language":30706,"meta":30,"style":30},"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",[32,101616,101617,101624,101628,101632,101642,101647,101652,101656,101661,101666,101670,101675,101680,101685,101690,101695,101700,101704,101708,101712,101725,101739,101749,101753,101765,101777,101789,101801,101813,101817,101834,101839,101843,101854,101865,101869,101873,101887],{"__ignoreMap":30},[35,101618,101619,101621],{"class":37,"line":38},[35,101620,30718],{"class":495},[35,101622,101623],{"class":359}," mujoco\n",[35,101625,101626],{"class":37,"line":45},[35,101627,141],{"emptyLinePlaceholder":140},[35,101629,101630],{"class":37,"line":55},[35,101631,141],{"emptyLinePlaceholder":140},[35,101633,101634,101637,101639],{"class":37,"line":65},[35,101635,101636],{"class":58},"XML",[35,101638,13898],{"class":495},[35,101640,101641],{"class":306}," \"\"\"\n",[35,101643,101644],{"class":37,"line":74},[35,101645,101646],{"class":306},"\u003Cmujoco model=\"first_sim\">\n",[35,101648,101649],{"class":37,"line":83},[35,101650,101651],{"class":306},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[35,101653,101654],{"class":37,"line":92},[35,101655,141],{"emptyLinePlaceholder":140},[35,101657,101658],{"class":37,"line":101},[35,101659,101660],{"class":306},"  \u003Cworldbody>\n",[35,101662,101663],{"class":37,"line":110},[35,101664,101665],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[35,101667,101668],{"class":37,"line":119},[35,101669,141],{"emptyLinePlaceholder":140},[35,101671,101672],{"class":37,"line":128},[35,101673,101674],{"class":306},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[35,101676,101677],{"class":37,"line":137},[35,101678,101679],{"class":306},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[35,101681,101682],{"class":37,"line":144},[35,101683,101684],{"class":306},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[35,101686,101687],{"class":37,"line":150},[35,101688,101689],{"class":306},"    \u003C\u002Fbody>\n",[35,101691,101692],{"class":37,"line":159},[35,101693,101694],{"class":306},"  \u003C\u002Fworldbody>\n",[35,101696,101697],{"class":37,"line":168},[35,101698,101699],{"class":306},"\u003C\u002Fmujoco>\n",[35,101701,101702],{"class":37,"line":177},[35,101703,96023],{"class":306},[35,101705,101706],{"class":37,"line":182},[35,101707,141],{"emptyLinePlaceholder":140},[35,101709,101710],{"class":37,"line":188},[35,101711,141],{"emptyLinePlaceholder":140},[35,101713,101714,101716,101718,101721,101723],{"class":37,"line":197},[35,101715,32273],{"class":495},[35,101717,2314],{"class":48},[35,101719,101720],{"class":359},"() -> ",[35,101722,96011],{"class":58},[35,101724,4073],{"class":359},[35,101726,101727,101730,101732,101735,101737],{"class":37,"line":206},[35,101728,101729],{"class":359},"    model ",[35,101731,544],{"class":495},[35,101733,101734],{"class":359}," mujoco.MjModel.from_xml_string(",[35,101736,101636],{"class":58},[35,101738,505],{"class":359},[35,101740,101741,101744,101746],{"class":37,"line":215},[35,101742,101743],{"class":359},"    data ",[35,101745,544],{"class":495},[35,101747,101748],{"class":359}," mujoco.MjData(model)\n",[35,101750,101751],{"class":37,"line":224},[35,101752,141],{"emptyLinePlaceholder":140},[35,101754,101755,101757,101759,101762],{"class":37,"line":233},[35,101756,31625],{"class":58},[35,101758,499],{"class":359},[35,101760,101761],{"class":306},"\"nq:\"",[35,101763,101764],{"class":359},", model.nq)\n",[35,101766,101767,101769,101771,101774],{"class":37,"line":238},[35,101768,31625],{"class":58},[35,101770,499],{"class":359},[35,101772,101773],{"class":306},"\"nv:\"",[35,101775,101776],{"class":359},", model.nv)\n",[35,101778,101779,101781,101783,101786],{"class":37,"line":244},[35,101780,31625],{"class":58},[35,101782,499],{"class":359},[35,101784,101785],{"class":306},"\"nu:\"",[35,101787,101788],{"class":359},", model.nu)\n",[35,101790,101791,101793,101795,101798],{"class":37,"line":253},[35,101792,31625],{"class":58},[35,101794,499],{"class":359},[35,101796,101797],{"class":306},"\"initial time:\"",[35,101799,101800],{"class":359},", data.time)\n",[35,101802,101803,101805,101807,101810],{"class":37,"line":262},[35,101804,31625],{"class":58},[35,101806,499],{"class":359},[35,101808,101809],{"class":306},"\"initial qpos:\"",[35,101811,101812],{"class":359},", data.qpos.copy())\n",[35,101814,101815],{"class":37,"line":271},[35,101816,141],{"emptyLinePlaceholder":140},[35,101818,101819,101821,101824,101826,101828,101830,101832],{"class":37,"line":280},[35,101820,3535],{"class":495},[35,101822,101823],{"class":359}," _ ",[35,101825,26374],{"class":495},[35,101827,32769],{"class":58},[35,101829,499],{"class":359},[35,101831,807],{"class":58},[35,101833,31112],{"class":359},[35,101835,101836],{"class":37,"line":289},[35,101837,101838],{"class":359},"        mujoco.mj_step(model, data)\n",[35,101840,101841],{"class":37,"line":294},[35,101842,141],{"emptyLinePlaceholder":140},[35,101844,101845,101847,101849,101852],{"class":37,"line":300},[35,101846,31625],{"class":58},[35,101848,499],{"class":359},[35,101850,101851],{"class":306},"\"final time:\"",[35,101853,101800],{"class":359},[35,101855,101856,101858,101860,101863],{"class":37,"line":313},[35,101857,31625],{"class":58},[35,101859,499],{"class":359},[35,101861,101862],{"class":306},"\"final qpos:\"",[35,101864,101812],{"class":359},[35,101866,101867],{"class":37,"line":324},[35,101868,141],{"emptyLinePlaceholder":140},[35,101870,101871],{"class":37,"line":2955},[35,101872,141],{"emptyLinePlaceholder":140},[35,101874,101875,101877,101879,101882,101885],{"class":37,"line":8282},[35,101876,1892],{"class":495},[35,101878,31546],{"class":58},[35,101880,101881],{"class":495}," ==",[35,101883,101884],{"class":306}," \"__main__\"",[35,101886,4073],{"class":359},[35,101888,101889],{"class":37,"line":8306},[35,101890,101891],{"class":359},"    main()\n",[465,101893,101894],{"id":101894},"代码逐段解释",[21,101896,101897],{},"导入库：",[25,101899,101901],{"className":30704,"code":101900,"language":30706,"meta":30,"style":30},"import mujoco\n",[32,101902,101903],{"__ignoreMap":30},[35,101904,101905,101907],{"class":37,"line":38},[35,101906,30718],{"class":495},[35,101908,101623],{"class":359},[21,101910,101911],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[21,101913,101914],{},"定义 XML：",[25,101916,101918],{"className":30704,"code":101917,"language":30706,"meta":30,"style":30},"XML = \"\"\"\n...\n\"\"\"\n",[32,101919,101920,101928,101933],{"__ignoreMap":30},[35,101921,101922,101924,101926],{"class":37,"line":38},[35,101923,101636],{"class":58},[35,101925,13898],{"class":495},[35,101927,101641],{"class":306},[35,101929,101930],{"class":37,"line":45},[35,101931,101932],{"class":306},"...\n",[35,101934,101935],{"class":37,"line":55},[35,101936,96023],{"class":306},[21,101938,101939,101940,101943],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[32,101941,101942],{},"freejoint"," 的方块。",[21,101945,101946],{},"编译模型：",[25,101948,101950],{"className":30704,"code":101949,"language":30706,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\n",[32,101951,101952],{"__ignoreMap":30},[35,101953,101954,101957,101959,101961,101963],{"class":37,"line":38},[35,101955,101956],{"class":359},"model ",[35,101958,544],{"class":495},[35,101960,101734],{"class":359},[35,101962,101636],{"class":58},[35,101964,505],{"class":359},[21,101966,101967],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[21,101969,101970],{},"创建数据：",[25,101972,101974],{"className":30704,"code":101973,"language":30706,"meta":30,"style":30},"data = mujoco.MjData(model)\n",[32,101975,101976],{"__ignoreMap":30},[35,101977,101978,101981,101983],{"class":37,"line":38},[35,101979,101980],{"class":359},"data ",[35,101982,544],{"class":495},[35,101984,101748],{"class":359},[21,101986,101987,101989,101990,101992],{},[32,101988,33727],{}," 会保存仿真当前状态。刚创建时，时间是 ",[32,101991,687],{},"，方块还在初始位置。",[21,101994,101995],{},"推进仿真：",[25,101997,101999],{"className":30704,"code":101998,"language":30706,"meta":30,"style":30},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[32,102000,102001,102017],{"__ignoreMap":30},[35,102002,102003,102005,102007,102009,102011,102013,102015],{"class":37,"line":38},[35,102004,3359],{"class":495},[35,102006,101823],{"class":359},[35,102008,26374],{"class":495},[35,102010,32769],{"class":58},[35,102012,499],{"class":359},[35,102014,807],{"class":58},[35,102016,31112],{"class":359},[35,102018,102019],{"class":37,"line":45},[35,102020,102021],{"class":359},"    mujoco.mj_step(model, data)\n",[21,102023,102024,102025,102027],{},"每次 ",[32,102026,101540],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[465,102029,102030],{"id":102030},"代码逐行细讲",[21,102032,102033],{},"下面把完整代码按新手视角拆开讲。",[25,102035,102036],{"className":30704,"code":101900,"language":30706,"meta":30,"style":30},[32,102037,102038],{"__ignoreMap":30},[35,102039,102040,102042],{"class":37,"line":38},[35,102041,30718],{"class":495},[35,102043,101623],{"class":359},[21,102045,102046,102048,102049,708,102051,708,102053,28711],{},[32,102047,30718],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[32,102050,101000],{},[32,102052,101005],{},[32,102054,102055],{},"mujoco.mj_step",[25,102057,102058],{"className":30704,"code":101917,"language":30706,"meta":30,"style":30},[32,102059,102060,102068,102072],{"__ignoreMap":30},[35,102061,102062,102064,102066],{"class":37,"line":38},[35,102063,101636],{"class":58},[35,102065,13898],{"class":495},[35,102067,101641],{"class":306},[35,102069,102070],{"class":37,"line":45},[35,102071,101932],{"class":306},[35,102073,102074],{"class":37,"line":55},[35,102075,96023],{"class":306},[21,102077,102078,102080,102081,102084],{},[32,102079,101636],{}," 是一个变量名。右边的三引号 ",[32,102082,102083],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[25,102086,102087],{"className":53393,"code":101646,"language":53395,"meta":30,"style":30},[32,102088,102089],{"__ignoreMap":30},[35,102090,102091,102093,102095,102098,102100,102103],{"class":37,"line":38},[35,102092,1404],{"class":359},[35,102094,101346],{"class":51626},[35,102096,102097],{"class":48}," model",[35,102099,544],{"class":359},[35,102101,102102],{"class":306},"\"first_sim\"",[35,102104,51633],{"class":359},[21,102106,102107,102108,102111,102112,28711],{},"这是 XML 的根标签。",[32,102109,102110],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[32,102113,102114],{},"first_sim",[25,102116,102117],{"className":53393,"code":101508,"language":53395,"meta":30,"style":30},[32,102118,102119],{"__ignoreMap":30},[35,102120,102121,102123,102125,102127,102129,102131,102133,102135,102137],{"class":37,"line":38},[35,102122,1404],{"class":359},[35,102124,69492],{"class":51626},[35,102126,101519],{"class":48},[35,102128,544],{"class":359},[35,102130,101524],{"class":306},[35,102132,101527],{"class":48},[35,102134,544],{"class":359},[35,102136,101532],{"class":306},[35,102138,101469],{"class":359},[21,102140,102141,102143,102144,102147,102148,102151],{},[32,102142,69492],{}," 用来设置仿真参数。",[32,102145,102146],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[32,102149,102150],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[25,102153,102155],{"className":53393,"code":102154,"language":53395,"meta":30,"style":30},"\u003Cworldbody>\n",[32,102156,102157],{"__ignoreMap":30},[35,102158,102159,102161,102164],{"class":37,"line":38},[35,102160,1404],{"class":359},[35,102162,102163],{"class":51626},"worldbody",[35,102165,51633],{"class":359},[21,102167,102168,102170],{},[32,102169,102163],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[25,102172,102174],{"className":53393,"code":102173,"language":53395,"meta":30,"style":30},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[32,102175,102176],{"__ignoreMap":30},[35,102177,102178,102180,102182,102184,102186,102189,102191,102193,102196,102198,102200,102203,102205,102207,102210],{"class":37,"line":38},[35,102179,1404],{"class":359},[35,102181,101445],{"class":51626},[35,102183,15254],{"class":48},[35,102185,544],{"class":359},[35,102187,102188],{"class":306},"\"floor\"",[35,102190,54150],{"class":48},[35,102192,544],{"class":359},[35,102194,102195],{"class":306},"\"plane\"",[35,102197,101461],{"class":48},[35,102199,544],{"class":359},[35,102201,102202],{"class":306},"\"2 2 0.1\"",[35,102204,79092],{"class":48},[35,102206,544],{"class":359},[35,102208,102209],{"class":306},"\"0.8 0.8 0.8 1\"",[35,102211,101469],{"class":359},[21,102213,102214,102215,102217,102218,102221,102222,102225,102226,102228],{},"这行创建地面。",[32,102216,101445],{}," 是几何体。",[32,102219,102220],{},"name=\"floor\""," 是名字。",[32,102223,102224],{},"type=\"plane\""," 表示平面。",[32,102227,55436],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[25,102230,102232],{"className":53393,"code":102231,"language":53395,"meta":30,"style":30},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[32,102233,102234],{"__ignoreMap":30},[35,102235,102236,102238,102240,102242,102244,102246,102248,102250,102252],{"class":37,"line":38},[35,102237,1404],{"class":359},[35,102239,52126],{"class":51626},[35,102241,15254],{"class":48},[35,102243,544],{"class":359},[35,102245,53817],{"class":306},[35,102247,101431],{"class":48},[35,102249,544],{"class":359},[35,102251,101436],{"class":306},[35,102253,51633],{"class":359},[21,102255,102256,102257,28711,102259,102262,102263,102265],{},"这行创建一个刚体，名字叫 ",[32,102258,54040],{},[32,102260,102261],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[32,102264,101494],{},"，也就是离地面 1 米高。",[25,102267,102269],{"className":53393,"code":102268,"language":53395,"meta":30,"style":30},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[32,102270,102271],{"__ignoreMap":30},[35,102272,102273,102275,102277,102279,102281,102284],{"class":37,"line":38},[35,102274,1404],{"class":359},[35,102276,101942],{"class":51626},[35,102278,15254],{"class":48},[35,102280,544],{"class":359},[35,102282,102283],{"class":306},"\"box_free\"",[35,102285,101469],{"class":359},[21,102287,102288,102289,102291],{},"这行很重要。",[32,102290,101942],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[25,102293,102295],{"className":53393,"code":102294,"language":53395,"meta":30,"style":30},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[32,102296,102297],{"__ignoreMap":30},[35,102298,102299,102301,102303,102305,102307,102309,102311,102313,102315,102317,102319,102321,102324,102326,102328,102330,102332,102335],{"class":37,"line":38},[35,102300,1404],{"class":359},[35,102302,101445],{"class":51626},[35,102304,15254],{"class":48},[35,102306,544],{"class":359},[35,102308,101452],{"class":306},[35,102310,54150],{"class":48},[35,102312,544],{"class":359},[35,102314,53817],{"class":306},[35,102316,101461],{"class":48},[35,102318,544],{"class":359},[35,102320,101466],{"class":306},[35,102322,102323],{"class":48}," mass",[35,102325,544],{"class":359},[35,102327,4012],{"class":306},[35,102329,79092],{"class":48},[35,102331,544],{"class":359},[35,102333,102334],{"class":306},"\"1 0 0 1\"",[35,102336,101469],{"class":359},[21,102338,102339,102340,102343,102344,102347,102348,102351,102352,102355],{},"这行给 box body 添加一个盒子形状。",[32,102341,102342],{},"type=\"box\""," 表示形状是盒子。",[32,102345,102346],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[32,102349,102350],{},"mass=\"1\""," 表示质量是 1。",[32,102353,102354],{},"rgba=\"1 0 0 1\""," 表示红色。",[25,102357,102359],{"className":30704,"code":102358,"language":30706,"meta":30,"style":30},"def main() -> None:\n",[32,102360,102361],{"__ignoreMap":30},[35,102362,102363,102365,102367,102369,102371],{"class":37,"line":38},[35,102364,32273],{"class":495},[35,102366,2314],{"class":48},[35,102368,101720],{"class":359},[35,102370,96011],{"class":58},[35,102372,4073],{"class":359},[21,102374,102375,102377,102378,102381,102382,102385],{},[32,102376,32273],{}," 用来定义函数。这里定义了一个叫 ",[32,102379,102380],{},"main"," 的函数。",[32,102383,102384],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[25,102387,102388],{"className":30704,"code":101949,"language":30706,"meta":30,"style":30},[32,102389,102390],{"__ignoreMap":30},[35,102391,102392,102394,102396,102398,102400],{"class":37,"line":38},[35,102393,101956],{"class":359},[35,102395,544],{"class":495},[35,102397,101734],{"class":359},[35,102399,101636],{"class":58},[35,102401,505],{"class":359},[21,102403,102404,102405,102408],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[32,102406,102407],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[25,102410,102411],{"className":30704,"code":101973,"language":30706,"meta":30,"style":30},[32,102412,102413],{"__ignoreMap":30},[35,102414,102415,102417,102419],{"class":37,"line":38},[35,102416,101980],{"class":359},[35,102418,544],{"class":495},[35,102420,101748],{"class":359},[21,102422,102423,102424,102426,102427,102429],{},"这行创建仿真数据。",[32,102425,33727],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[32,102428,33727],{}," 都会变化。",[25,102431,102433],{"className":30704,"code":102432,"language":30706,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[32,102434,102435,102445,102455],{"__ignoreMap":30},[35,102436,102437,102439,102441,102443],{"class":37,"line":38},[35,102438,30741],{"class":58},[35,102440,499],{"class":359},[35,102442,101761],{"class":306},[35,102444,101764],{"class":359},[35,102446,102447,102449,102451,102453],{"class":37,"line":45},[35,102448,30741],{"class":58},[35,102450,499],{"class":359},[35,102452,101773],{"class":306},[35,102454,101776],{"class":359},[35,102456,102457,102459,102461,102463],{"class":37,"line":55},[35,102458,30741],{"class":58},[35,102460,499],{"class":359},[35,102462,101785],{"class":306},[35,102464,101788],{"class":359},[21,102466,102467,102469,102470,102473,102474,102477,102478,102481,102482,102485],{},[32,102468,30741],{}," 用来输出信息。",[32,102471,102472],{},"model.nq"," 是位置变量数量，",[32,102475,102476],{},"model.nv"," 是速度变量数量，",[32,102479,102480],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[32,102483,102484],{},"nu"," 是 0。",[25,102487,102489],{"className":30704,"code":102488,"language":30706,"meta":30,"style":30},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[32,102490,102491,102501],{"__ignoreMap":30},[35,102492,102493,102495,102497,102499],{"class":37,"line":38},[35,102494,30741],{"class":58},[35,102496,499],{"class":359},[35,102498,101797],{"class":306},[35,102500,101800],{"class":359},[35,102502,102503,102505,102507,102509],{"class":37,"line":45},[35,102504,30741],{"class":58},[35,102506,499],{"class":359},[35,102508,101809],{"class":306},[35,102510,101812],{"class":359},[21,102512,102513,102514,102516,102517,102519,102520,102523],{},"这里打印初始时间和初始位置。",[32,102515,101392],{}," 一开始是 0。",[32,102518,101395],{}," 是位置数组。",[32,102521,102522],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[25,102525,102526],{"className":30704,"code":101998,"language":30706,"meta":30,"style":30},[32,102527,102528,102544],{"__ignoreMap":30},[35,102529,102530,102532,102534,102536,102538,102540,102542],{"class":37,"line":38},[35,102531,3359],{"class":495},[35,102533,101823],{"class":359},[35,102535,26374],{"class":495},[35,102537,32769],{"class":58},[35,102539,499],{"class":359},[35,102541,807],{"class":58},[35,102543,31112],{"class":359},[35,102545,102546],{"class":37,"line":45},[35,102547,102021],{"class":359},[21,102549,102550,102552,102553,102556,102557,102559,102560,102562],{},[32,102551,3359],{}," 是循环。",[32,102554,102555],{},"range(100)"," 表示循环 100 次。",[32,102558,1486],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[32,102561,101540],{},"，仿真就前进一步。",[25,102564,102566],{"className":30704,"code":102565,"language":30706,"meta":30,"style":30},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[32,102567,102568,102578],{"__ignoreMap":30},[35,102569,102570,102572,102574,102576],{"class":37,"line":38},[35,102571,30741],{"class":58},[35,102573,499],{"class":359},[35,102575,101851],{"class":306},[35,102577,101800],{"class":359},[35,102579,102580,102582,102584,102586],{"class":37,"line":45},[35,102581,30741],{"class":58},[35,102583,499],{"class":359},[35,102585,101862],{"class":306},[35,102587,101812],{"class":359},[21,102589,102590],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[25,102592,102594],{"className":30704,"code":102593,"language":30706,"meta":30,"style":30},"if __name__ == \"__main__\":\n    main()\n",[32,102595,102596,102608],{"__ignoreMap":30},[35,102597,102598,102600,102602,102604,102606],{"class":37,"line":38},[35,102599,1892],{"class":495},[35,102601,31546],{"class":58},[35,102603,101881],{"class":495},[35,102605,101884],{"class":306},[35,102607,4073],{"class":359},[35,102609,102610],{"class":37,"line":45},[35,102611,101891],{"class":359},[21,102613,102614,102615,102618,102619,28711],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[32,102616,102617],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[32,102620,102617],{},[21,102622,102623],{},"运行:",[25,102625,102627],{"className":24156,"code":102626,"language":24158,"meta":30,"style":30},"python ch1_first_sim.py\n",[32,102628,102629],{"__ignoreMap":30},[35,102630,102631,102633],{"class":37,"line":38},[35,102632,30706],{"class":48},[35,102634,101608],{"class":306},[438,102636,102638],{"id":102637},"_5运行结果说明","5.运行结果说明",[21,102640,102641],{},"你应该看到类似输出:",[25,102643,102646],{"className":102644,"code":102645,"language":5521,"meta":30},[5519],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[32,102647,102645],{"__ignoreMap":30},[21,102649,102650,102652,102653,102656,102657,28711],{},[32,102651,101942],{}," 有 7 个位置变量: ",[32,102654,102655],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[32,102658,102659],{},"vx vy vz wx wy wz",[21,102661,102662,102663,102666],{},"你还会看到 ",[32,102664,102665],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[438,102668,102670],{"id":102669},"_6验证步骤","6.验证步骤",[21,102672,102673],{},"确认版本:",[25,102675,102676],{"className":24156,"code":101264,"language":24158,"meta":30,"style":30},[32,102677,102678],{"__ignoreMap":30},[35,102679,102680,102682,102684],{"class":37,"line":38},[35,102681,30706],{"class":48},[35,102683,30684],{"class":58},[35,102685,101275],{"class":306},[21,102687,102688],{},"确认导入的是官方 bindings:",[25,102690,102692],{"className":24156,"code":102691,"language":24158,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco)\"\n",[32,102693,102694],{"__ignoreMap":30},[35,102695,102696,102698,102700],{"class":37,"line":38},[35,102697,30706],{"class":48},[35,102699,30684],{"class":58},[35,102701,102702],{"class":306}," \"import mujoco; print(mujoco)\"\n",[21,102704,102705],{},"运行程序:",[25,102707,102708],{"className":24156,"code":102626,"language":24158,"meta":30,"style":30},[32,102709,102710],{"__ignoreMap":30},[35,102711,102712,102714],{"class":37,"line":38},[35,102713,30706],{"class":48},[35,102715,101608],{"class":306},[21,102717,102718,102719,102722,102723,28711],{},"检查 ",[32,102720,102721],{},"final time"," 是否约等于 ",[32,102724,102725],{},"1.0",[21,102727,102728],{},"再做几个小实验：",[14,102730,102731,102741,102749,102762],{},[17,102732,102733,102734,102736,102737,102740],{},"把 ",[32,102735,102261],{}," 改成 ",[32,102738,102739],{},"pos=\"0 0 2\"","，观察初始高度变化。",[17,102742,102733,102743,102736,102745,102748],{},[32,102744,102150],{},[32,102746,102747],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[17,102750,102733,102751,102736,102753,102756,102757,102759,102760,28711],{},[32,102752,102146],{},[32,102754,102755],{},"timestep=\"0.005\"","，观察 100 步后的 ",[32,102758,102721],{}," 是否变成约 ",[32,102761,35655],{},[17,102763,102764,102765,102768],{},"删除 ",[32,102766,102767],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[21,102770,102771],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[438,102773,102775],{"id":102774},"_7常见错误与解决方案","7.常见错误与解决方案",[465,102777,102779],{"id":102778},"modulenotfounderror-no-module-named-mujoco",[32,102780,102781],{},"ModuleNotFoundError: No module named 'mujoco'",[21,102783,102784],{},"解决:",[25,102786,102788],{"className":24156,"code":102787,"language":24158,"meta":30,"style":30},"pip install \"mujoco>=2.3\"\n",[32,102789,102790],{"__ignoreMap":30},[35,102791,102792,102794,102796],{"class":37,"line":38},[35,102793,24165],{"class":48},[35,102795,318],{"class":306},[35,102797,102798],{"class":306}," \"mujoco>=2.3\"\n",[465,102800,102802],{"id":102801},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[21,102804,102805],{},"先安装系统依赖:",[25,102807,102809],{"className":24156,"code":102808,"language":24158,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[32,102810,102811],{"__ignoreMap":30},[35,102812,102813,102815,102817,102819,102821,102824,102826,102829,102831,102834,102836],{"class":37,"line":38},[35,102814,171],{"class":48},[35,102816,26645],{"class":306},[35,102818,318],{"class":306},[35,102820,26730],{"class":58},[35,102822,102823],{"class":306}," mesa-libGL",[35,102825,101139],{"class":306},[35,102827,102828],{"class":306}," glfw",[35,102830,101159],{"class":306},[35,102832,102833],{"class":306}," libX11",[35,102835,101172],{"class":306},[35,102837,102838],{"class":306}," libXrandr\n",[465,102840,102842],{"id":102841},"xml-解析失败","XML 解析失败",[21,102844,102845],{},"检查:",[14,102847,102848,102851,102854,102860],{},[17,102849,102850],{},"标签是否闭合",[17,102852,102853],{},"属性是否带引号",[17,102855,102856,102857],{},"根节点是否是 ",[32,102858,102859],{},"\u003Cmujoco>",[17,102861,102862,102864,102865,102868],{},[32,102863,52126],{}," 是否放在 ",[32,102866,102867],{},"\u003Cworldbody>"," 内部",[465,102870,102872,102874,102875],{"id":102871},"final-time-不是严格等于-10",[32,102873,102721],{}," 不是严格等于 ",[32,102876,102725],{},[21,102878,102879],{},"这通常不是错误。浮点数计算可能得到：",[25,102881,102884],{"className":102882,"code":102883,"language":5521,"meta":30},[5519],"1.0000000000000007\n",[32,102885,102883],{"__ignoreMap":30},[21,102887,102888,102889,102891],{},"只要接近 ",[32,102890,102725],{}," 就正常。",[465,102893,102894],{"id":102894},"方块没有掉下来",[21,102896,102897],{},"检查：",[14,102899,102900,102906,102912,102917],{},[17,102901,102902,102903],{},"方块 body 里是否有 ",[32,102904,102905],{},"\u003Cfreejoint\u002F>",[17,102907,102908,102909],{},"重力是否是 ",[32,102910,102911],{},"0 0 -9.81",[17,102913,102914,102915],{},"是否真的调用了 ",[32,102916,101010],{},[17,102918,102919,102920,102922,102923],{},"你看的是否是 ",[32,102921,102665],{},"，不是 ",[32,102924,102925],{},"initial qpos",[438,102927,102929],{"id":102928},"_8本章小结","8.本章小结",[21,102931,102932],{},"本章你已经完成了 MuJoCo 的最小闭环：",[25,102934,102937],{"className":102935,"code":102936,"language":5521,"meta":30},[5519],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[32,102938,102936],{"__ignoreMap":30},[21,102940,102941],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[416,102943,102944],{},"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":30,"searchDepth":45,"depth":45,"links":102946},[102947,102948,102949,102954,102958,102959,102960,102968],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":102950},[102951,102952,102953],{"id":101407,"depth":55,"text":101408},{"id":101501,"depth":55,"text":101502},{"id":101553,"depth":55,"text":101554},{"id":101577,"depth":45,"text":101578,"children":102955},[102956,102957],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":102961},[102962,102963,102964,102965,102967],{"id":102778,"depth":55,"text":102781},{"id":102801,"depth":55,"text":102802},{"id":102841,"depth":55,"text":102842},{"id":102871,"depth":55,"text":102966},"final time 不是严格等于 1.0",{"id":102894,"depth":55,"text":102894},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100963,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102975,"title":102976,"body":102977,"description":30,"extension":422,"meta":104633,"navigation":140,"path":104634,"seo":104635,"stem":104636,"__hash__":104637},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102978,"toc":104609},[102979,102982,102984,102987,102990,103007,103102,103105,103111,103113,103115,103139,103142,103156,103159,103200,103202,103215,103217,103220,103268,103280,103283,103286,103292,103305,103372,103375,103394,103397,103400,103406,103408,103417,103420,103424,103433,103515,103524,103528,103534,103548,103558,103560,103890,103893,103905,103907,103918,103920,103923,103941,103944,103947,103965,103976,103979,103994,104004,104006,104027,104044,104064,104070,104110,104126,104142,104148,104151,104175,104191,104196,104226,104243,104268,104271,104286,104295,104310,104319,104334,104341,104343,104353,104366,104373,104376,104415,104422,104424,104476,104478,104484,104487,104494,104501,104504,104506,104524,104527,104530,104564,104576,104578,104581,104603,104606],[10,102980,102976],{"id":102981},"_2xml-与-mjcf-物理建模基础",[438,102983,100972],{"id":100971},[21,102985,102986],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[21,102988,102989],{},"本章结束后，你应该能看懂一个简单模型里：",[14,102991,102992,102995,102998,103001,103004],{},[17,102993,102994],{},"地面在哪里。",[17,102996,102997],{},"物体初始位置在哪里。",[17,102999,103000],{},"几何体是什么形状。",[17,103002,103003],{},"哪些 body 可以自由运动。",[17,103005,103006],{},"如何用名字在 Python 里找到 XML 中的对象。",[633,103008,103009,103019],{},[636,103010,103011],{},[639,103012,103013,103016],{},[642,103014,103015],{"align":24070},"标签",[642,103017,103018],{"align":24070},"作用",[680,103020,103021,103030,103040,103049,103059,103069,103082,103092],{},[639,103022,103023,103027],{},[685,103024,103025],{"align":24070},[32,103026,102859],{},[685,103028,103029],{"align":24070},"根节点",[639,103031,103032,103037],{},[685,103033,103034],{"align":24070},[32,103035,103036],{},"\u003Coption>",[685,103038,103039],{"align":24070},"仿真参数",[639,103041,103042,103046],{},[685,103043,103044],{"align":24070},[32,103045,102867],{},[685,103047,103048],{"align":24070},"世界中的物体",[639,103050,103051,103056],{},[685,103052,103053],{"align":24070},[32,103054,103055],{},"\u003Cbody>",[685,103057,103058],{"align":24070},"刚体",[639,103060,103061,103066],{},[685,103062,103063],{"align":24070},[32,103064,103065],{},"\u003Cgeom>",[685,103067,103068],{"align":24070},"几何体、碰撞体、可视体",[639,103070,103071,103079],{},[685,103072,103073,25310,103076],{"align":24070},[32,103074,103075],{},"\u003Cjoint>",[32,103077,103078],{},"\u003Cfreejoint>",[685,103080,103081],{"align":24070},"关节",[639,103083,103084,103089],{},[685,103085,103086],{"align":24070},[32,103087,103088],{},"\u003Csite>",[685,103090,103091],{"align":24070},"标记点",[639,103093,103094,103099],{},[685,103095,103096],{"align":24070},[32,103097,103098],{},"\u003Cactuator>",[685,103100,103101],{"align":24070},"控制器",[21,103103,103104],{},"初学时可以先记住：",[25,103106,103109],{"className":103107,"code":103108,"language":5521,"meta":30},[5519],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[32,103110,103108],{"__ignoreMap":30},[438,103112,101095],{"id":101094},[21,103114,101098],{},[25,103116,103118],{"className":24156,"code":103117,"language":24158,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[32,103119,103120],{"__ignoreMap":30},[35,103121,103122,103124,103126,103128,103130,103132,103134,103136],{"class":37,"line":38},[35,103123,171],{"class":48},[35,103125,26645],{"class":306},[35,103127,318],{"class":306},[35,103129,26730],{"class":58},[35,103131,102823],{"class":306},[35,103133,101139],{"class":306},[35,103135,102828],{"class":306},[35,103137,103138],{"class":306}," glfw-devel\n",[21,103140,103141],{},"pip:",[25,103143,103144],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},[32,103145,103146],{"__ignoreMap":30},[35,103147,103148,103150,103152,103154],{"class":37,"line":38},[35,103149,24165],{"class":48},[35,103151,318],{"class":306},[35,103153,101255],{"class":306},[35,103155,101258],{"class":306},[21,103157,103158],{},"conda:",[25,103160,103162],{"className":24156,"code":103161,"language":24158,"meta":30,"style":30},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[32,103163,103164,103181,103190],{"__ignoreMap":30},[35,103165,103166,103168,103170,103172,103175,103177,103179],{"class":37,"line":38},[35,103167,30656],{"class":48},[35,103169,29502],{"class":306},[35,103171,25447],{"class":58},[35,103173,103174],{"class":306}," mujoco-xml",[35,103176,101300],{"class":306},[35,103178,101303],{"class":58},[35,103180,101306],{"class":58},[35,103182,103183,103185,103187],{"class":37,"line":45},[35,103184,30656],{"class":48},[35,103186,101313],{"class":306},[35,103188,103189],{"class":306}," mujoco-xml\n",[35,103191,103192,103194,103196,103198],{"class":37,"line":55},[35,103193,24165],{"class":48},[35,103195,318],{"class":306},[35,103197,101255],{"class":306},[35,103199,101258],{"class":306},[21,103201,101329],{},[14,103203,103204,103207,103212],{},[17,103205,103206],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[17,103208,103209,103210,28711],{},"本章使用基础标签，适用于 ",[32,103211,101352],{},[17,103213,103214],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[438,103216,101370],{"id":101369},[21,103218,103219],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[25,103221,103223],{"className":53393,"code":103222,"language":53395,"meta":30,"style":30},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[32,103224,103225,103239,103247,103252,103260],{"__ignoreMap":30},[35,103226,103227,103229,103231,103233,103235,103237],{"class":37,"line":38},[35,103228,1404],{"class":359},[35,103230,101346],{"class":51626},[35,103232,102097],{"class":48},[35,103234,544],{"class":359},[35,103236,63005],{"class":306},[35,103238,51633],{"class":359},[35,103240,103241,103243,103245],{"class":37,"line":45},[35,103242,52470],{"class":359},[35,103244,102163],{"class":51626},[35,103246,51633],{"class":359},[35,103248,103249],{"class":37,"line":55},[35,103250,103251],{"class":359},"    ...\n",[35,103253,103254,103256,103258],{"class":37,"line":65},[35,103255,52743],{"class":359},[35,103257,102163],{"class":51626},[35,103259,51633],{"class":359},[35,103261,103262,103264,103266],{"class":37,"line":74},[35,103263,52111],{"class":359},[35,103265,101346],{"class":51626},[35,103267,51633],{"class":359},[21,103269,103270,103272,103273,103275,103276,103279],{},[32,103271,52126],{}," 表示刚体。",[32,103274,101445],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[32,103277,103278],{},"joint"," 表示刚体相对父刚体如何运动。",[465,103281,103282],{"id":103282},"层级结构非常重要",[21,103284,103285],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[25,103287,103290],{"className":103288,"code":103289,"language":5521,"meta":30},[5519],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[32,103291,103289],{"__ignoreMap":30},[21,103293,103294,101343,103297,103300,103301,103304],{},[32,103295,103296],{},"red_box_geom",[32,103298,103299],{},"box_center"," 都属于 ",[32,103302,103303],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[25,103306,103308],{"className":53393,"code":103307,"language":53395,"meta":30,"style":30},"\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",[32,103309,103310,103330,103344,103364],{"__ignoreMap":30},[35,103311,103312,103314,103316,103318,103320,103322,103324,103326,103328],{"class":37,"line":38},[35,103313,1404],{"class":359},[35,103315,52126],{"class":51626},[35,103317,15254],{"class":48},[35,103319,544],{"class":359},[35,103321,53817],{"class":306},[35,103323,101431],{"class":48},[35,103325,544],{"class":359},[35,103327,101436],{"class":306},[35,103329,51633],{"class":359},[35,103331,103332,103334,103336,103338,103340,103342],{"class":37,"line":45},[35,103333,52470],{"class":359},[35,103335,101942],{"class":51626},[35,103337,15254],{"class":48},[35,103339,544],{"class":359},[35,103341,102283],{"class":306},[35,103343,101469],{"class":359},[35,103345,103346,103348,103350,103352,103354,103356,103358,103360,103362],{"class":37,"line":55},[35,103347,52470],{"class":359},[35,103349,101445],{"class":51626},[35,103351,54150],{"class":48},[35,103353,544],{"class":359},[35,103355,53817],{"class":306},[35,103357,101461],{"class":48},[35,103359,544],{"class":359},[35,103361,101466],{"class":306},[35,103363,101469],{"class":359},[35,103365,103366,103368,103370],{"class":37,"line":65},[35,103367,52111],{"class":359},[35,103369,52126],{"class":51626},[35,103371,51633],{"class":359},[21,103373,103374],{},"含义:",[14,103376,103377,103383,103388,103391],{},[17,103378,103379,103380,103382],{},"创建名为 ",[32,103381,54040],{}," 的刚体",[17,103384,103385,103386],{},"初始位置在世界坐标 ",[32,103387,101494],{},[17,103389,103390],{},"它有一个自由关节",[17,103392,103393],{},"它有一个盒子几何体",[465,103395,103396],{"id":103396},"坐标怎么理解",[21,103398,103399],{},"MuJoCo 默认使用三维坐标：",[25,103401,103404],{"className":103402,"code":103403,"language":5521,"meta":30},[5519],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[32,103405,103403],{"__ignoreMap":30},[21,103407,14967],{},[25,103409,103411],{"className":53393,"code":103410,"language":53395,"meta":30,"style":30},"pos=\"0 0 1\"\n",[32,103412,103413],{"__ignoreMap":30},[35,103414,103415],{"class":37,"line":38},[35,103416,103410],{"class":359},[21,103418,103419],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[465,103421,103423],{"id":103422},"geom-的-size-怎么理解","geom 的 size 怎么理解",[21,103425,103426,103427,82855,103430,103432],{},"不同 ",[32,103428,103429],{},"type",[32,103431,31822],{}," 含义不同：",[633,103434,103435,103450],{},[636,103436,103437],{},[639,103438,103439,103443,103448],{},[642,103440,103441],{"align":24070},[32,103442,103429],{},[642,103444,103445,103447],{"align":24070},[32,103446,31822],{}," 示例",[642,103449,101025],{"align":24070},[680,103451,103452,103466,103481,103500],{},[639,103453,103454,103458,103463],{},[685,103455,103456],{"align":24070},[32,103457,54040],{},[685,103459,103460],{"align":24070},[32,103461,103462],{},"size=\"0.1 0.2 0.3\"",[685,103464,103465],{"align":24070},"x\u002Fy\u002Fz 半边长，不是完整长度",[639,103467,103468,103473,103478],{},[685,103469,103470],{"align":24070},[32,103471,103472],{},"sphere",[685,103474,103475],{"align":24070},[32,103476,103477],{},"size=\"0.1\"",[685,103479,103480],{"align":24070},"球半径",[639,103482,103483,103488,103493],{},[685,103484,103485],{"align":24070},[32,103486,103487],{},"capsule",[685,103489,103490],{"align":24070},[32,103491,103492],{},"size=\"0.03\"",[685,103494,103495,103496,103499],{"align":24070},"胶囊半径，长度常用 ",[32,103497,103498],{},"fromto"," 指定",[639,103501,103502,103507,103512],{},[685,103503,103504],{"align":24070},[32,103505,103506],{},"plane",[685,103508,103509],{"align":24070},[32,103510,103511],{},"size=\"3 3 0.1\"",[685,103513,103514],{"align":24070},"可视平面大小，通常当地面",[21,103516,103517,103518,103520,103521,103523],{},"最容易踩坑的是 box：",[32,103519,102346],{}," 表示边长大约是 ",[32,103522,32363],{},"，因为 MuJoCo 用的是半边长。",[465,103525,103527],{"id":103526},"site-是什么","site 是什么",[21,103529,103530,103533],{},[32,103531,103532],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[14,103535,103536,103539,103542,103545],{},[17,103537,103538],{},"标记机械臂末端。",[17,103540,103541],{},"标记目标位置。",[17,103543,103544],{},"放传感器或相机参考点。",[17,103546,103547],{},"在 Python 中读取某个关键点的世界坐标。",[21,103549,103550,103551,101343,103554,103557],{},"在后面的 Reacher 任务中，",[32,103552,103553],{},"tip",[32,103555,103556],{},"target"," 就会用 site 表示。",[438,103559,101578],{"id":101577},[25,103561,103563],{"className":30704,"code":103562,"language":30706,"meta":30,"style":30},"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",[32,103564,103565,103571,103581,103585,103589,103597,103602,103606,103610,103614,103619,103623,103628,103633,103638,103643,103647,103651,103655,103659,103663,103667,103679,103691,103699,103703,103718,103733,103737,103750,103765,103778,103791,103795,103811,103815,103819,103830,103842,103854,103866,103870,103874,103886],{"__ignoreMap":30},[35,103566,103567,103569],{"class":37,"line":38},[35,103568,30718],{"class":495},[35,103570,101623],{"class":359},[35,103572,103573,103575,103577,103579],{"class":37,"line":45},[35,103574,30718],{"class":495},[35,103576,31706],{"class":359},[35,103578,31709],{"class":495},[35,103580,31712],{"class":359},[35,103582,103583],{"class":37,"line":55},[35,103584,141],{"emptyLinePlaceholder":140},[35,103586,103587],{"class":37,"line":65},[35,103588,141],{"emptyLinePlaceholder":140},[35,103590,103591,103593,103595],{"class":37,"line":74},[35,103592,101636],{"class":58},[35,103594,13898],{"class":495},[35,103596,101641],{"class":306},[35,103598,103599],{"class":37,"line":83},[35,103600,103601],{"class":306},"\u003Cmujoco model=\"xml_basic\">\n",[35,103603,103604],{"class":37,"line":92},[35,103605,101651],{"class":306},[35,103607,103608],{"class":37,"line":101},[35,103609,141],{"emptyLinePlaceholder":140},[35,103611,103612],{"class":37,"line":110},[35,103613,101660],{"class":306},[35,103615,103616],{"class":37,"line":119},[35,103617,103618],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[35,103620,103621],{"class":37,"line":128},[35,103622,141],{"emptyLinePlaceholder":140},[35,103624,103625],{"class":37,"line":137},[35,103626,103627],{"class":306},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[35,103629,103630],{"class":37,"line":144},[35,103631,103632],{"class":306},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[35,103634,103635],{"class":37,"line":150},[35,103636,103637],{"class":306},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[35,103639,103640],{"class":37,"line":159},[35,103641,103642],{"class":306},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[35,103644,103645],{"class":37,"line":168},[35,103646,101689],{"class":306},[35,103648,103649],{"class":37,"line":177},[35,103650,101694],{"class":306},[35,103652,103653],{"class":37,"line":182},[35,103654,101699],{"class":306},[35,103656,103657],{"class":37,"line":188},[35,103658,96023],{"class":306},[35,103660,103661],{"class":37,"line":197},[35,103662,141],{"emptyLinePlaceholder":140},[35,103664,103665],{"class":37,"line":206},[35,103666,141],{"emptyLinePlaceholder":140},[35,103668,103669,103671,103673,103675,103677],{"class":37,"line":215},[35,103670,32273],{"class":495},[35,103672,2314],{"class":48},[35,103674,101720],{"class":359},[35,103676,96011],{"class":58},[35,103678,4073],{"class":359},[35,103680,103681,103683,103685,103687,103689],{"class":37,"line":224},[35,103682,101729],{"class":359},[35,103684,544],{"class":495},[35,103686,101734],{"class":359},[35,103688,101636],{"class":58},[35,103690,505],{"class":359},[35,103692,103693,103695,103697],{"class":37,"line":233},[35,103694,101743],{"class":359},[35,103696,544],{"class":495},[35,103698,101748],{"class":359},[35,103700,103701],{"class":37,"line":238},[35,103702,141],{"emptyLinePlaceholder":140},[35,103704,103705,103708,103710,103713,103716],{"class":37,"line":244},[35,103706,103707],{"class":359},"    box_body_id ",[35,103709,544],{"class":495},[35,103711,103712],{"class":359}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[35,103714,103715],{"class":306},"\"red_box\"",[35,103717,505],{"class":359},[35,103719,103720,103723,103725,103728,103731],{"class":37,"line":253},[35,103721,103722],{"class":359},"    site_id ",[35,103724,544],{"class":495},[35,103726,103727],{"class":359}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[35,103729,103730],{"class":306},"\"box_center\"",[35,103732,505],{"class":359},[35,103734,103735],{"class":37,"line":262},[35,103736,141],{"emptyLinePlaceholder":140},[35,103738,103739,103741,103744,103746,103748],{"class":37,"line":271},[35,103740,3435],{"class":495},[35,103742,103743],{"class":359}," box_body_id ",[35,103745,1404],{"class":495},[35,103747,4427],{"class":58},[35,103749,4073],{"class":359},[35,103751,103752,103755,103758,103760,103763],{"class":37,"line":280},[35,103753,103754],{"class":495},"        raise",[35,103756,103757],{"class":58}," RuntimeError",[35,103759,499],{"class":359},[35,103761,103762],{"class":306},"\"body red_box not found\"",[35,103764,505],{"class":359},[35,103766,103767,103769,103772,103774,103776],{"class":37,"line":289},[35,103768,3435],{"class":495},[35,103770,103771],{"class":359}," site_id ",[35,103773,1404],{"class":495},[35,103775,4427],{"class":58},[35,103777,4073],{"class":359},[35,103779,103780,103782,103784,103786,103789],{"class":37,"line":294},[35,103781,103754],{"class":495},[35,103783,103757],{"class":58},[35,103785,499],{"class":359},[35,103787,103788],{"class":306},"\"site box_center not found\"",[35,103790,505],{"class":359},[35,103792,103793],{"class":37,"line":300},[35,103794,141],{"emptyLinePlaceholder":140},[35,103796,103797,103799,103801,103803,103805,103807,103809],{"class":37,"line":313},[35,103798,3535],{"class":495},[35,103800,101823],{"class":359},[35,103802,26374],{"class":495},[35,103804,32769],{"class":58},[35,103806,499],{"class":359},[35,103808,2072],{"class":58},[35,103810,31112],{"class":359},[35,103812,103813],{"class":37,"line":324},[35,103814,101838],{"class":359},[35,103816,103817],{"class":37,"line":2955},[35,103818,141],{"emptyLinePlaceholder":140},[35,103820,103821,103823,103825,103828],{"class":37,"line":8282},[35,103822,31625],{"class":58},[35,103824,499],{"class":359},[35,103826,103827],{"class":306},"\"simulation time:\"",[35,103829,101800],{"class":359},[35,103831,103832,103834,103836,103839],{"class":37,"line":8306},[35,103833,31625],{"class":58},[35,103835,499],{"class":359},[35,103837,103838],{"class":306},"\"box body position:\"",[35,103840,103841],{"class":359},", data.xpos[box_body_id].copy())\n",[35,103843,103844,103846,103848,103851],{"class":37,"line":8311},[35,103845,31625],{"class":58},[35,103847,499],{"class":359},[35,103849,103850],{"class":306},"\"site position:\"",[35,103852,103853],{"class":359},", data.site_xpos[site_id].copy())\n",[35,103855,103856,103858,103860,103863],{"class":37,"line":8317},[35,103857,31625],{"class":58},[35,103859,499],{"class":359},[35,103861,103862],{"class":306},"\"box qpos:\"",[35,103864,103865],{"class":359},", np.array(data.qpos))\n",[35,103867,103868],{"class":37,"line":8344},[35,103869,141],{"emptyLinePlaceholder":140},[35,103871,103872],{"class":37,"line":8349},[35,103873,141],{"emptyLinePlaceholder":140},[35,103875,103876,103878,103880,103882,103884],{"class":37,"line":8355},[35,103877,1892],{"class":495},[35,103879,31546],{"class":58},[35,103881,101881],{"class":495},[35,103883,101884],{"class":306},[35,103885,4073],{"class":359},[35,103887,103888],{"class":37,"line":8367},[35,103889,101891],{"class":359},[21,103891,103892],{},"保存为：",[25,103894,103896],{"className":24156,"code":103895,"language":24158,"meta":30,"style":30},"touch ch2_xml_basic.py\n",[32,103897,103898],{"__ignoreMap":30},[35,103899,103900,103902],{"class":37,"line":38},[35,103901,113],{"class":48},[35,103903,103904],{"class":306}," ch2_xml_basic.py\n",[21,103906,102623],{},[25,103908,103910],{"className":24156,"code":103909,"language":24158,"meta":30,"style":30},"python ch2_xml_basic.py\n",[32,103911,103912],{"__ignoreMap":30},[35,103913,103914,103916],{"class":37,"line":38},[35,103915,30706],{"class":48},[35,103917,103904],{"class":306},[465,103919,101894],{"id":101894},[21,103921,103922],{},"用名字查找 body：",[25,103924,103926],{"className":30704,"code":103925,"language":30706,"meta":30,"style":30},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[32,103927,103928],{"__ignoreMap":30},[35,103929,103930,103933,103935,103937,103939],{"class":37,"line":38},[35,103931,103932],{"class":359},"box_body_id ",[35,103934,544],{"class":495},[35,103936,103712],{"class":359},[35,103938,103715],{"class":306},[35,103940,505],{"class":359},[21,103942,103943],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[21,103945,103946],{},"用名字查找 site：",[25,103948,103950],{"className":30704,"code":103949,"language":30706,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[32,103951,103952],{"__ignoreMap":30},[35,103953,103954,103957,103959,103961,103963],{"class":37,"line":38},[35,103955,103956],{"class":359},"site_id ",[35,103958,544],{"class":495},[35,103960,103727],{"class":359},[35,103962,103730],{"class":306},[35,103964,505],{"class":359},[21,103966,103967,103968,103971,103972,103975],{},"注意第二个参数是对象类型。查 body 就用 ",[32,103969,103970],{},"mjOBJ_BODY","，查 site 就用 ",[32,103973,103974],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[21,103977,103978],{},"读取世界坐标：",[25,103980,103982],{"className":30704,"code":103981,"language":30706,"meta":30,"style":30},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[32,103983,103984,103989],{"__ignoreMap":30},[35,103985,103986],{"class":37,"line":38},[35,103987,103988],{"class":359},"data.xpos[box_body_id]\n",[35,103990,103991],{"class":37,"line":45},[35,103992,103993],{"class":359},"data.site_xpos[site_id]\n",[21,103995,103996,103999,104000,104003],{},[32,103997,103998],{},"xpos"," 是 body 的世界坐标，",[32,104001,104002],{},"site_xpos"," 是 site 的世界坐标。",[465,104005,102030],{"id":102030},[25,104007,104009],{"className":30704,"code":104008,"language":30706,"meta":30,"style":30},"import mujoco\nimport numpy as np\n",[32,104010,104011,104017],{"__ignoreMap":30},[35,104012,104013,104015],{"class":37,"line":38},[35,104014,30718],{"class":495},[35,104016,101623],{"class":359},[35,104018,104019,104021,104023,104025],{"class":37,"line":45},[35,104020,30718],{"class":495},[35,104022,31706],{"class":359},[35,104024,31709],{"class":495},[35,104026,31712],{"class":359},[21,104028,104029,104030,104033,104034,104037,104038,708,104041,28711],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[32,104031,104032],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[32,104035,104036],{},"as np"," 是习惯写法，后面就可以写 ",[32,104039,104040],{},"np.array(...)",[32,104042,104043],{},"np.round(...)",[25,104045,104046],{"className":30704,"code":101917,"language":30706,"meta":30,"style":30},[32,104047,104048,104056,104060],{"__ignoreMap":30},[35,104049,104050,104052,104054],{"class":37,"line":38},[35,104051,101636],{"class":58},[35,104053,13898],{"class":495},[35,104055,101641],{"class":306},[35,104057,104058],{"class":37,"line":45},[35,104059,101932],{"class":306},[35,104061,104062],{"class":37,"line":55},[35,104063,96023],{"class":306},[21,104065,104066,104067,28711],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[32,104068,104069],{},"mujoco.MjModel.from_xml_string(XML)",[25,104071,104073],{"className":53393,"code":104072,"language":53395,"meta":30,"style":30},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,104074,104075],{"__ignoreMap":30},[35,104076,104077,104079,104081,104083,104085,104087,104089,104091,104094,104096,104098,104101,104103,104105,104108],{"class":37,"line":38},[35,104078,1404],{"class":359},[35,104080,103532],{"class":51626},[35,104082,15254],{"class":48},[35,104084,544],{"class":359},[35,104086,103730],{"class":306},[35,104088,101431],{"class":48},[35,104090,544],{"class":359},[35,104092,104093],{"class":306},"\"0 0 0\"",[35,104095,101461],{"class":48},[35,104097,544],{"class":359},[35,104099,104100],{"class":306},"\"0.03\"",[35,104102,79092],{"class":48},[35,104104,544],{"class":359},[35,104106,104107],{"class":306},"\"0 1 0 1\"",[35,104109,101469],{"class":359},[21,104111,104112,104114,104115,104118,104119,104121,104122,104125],{},[32,104113,103532],{}," 是标记点。",[32,104116,104117],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[32,104120,103492],{}," 表示显示出来的小球大小。",[32,104123,104124],{},"rgba=\"0 1 0 1\""," 表示绿色。",[25,104127,104128],{"className":30704,"code":103925,"language":30706,"meta":30,"style":30},[32,104129,104130],{"__ignoreMap":30},[35,104131,104132,104134,104136,104138,104140],{"class":37,"line":38},[35,104133,103932],{"class":359},[35,104135,544],{"class":495},[35,104137,103712],{"class":359},[35,104139,103715],{"class":306},[35,104141,505],{"class":359},[21,104143,104144,104145,104147],{},"这行的作用是：根据名字 ",[32,104146,103715],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[21,104149,104150],{},"拆开看：",[14,104152,104153,104159,104164,104170],{},[17,104154,104155,104158],{},[32,104156,104157],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[17,104160,104161,104163],{},[32,104162,102407],{}," 是被查询的模型。",[17,104165,104166,104169],{},[32,104167,104168],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[17,104171,104172,104174],{},[32,104173,103715],{}," 是 XML 里写的名字。",[25,104176,104177],{"className":30704,"code":103949,"language":30706,"meta":30,"style":30},[32,104178,104179],{"__ignoreMap":30},[35,104180,104181,104183,104185,104187,104189],{"class":37,"line":38},[35,104182,103956],{"class":359},[35,104184,544],{"class":495},[35,104186,103727],{"class":359},[35,104188,103730],{"class":306},[35,104190,505],{"class":359},[21,104192,104193,104194,28711],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[32,104195,103730],{},[25,104197,104199],{"className":30704,"code":104198,"language":30706,"meta":30,"style":30},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[32,104200,104201,104213],{"__ignoreMap":30},[35,104202,104203,104205,104207,104209,104211],{"class":37,"line":38},[35,104204,1892],{"class":495},[35,104206,103743],{"class":359},[35,104208,1404],{"class":495},[35,104210,4427],{"class":58},[35,104212,4073],{"class":359},[35,104214,104215,104218,104220,104222,104224],{"class":37,"line":45},[35,104216,104217],{"class":495},"    raise",[35,104219,103757],{"class":58},[35,104221,499],{"class":359},[35,104223,103762],{"class":306},[35,104225,505],{"class":359},[21,104227,104228,104230,104231,104234,104235,104238,104239,104242],{},[32,104229,1892],{}," 是条件判断。",[32,104232,104233],{},"mj_name2id"," 找不到对象时会返回 ",[32,104236,104237],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[32,104240,104241],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[25,104244,104246],{"className":30704,"code":104245,"language":30706,"meta":30,"style":30},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[32,104247,104248,104264],{"__ignoreMap":30},[35,104249,104250,104252,104254,104256,104258,104260,104262],{"class":37,"line":38},[35,104251,3359],{"class":495},[35,104253,101823],{"class":359},[35,104255,26374],{"class":495},[35,104257,32769],{"class":58},[35,104259,499],{"class":359},[35,104261,2072],{"class":58},[35,104263,31112],{"class":359},[35,104265,104266],{"class":37,"line":45},[35,104267,102021],{"class":359},[21,104269,104270],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[25,104272,104274],{"className":30704,"code":104273,"language":30706,"meta":30,"style":30},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[32,104275,104276],{"__ignoreMap":30},[35,104277,104278,104280,104282,104284],{"class":37,"line":38},[35,104279,30741],{"class":58},[35,104281,499],{"class":359},[35,104283,103838],{"class":306},[35,104285,103841],{"class":359},[21,104287,104288,104290,104291,104294],{},[32,104289,101404],{}," 保存所有 body 的世界坐标。",[32,104292,104293],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[25,104296,104298],{"className":30704,"code":104297,"language":30706,"meta":30,"style":30},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[32,104299,104300],{"__ignoreMap":30},[35,104301,104302,104304,104306,104308],{"class":37,"line":38},[35,104303,30741],{"class":58},[35,104305,499],{"class":359},[35,104307,103850],{"class":306},[35,104309,103853],{"class":359},[21,104311,104312,104315,104316,104318],{},[32,104313,104314],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[32,104317,103299],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[25,104320,104322],{"className":30704,"code":104321,"language":30706,"meta":30,"style":30},"print(\"box qpos:\", np.array(data.qpos))\n",[32,104323,104324],{"__ignoreMap":30},[35,104325,104326,104328,104330,104332],{"class":37,"line":38},[35,104327,30741],{"class":58},[35,104329,499],{"class":359},[35,104331,103862],{"class":306},[35,104333,103865],{"class":359},[21,104335,104336,104337,104340],{},"这里打印广义位置数组。",[32,104338,104339],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[438,104342,102638],{"id":102637},[21,104344,104345,104346,104349,104350,28711],{},"程序会输出 ",[32,104347,104348],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[32,104351,104352],{},"qpos",[21,104354,104355,104357,104358,104361,104362,104365],{},[32,104356,104293],{}," 是 body 的世界坐标位置。",[32,104359,104360],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[32,104363,104364],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[21,104367,82547,104368,82855,104370,104372],{},[32,104369,103299],{},[32,104371,104117],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[21,104374,104375],{},"如果你把 site 改成：",[25,104377,104379],{"className":53393,"code":104378,"language":53395,"meta":30,"style":30},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,104380,104381],{"__ignoreMap":30},[35,104382,104383,104385,104387,104389,104391,104394,104396,104398,104401,104403,104405,104407,104409,104411,104413],{"class":37,"line":38},[35,104384,1404],{"class":359},[35,104386,103532],{"class":51626},[35,104388,15254],{"class":48},[35,104390,544],{"class":359},[35,104392,104393],{"class":306},"\"box_top\"",[35,104395,101431],{"class":48},[35,104397,544],{"class":359},[35,104399,104400],{"class":306},"\"0 0 0.15\"",[35,104402,101461],{"class":48},[35,104404,544],{"class":359},[35,104406,104100],{"class":306},[35,104408,79092],{"class":48},[35,104410,544],{"class":359},[35,104412,104107],{"class":306},[35,104414,101469],{"class":359},[21,104416,104417,104418,104421],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[32,104419,104420],{},"site position"," 就会比 body position 的 z 坐标更高。",[438,104423,102670],{"id":102669},[14,104425,104426,104435,104438,104445,104451,104462],{},[17,104427,102733,104428,104430,104431,102736,104433,28711],{},[32,104429,103303],{}," 的初始高度从 ",[32,104432,713],{},[32,104434,574],{},[17,104436,104437],{},"重新运行程序。",[17,104439,104440,104441,104444],{},"观察 ",[32,104442,104443],{},"box qpos"," 和最终位置是否变化。",[17,104446,104447,104448,104450],{},"故意把 ",[32,104449,103532],{}," 名称改错，确认程序能报错。",[17,104452,102733,104453,104455,104456,102736,104458,104461],{},[32,104454,101445],{}," 的颜色 ",[32,104457,102354],{},[32,104459,104460],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[17,104463,102733,104464,82855,104466,102736,104469,104472,104473,104475],{},[32,104465,103299],{},[32,104467,104468],{},"pos",[32,104470,104471],{},"0 0 0.2","，观察 ",[32,104474,104420],{}," 如何变化。",[438,104477,102775],{"id":102774},[465,104479,104481],{"id":104480},"xml-error-schema-violation",[32,104482,104483],{},"XML Error: Schema violation",[21,104485,104486],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[465,104488,104490,81615,104492],{"id":104489},"mj_name2id-返回-1",[32,104491,104233],{},[32,104493,104237],{},[21,104495,104496,104497,104500],{},"说明名字没有找到。检查 XML 中 ",[32,104498,104499],{},"name=\"...\"","，并确认对象类型正确。",[465,104502,104503],{"id":104503},"物体不下落",[21,104505,102845],{},[14,104507,104508,104513,104518],{},[17,104509,104510,104511],{},"body 是否有 ",[32,104512,101942],{},[17,104514,104515,104516],{},"gravity 是否为 ",[32,104517,102911],{},[17,104519,104520,104521,104523],{},"body 是否被固定在 ",[32,104522,102163],{}," 中",[465,104525,104526],{"id":104526},"坐标看起来不符合预期",[21,104528,104529],{},"先区分两种坐标：",[633,104531,104532,104541],{},[636,104533,104534],{},[639,104535,104536,104539],{},[642,104537,104538],{"align":24070},"坐标",[642,104540,101025],{"align":24070},[680,104542,104543,104553],{},[639,104544,104545,104550],{},[685,104546,104547,104548],{"align":24070},"XML 里的 ",[32,104549,104468],{},[685,104551,104552],{"align":24070},"相对父 body 的局部坐标",[639,104554,104555,104561],{},[685,104556,104557,25310,104559],{"align":24070},[32,104558,101404],{},[32,104560,104314],{},[685,104562,104563],{"align":24070},"仿真更新后的世界坐标",[21,104565,104566,104567,104569,104570,82864,104573,104575],{},"如果你修改了 ",[32,104568,101395],{},"，但还没调用 ",[32,104571,104572],{},"mj_forward",[32,104574,101540],{},"，世界坐标可能还没有更新。",[438,104577,102929],{"id":102928},[21,104579,104580],{},"MJCF 建模先掌握四件事：",[14,104582,104583,104588,104593,104598],{},[17,104584,104585,104587],{},[32,104586,52126],{}," 表示刚体层级。",[17,104589,104590,104592],{},[32,104591,101445],{}," 表示形状、碰撞和质量。",[17,104594,104595,104597],{},[32,104596,103278],{}," 决定 body 能不能动、怎么动。",[17,104599,104600,104602],{},[32,104601,103532],{}," 用来标记关键点，方便 Python 读取位置。",[21,104604,104605],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[416,104607,104608],{},"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":30,"searchDepth":45,"depth":45,"links":104610},[104611,104612,104613,104619,104623,104624,104625,104632],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":104614},[104615,104616,104617,104618],{"id":103282,"depth":55,"text":103282},{"id":103396,"depth":55,"text":103396},{"id":103422,"depth":55,"text":103423},{"id":103526,"depth":55,"text":103527},{"id":101577,"depth":45,"text":101578,"children":104620},[104621,104622],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":104626},[104627,104628,104630,104631],{"id":104480,"depth":55,"text":104483},{"id":104489,"depth":55,"text":104629},"mj_name2id 返回 -1",{"id":104503,"depth":55,"text":104503},{"id":104526,"depth":55,"text":104526},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102976,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104639,"title":104640,"body":104641,"description":30,"extension":422,"meta":106136,"navigation":140,"path":106137,"seo":106138,"stem":106139,"__hash__":106140},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104642,"toc":106108},[104643,104646,104648,104651,104654,104692,104695,104701,104704,104706,104708,104735,104737,104751,104753,104794,104796,104820,104822,104825,104834,104843,104846,104855,104863,104872,104875,104885,104888,104940,104947,104953,104961,105009,105012,105031,105034,105042,105046,105055,105088,105090,105438,105440,105452,105454,105465,105467,105470,105491,105497,105500,105525,105535,105538,105546,105549,105552,105573,105584,105586,105606,105609,105630,105639,105658,105664,105689,105692,105706,105713,105737,105740,105748,105757,105773,105785,105793,105802,105804,105807,105831,105836,105839,105861,105863,105902,105904,105911,105913,105921,105924,105927,105939,105980,105987,105998,106005,106008,106057,106060,106063,106069,106071,106076,106102,106105],[10,104644,104640],{"id":104645},"_3python-控制接口读取状态与推进仿真",[438,104647,100972],{"id":100971},[21,104649,104650],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[21,104652,104653],{},"你将学习:",[14,104655,104656,104661,104666,104670,104675,104686],{},[17,104657,104658],{},[32,104659,104660],{},"MjModel.from_xml_string",[17,104662,104663],{},[32,104664,104665],{},"MjData(model)",[17,104667,104668],{},[32,104669,101540],{},[17,104671,104672],{},[32,104673,104674],{},"mj_resetData",[17,104676,104677,104678,708,104680,708,104683],{},"读取 ",[32,104679,104352],{},[32,104681,104682],{},"qvel",[32,104684,104685],{},"ctrl",[17,104687,104688,104689],{},"使用 ",[32,104690,104691],{},"model.opt.timestep",[21,104693,104694],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[25,104696,104699],{"className":104697,"code":104698,"language":5521,"meta":30},[5519],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[32,104700,104698],{"__ignoreMap":30},[21,104702,104703],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[438,104705,101095],{"id":101094},[21,104707,101098],{},[25,104709,104711],{"className":24156,"code":104710,"language":24158,"meta":30,"style":30},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[32,104712,104713],{"__ignoreMap":30},[35,104714,104715,104717,104719,104721,104723,104726,104728,104730,104732],{"class":37,"line":38},[35,104716,171],{"class":48},[35,104718,26645],{"class":306},[35,104720,318],{"class":306},[35,104722,26730],{"class":58},[35,104724,104725],{"class":306}," python3",[35,104727,101123],{"class":306},[35,104729,102823],{"class":306},[35,104731,101139],{"class":306},[35,104733,104734],{"class":306}," glfw\n",[21,104736,103141],{},[25,104738,104739],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},[32,104740,104741],{"__ignoreMap":30},[35,104742,104743,104745,104747,104749],{"class":37,"line":38},[35,104744,24165],{"class":48},[35,104746,318],{"class":306},[35,104748,101255],{"class":306},[35,104750,101258],{"class":306},[21,104752,103158],{},[25,104754,104756],{"className":24156,"code":104755,"language":24158,"meta":30,"style":30},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[32,104757,104758,104775,104784],{"__ignoreMap":30},[35,104759,104760,104762,104764,104766,104769,104771,104773],{"class":37,"line":38},[35,104761,30656],{"class":48},[35,104763,29502],{"class":306},[35,104765,25447],{"class":58},[35,104767,104768],{"class":306}," mujoco-python-api",[35,104770,101300],{"class":306},[35,104772,101303],{"class":58},[35,104774,101306],{"class":58},[35,104776,104777,104779,104781],{"class":37,"line":45},[35,104778,30656],{"class":48},[35,104780,101313],{"class":306},[35,104782,104783],{"class":306}," mujoco-python-api\n",[35,104785,104786,104788,104790,104792],{"class":37,"line":55},[35,104787,24165],{"class":48},[35,104789,318],{"class":306},[35,104791,101255],{"class":306},[35,104793,101258],{"class":306},[21,104795,101329],{},[14,104797,104798,104805,104814],{},[17,104799,104800,101343,104802,104804],{},[32,104801,101000],{},[32,104803,101005],{}," 是官方 Python bindings 的类名。",[17,104806,104807,104808,104811,104812,28711],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[32,104809,104810],{},"mjModel"," 在 Python 中是 ",[32,104813,101034],{},[17,104815,104816,104817,28711],{},"不要使用 ",[32,104818,104819],{},"sim = mujoco_py.MjSim(...)",[438,104821,101370],{"id":101369},[21,104823,104824],{},"仿真推进核心代码:",[25,104826,104828],{"className":30704,"code":104827,"language":30706,"meta":30,"style":30},"mujoco.mj_step(model, data)\n",[32,104829,104830],{"__ignoreMap":30},[35,104831,104832],{"class":37,"line":38},[35,104833,104827],{"class":359},[21,104835,104836,104837,708,104839,708,104841,28711],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[32,104838,101395],{},[32,104840,101398],{},[32,104842,101392],{},[21,104844,104845],{},"重置仿真:",[25,104847,104849],{"className":30704,"code":104848,"language":30706,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\n",[32,104850,104851],{"__ignoreMap":30},[35,104852,104853],{"class":37,"line":38},[35,104854,104848],{"class":359},[21,104856,104857,104858,82864,104860,104862],{},"如果手动修改了 ",[32,104859,101395],{},[32,104861,101398],{},"，通常应调用:",[25,104864,104866],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},"mujoco.mj_forward(model, data)\n",[32,104867,104868],{"__ignoreMap":30},[35,104869,104870],{"class":37,"line":38},[35,104871,104865],{"class":359},[21,104873,104874],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[465,104876,104878,708,104880,708,104882,104884],{"id":104877},"qposqvelctrl-是什么",[32,104879,104352],{},[32,104881,104682],{},[32,104883,104685],{}," 是什么",[21,104886,104887],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[633,104889,104890,104902],{},[636,104891,104892],{},[639,104893,104894,104897,104899],{},[642,104895,104896],{"align":24070},"字段",[642,104898,101025],{"align":24070},[642,104900,104901],{"align":24070},"谁来修改",[680,104903,104904,104916,104928],{},[639,104905,104906,104910,104913],{},[685,104907,104908],{"align":24070},[32,104909,101395],{},[685,104911,104912],{"align":24070},"广义位置，例如小车位置、关节角、自由物体位置姿态",[685,104914,104915],{"align":24070},"MuJoCo 更新，也可以手动设置初始状态",[639,104917,104918,104922,104925],{},[685,104919,104920],{"align":24070},[32,104921,101398],{},[685,104923,104924],{"align":24070},"广义速度，例如小车速度、关节角速度",[685,104926,104927],{"align":24070},"MuJoCo 更新，也可以手动清零",[639,104929,104930,104934,104937],{},[685,104931,104932],{"align":24070},[32,104933,101401],{},[685,104935,104936],{"align":24070},"actuator 的控制输入",[685,104938,104939],{"align":24070},"主要由你的控制代码写入",[21,104941,9359,104942,101343,104944,104946],{},[32,104943,104352],{},[32,104945,104682],{}," 不一定同维。自由刚体就是典型例子：",[25,104948,104951],{"className":104949,"code":104950,"language":5521,"meta":30},[5519],"freejoint: qpos 7 维，qvel 6 维\n",[32,104952,104950],{"__ignoreMap":30},[465,104954,104956,101343,104958,104960],{"id":104955},"mj_step-和-mj_forward-的区别",[32,104957,101540],{},[32,104959,104572],{}," 的区别",[633,104962,104963,104976],{},[636,104964,104965],{},[639,104966,104967,104970,104973],{},[642,104968,104969],{"align":24070},"函数",[642,104971,104972],{"align":24070},"是否推进时间",[642,104974,104975],{"align":24070},"什么时候用",[680,104977,104978,104991],{},[639,104979,104980,104985,104988],{},[685,104981,104982],{"align":24070},[32,104983,104984],{},"mj_step(model, data)",[685,104986,104987],{"align":24070},"是",[685,104989,104990],{"align":24070},"正常仿真循环，每调用一次前进一步",[639,104992,104993,104998,105001],{},[685,104994,104995],{"align":24070},[32,104996,104997],{},"mj_forward(model, data)",[685,104999,105000],{"align":24070},"否",[685,105002,105003,105004,708,105006,105008],{"align":24070},"手动改了 ",[32,105005,104352],{},[32,105007,104682],{}," 后，刷新派生量",[21,105010,105011],{},"例如你写：",[25,105013,105015],{"className":30704,"code":105014,"language":30706,"meta":30,"style":30},"data.qpos[2] = 2.0\n",[32,105016,105017],{"__ignoreMap":30},[35,105018,105019,105022,105024,105026,105028],{"class":37,"line":38},[35,105020,105021],{"class":359},"data.qpos[",[35,105023,574],{"class":58},[35,105025,4777],{"class":359},[35,105027,544],{"class":495},[35,105029,105030],{"class":58}," 2.0\n",[21,105032,105033],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[25,105035,105036],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},[32,105037,105038],{"__ignoreMap":30},[35,105039,105040],{"class":37,"line":38},[35,105041,104865],{"class":359},[465,105043,105045],{"id":105044},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[21,105047,105048,105051,105052,105054],{},[32,105049,105050],{},"mujoco.mj_resetData(model, data)"," 会把 ",[32,105053,33727],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[25,105056,105058],{"className":30704,"code":105057,"language":30706,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[32,105059,105060,105064,105074,105084],{"__ignoreMap":30},[35,105061,105062],{"class":37,"line":38},[35,105063,104848],{"class":359},[35,105065,105066,105069,105071],{"class":37,"line":45},[35,105067,105068],{"class":359},"data.qpos[:] ",[35,105070,544],{"class":495},[35,105072,105073],{"class":359}," random_qpos\n",[35,105075,105076,105079,105081],{"class":37,"line":55},[35,105077,105078],{"class":359},"data.qvel[:] ",[35,105080,544],{"class":495},[35,105082,105083],{"class":58}," 0.0\n",[35,105085,105086],{"class":37,"line":65},[35,105087,104865],{"class":359},[438,105089,101578],{"id":101577},[25,105091,105093],{"className":30704,"code":105092,"language":30706,"meta":30,"style":30},"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",[32,105094,105095,105101,105111,105115,105119,105127,105132,105136,105140,105144,105149,105153,105158,105163,105168,105172,105176,105180,105184,105188,105192,105211,105218,105230,105241,105257,105273,105277,105281,105293,105305,105313,105317,105328,105332,105348,105352,105356,105365,105369,105374,105383,105387,105400,105405,105414,105418,105422,105434],{"__ignoreMap":30},[35,105096,105097,105099],{"class":37,"line":38},[35,105098,30718],{"class":495},[35,105100,101623],{"class":359},[35,105102,105103,105105,105107,105109],{"class":37,"line":45},[35,105104,30718],{"class":495},[35,105106,31706],{"class":359},[35,105108,31709],{"class":495},[35,105110,31712],{"class":359},[35,105112,105113],{"class":37,"line":55},[35,105114,141],{"emptyLinePlaceholder":140},[35,105116,105117],{"class":37,"line":65},[35,105118,141],{"emptyLinePlaceholder":140},[35,105120,105121,105123,105125],{"class":37,"line":74},[35,105122,101636],{"class":58},[35,105124,13898],{"class":495},[35,105126,101641],{"class":306},[35,105128,105129],{"class":37,"line":83},[35,105130,105131],{"class":306},"\u003Cmujoco model=\"state_api\">\n",[35,105133,105134],{"class":37,"line":92},[35,105135,101651],{"class":306},[35,105137,105138],{"class":37,"line":101},[35,105139,141],{"emptyLinePlaceholder":140},[35,105141,105142],{"class":37,"line":110},[35,105143,101660],{"class":306},[35,105145,105146],{"class":37,"line":119},[35,105147,105148],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[35,105150,105151],{"class":37,"line":128},[35,105152,141],{"emptyLinePlaceholder":140},[35,105154,105155],{"class":37,"line":137},[35,105156,105157],{"class":306},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[35,105159,105160],{"class":37,"line":144},[35,105161,105162],{"class":306},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[35,105164,105165],{"class":37,"line":150},[35,105166,105167],{"class":306},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[35,105169,105170],{"class":37,"line":159},[35,105171,101689],{"class":306},[35,105173,105174],{"class":37,"line":168},[35,105175,101694],{"class":306},[35,105177,105178],{"class":37,"line":177},[35,105179,101699],{"class":306},[35,105181,105182],{"class":37,"line":182},[35,105183,96023],{"class":306},[35,105185,105186],{"class":37,"line":188},[35,105187,141],{"emptyLinePlaceholder":140},[35,105189,105190],{"class":37,"line":197},[35,105191,141],{"emptyLinePlaceholder":140},[35,105193,105194,105196,105199,105202,105204,105207,105209],{"class":37,"line":206},[35,105195,32273],{"class":495},[35,105197,105198],{"class":48}," print_state",[35,105200,105201],{"class":359},"(prefix: ",[35,105203,1664],{"class":58},[35,105205,105206],{"class":359},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[35,105208,96011],{"class":58},[35,105210,4073],{"class":359},[35,105212,105213,105215],{"class":37,"line":215},[35,105214,31625],{"class":58},[35,105216,105217],{"class":359},"(prefix)\n",[35,105219,105220,105222,105224,105227],{"class":37,"line":224},[35,105221,31625],{"class":58},[35,105223,499],{"class":359},[35,105225,105226],{"class":306},"\"  timestep:\"",[35,105228,105229],{"class":359},", model.opt.timestep)\n",[35,105231,105232,105234,105236,105239],{"class":37,"line":233},[35,105233,31625],{"class":58},[35,105235,499],{"class":359},[35,105237,105238],{"class":306},"\"  time:\"",[35,105240,101800],{"class":359},[35,105242,105243,105245,105247,105250,105253,105255],{"class":37,"line":238},[35,105244,31625],{"class":58},[35,105246,499],{"class":359},[35,105248,105249],{"class":306},"\"  qpos:\"",[35,105251,105252],{"class":359},", np.round(data.qpos.copy(), ",[35,105254,789],{"class":58},[35,105256,30823],{"class":359},[35,105258,105259,105261,105263,105266,105269,105271],{"class":37,"line":244},[35,105260,31625],{"class":58},[35,105262,499],{"class":359},[35,105264,105265],{"class":306},"\"  qvel:\"",[35,105267,105268],{"class":359},", np.round(data.qvel.copy(), ",[35,105270,789],{"class":58},[35,105272,30823],{"class":359},[35,105274,105275],{"class":37,"line":253},[35,105276,141],{"emptyLinePlaceholder":140},[35,105278,105279],{"class":37,"line":262},[35,105280,141],{"emptyLinePlaceholder":140},[35,105282,105283,105285,105287,105289,105291],{"class":37,"line":271},[35,105284,32273],{"class":495},[35,105286,2314],{"class":48},[35,105288,101720],{"class":359},[35,105290,96011],{"class":58},[35,105292,4073],{"class":359},[35,105294,105295,105297,105299,105301,105303],{"class":37,"line":280},[35,105296,101729],{"class":359},[35,105298,544],{"class":495},[35,105300,101734],{"class":359},[35,105302,101636],{"class":58},[35,105304,505],{"class":359},[35,105306,105307,105309,105311],{"class":37,"line":289},[35,105308,101743],{"class":359},[35,105310,544],{"class":495},[35,105312,101748],{"class":359},[35,105314,105315],{"class":37,"line":294},[35,105316,141],{"emptyLinePlaceholder":140},[35,105318,105319,105322,105325],{"class":37,"line":300},[35,105320,105321],{"class":359},"    print_state(",[35,105323,105324],{"class":306},"\"initial\"",[35,105326,105327],{"class":359},", model, data)\n",[35,105329,105330],{"class":37,"line":313},[35,105331,141],{"emptyLinePlaceholder":140},[35,105333,105334,105336,105338,105340,105342,105344,105346],{"class":37,"line":324},[35,105335,3535],{"class":495},[35,105337,101823],{"class":359},[35,105339,26374],{"class":495},[35,105341,32769],{"class":58},[35,105343,499],{"class":359},[35,105345,1150],{"class":58},[35,105347,31112],{"class":359},[35,105349,105350],{"class":37,"line":2955},[35,105351,101838],{"class":359},[35,105353,105354],{"class":37,"line":8282},[35,105355,141],{"emptyLinePlaceholder":140},[35,105357,105358,105360,105363],{"class":37,"line":8306},[35,105359,105321],{"class":359},[35,105361,105362],{"class":306},"\"after 50 steps\"",[35,105364,105327],{"class":359},[35,105366,105367],{"class":37,"line":8311},[35,105368,141],{"emptyLinePlaceholder":140},[35,105370,105371],{"class":37,"line":8317},[35,105372,105373],{"class":359},"    mujoco.mj_resetData(model, data)\n",[35,105375,105376,105378,105381],{"class":37,"line":8344},[35,105377,105321],{"class":359},[35,105379,105380],{"class":306},"\"after reset\"",[35,105382,105327],{"class":359},[35,105384,105385],{"class":37,"line":8349},[35,105386,141],{"emptyLinePlaceholder":140},[35,105388,105389,105392,105394,105396,105398],{"class":37,"line":8355},[35,105390,105391],{"class":359},"    data.qpos[",[35,105393,574],{"class":58},[35,105395,4777],{"class":359},[35,105397,544],{"class":495},[35,105399,105030],{"class":58},[35,105401,105402],{"class":37,"line":8367},[35,105403,105404],{"class":359},"    mujoco.mj_forward(model, data)\n",[35,105406,105407,105409,105412],{"class":37,"line":8379},[35,105408,105321],{"class":359},[35,105410,105411],{"class":306},"\"after manual qpos edit\"",[35,105413,105327],{"class":359},[35,105415,105416],{"class":37,"line":8391},[35,105417,141],{"emptyLinePlaceholder":140},[35,105419,105420],{"class":37,"line":10050},[35,105421,141],{"emptyLinePlaceholder":140},[35,105423,105424,105426,105428,105430,105432],{"class":37,"line":10075},[35,105425,1892],{"class":495},[35,105427,31546],{"class":58},[35,105429,101881],{"class":495},[35,105431,101884],{"class":306},[35,105433,4073],{"class":359},[35,105435,105436],{"class":37,"line":10098},[35,105437,101891],{"class":359},[21,105439,103892],{},[25,105441,105443],{"className":24156,"code":105442,"language":24158,"meta":30,"style":30},"touch ch3_python_state.py\n",[32,105444,105445],{"__ignoreMap":30},[35,105446,105447,105449],{"class":37,"line":38},[35,105448,113],{"class":48},[35,105450,105451],{"class":306}," ch3_python_state.py\n",[21,105453,102623],{},[25,105455,105457],{"className":24156,"code":105456,"language":24158,"meta":30,"style":30},"python ch3_python_state.py\n",[32,105458,105459],{"__ignoreMap":30},[35,105460,105461,105463],{"class":37,"line":38},[35,105462,30706],{"class":48},[35,105464,105451],{"class":306},[465,105466,101894],{"id":101894},[21,105468,105469],{},"打印状态的函数：",[25,105471,105473],{"className":30704,"code":105472,"language":30706,"meta":30,"style":30},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[32,105474,105475],{"__ignoreMap":30},[35,105476,105477,105479,105481,105483,105485,105487,105489],{"class":37,"line":38},[35,105478,32273],{"class":495},[35,105480,105198],{"class":48},[35,105482,105201],{"class":359},[35,105484,1664],{"class":58},[35,105486,105206],{"class":359},[35,105488,96011],{"class":58},[35,105490,4073],{"class":359},[21,105492,105493,105494,105496],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[32,105495,33727],{}," 里发生了什么。",[21,105498,105499],{},"推进 50 步：",[25,105501,105503],{"className":30704,"code":105502,"language":30706,"meta":30,"style":30},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[32,105504,105505,105521],{"__ignoreMap":30},[35,105506,105507,105509,105511,105513,105515,105517,105519],{"class":37,"line":38},[35,105508,3359],{"class":495},[35,105510,101823],{"class":359},[35,105512,26374],{"class":495},[35,105514,32769],{"class":58},[35,105516,499],{"class":359},[35,105518,1150],{"class":58},[35,105520,31112],{"class":359},[35,105522,105523],{"class":37,"line":45},[35,105524,102021],{"class":359},[21,105526,105527,105528,105531,105532,105534],{},"由于 ",[32,105529,105530],{},"timestep=0.01","，所以 50 步后时间约为 ",[32,105533,35655],{}," 秒。",[21,105536,105537],{},"重置：",[25,105539,105540],{"className":30704,"code":104848,"language":30706,"meta":30,"style":30},[32,105541,105542],{"__ignoreMap":30},[35,105543,105544],{"class":37,"line":38},[35,105545,104848],{"class":359},[21,105547,105548],{},"这会把时间、位置、速度恢复到初始状态。",[21,105550,105551],{},"手动改高度：",[25,105553,105555],{"className":30704,"code":105554,"language":30706,"meta":30,"style":30},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[32,105556,105557,105569],{"__ignoreMap":30},[35,105558,105559,105561,105563,105565,105567],{"class":37,"line":38},[35,105560,105021],{"class":359},[35,105562,574],{"class":58},[35,105564,4777],{"class":359},[35,105566,544],{"class":495},[35,105568,105030],{"class":58},[35,105570,105571],{"class":37,"line":45},[35,105572,104865],{"class":359},[21,105574,105575,105576,105579,105580,105583],{},"这个例子里 ",[32,105577,105578],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[32,105581,105582],{},"2.0"," 表示把小球放到更高的位置。",[465,105585,102030],{"id":102030},[25,105587,105588],{"className":30704,"code":105472,"language":30706,"meta":30,"style":30},[32,105589,105590],{"__ignoreMap":30},[35,105591,105592,105594,105596,105598,105600,105602,105604],{"class":37,"line":38},[35,105593,32273],{"class":495},[35,105595,105198],{"class":48},[35,105597,105201],{"class":359},[35,105599,1664],{"class":58},[35,105601,105206],{"class":359},[35,105603,96011],{"class":58},[35,105605,4073],{"class":359},[21,105607,105608],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[14,105610,105611,105620,105625],{},[17,105612,105613,105616,105617,105619],{},[32,105614,105615],{},"prefix","：一段文字，比如 ",[32,105618,105324],{},"，用来说明现在打印的是哪个阶段。",[17,105621,105622,105624],{},[32,105623,102407],{},"：MuJoCo 模型。",[17,105626,105627,105629],{},[32,105628,33727],{},"：MuJoCo 当前状态。",[21,105631,105632,708,105635,105638],{},[32,105633,105634],{},"prefix: str",[32,105636,105637],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[25,105640,105642],{"className":30704,"code":105641,"language":30706,"meta":30,"style":30},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[32,105643,105644],{"__ignoreMap":30},[35,105645,105646,105648,105650,105652,105654,105656],{"class":37,"line":38},[35,105647,30741],{"class":58},[35,105649,499],{"class":359},[35,105651,105249],{"class":306},[35,105653,105252],{"class":359},[35,105655,789],{"class":58},[35,105657,30823],{"class":359},[21,105659,105660,105663],{},[32,105661,105662],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[25,105665,105667],{"className":30704,"code":105666,"language":30706,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[32,105668,105669,105681],{"__ignoreMap":30},[35,105670,105671,105673,105675,105677,105679],{"class":37,"line":38},[35,105672,101956],{"class":359},[35,105674,544],{"class":495},[35,105676,101734],{"class":359},[35,105678,101636],{"class":58},[35,105680,505],{"class":359},[35,105682,105683,105685,105687],{"class":37,"line":45},[35,105684,101980],{"class":359},[35,105686,544],{"class":495},[35,105688,101748],{"class":359},[21,105690,105691],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[25,105693,105695],{"className":30704,"code":105694,"language":30706,"meta":30,"style":30},"print_state(\"initial\", model, data)\n",[32,105696,105697],{"__ignoreMap":30},[35,105698,105699,105702,105704],{"class":37,"line":38},[35,105700,105701],{"class":359},"print_state(",[35,105703,105324],{"class":306},[35,105705,105327],{"class":359},[21,105707,105708,105709,105712],{},"调用刚才定义的 ",[32,105710,105711],{},"print_state"," 函数，打印初始状态。",[25,105714,105715],{"className":30704,"code":105502,"language":30706,"meta":30,"style":30},[32,105716,105717,105733],{"__ignoreMap":30},[35,105718,105719,105721,105723,105725,105727,105729,105731],{"class":37,"line":38},[35,105720,3359],{"class":495},[35,105722,101823],{"class":359},[35,105724,26374],{"class":495},[35,105726,32769],{"class":58},[35,105728,499],{"class":359},[35,105730,1150],{"class":58},[35,105732,31112],{"class":359},[35,105734,105735],{"class":37,"line":45},[35,105736,102021],{"class":359},[21,105738,105739],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[25,105741,105742],{"className":30704,"code":104848,"language":30706,"meta":30,"style":30},[32,105743,105744],{"__ignoreMap":30},[35,105745,105746],{"class":37,"line":38},[35,105747,104848],{"class":359},[21,105749,105750,105751,105753,105754,105756],{},"重置 ",[32,105752,33727],{},"。注意它不会重新创建 ",[32,105755,102407],{},"，因为模型结构没有变，只是状态回到初始值。",[25,105758,105759],{"className":30704,"code":105014,"language":30706,"meta":30,"style":30},[32,105760,105761],{"__ignoreMap":30},[35,105762,105763,105765,105767,105769,105771],{"class":37,"line":38},[35,105764,105021],{"class":359},[35,105766,574],{"class":58},[35,105768,4777],{"class":359},[35,105770,544],{"class":495},[35,105772,105030],{"class":58},[21,105774,105775,105776,708,105779,708,105782,105784],{},"这行是“手动改状态”。在 freejoint 中，",[32,105777,105778],{},"qpos[0]",[32,105780,105781],{},"qpos[1]",[32,105783,105578],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[25,105786,105787],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},[32,105788,105789],{"__ignoreMap":30},[35,105790,105791],{"class":37,"line":38},[35,105792,104865],{"class":359},[21,105794,105795,105796,105798,105799,105801],{},"手动改完 ",[32,105797,104352],{}," 后，调用 ",[32,105800,104572],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[438,105803,102638],{"id":102637},[21,105805,105806],{},"你会看到:",[14,105808,105809,105814,105819,105822],{},[17,105810,105811,105812],{},"初始时间为 ",[32,105813,687],{},[17,105815,105816,105817],{},"50 步后时间约为 ",[32,105818,35655],{},[17,105820,105821],{},"reset 后状态恢复",[17,105823,105824,105825,105828,105829],{},"手动修改 ",[32,105826,105827],{},"data.qpos[2]"," 后，小球高度变为 ",[32,105830,105582],{},[21,105832,105833,105835],{},[32,105834,105578],{}," 在这个例子中表示自由刚体的 z 坐标。",[21,105837,105838],{},"输出里可以重点看三件事：",[14,105840,105841,105849,105854],{},[17,105842,105843,105845,105846,105848],{},[32,105844,2728],{}," 是否随着 ",[32,105847,101540],{}," 增加。",[17,105850,105851,105853],{},[32,105852,104352],{}," 的 z 坐标是否因为下落而变化。",[17,105855,105856,105858,105859,28711],{},[32,105857,104674],{}," 后时间是否回到 ",[32,105860,687],{},[438,105862,102670],{"id":102669},[14,105864,105865,105871,105877,105883,105886,105895],{},[17,105866,105867,105868,28711],{},"修改 timestep 为 ",[32,105869,105870],{},"0.005",[17,105872,105873,105874,28711],{},"重新运行，检查 50 步后时间是否约为 ",[32,105875,105876],{},"0.25",[17,105878,105879,105880,28711],{},"修改重力为 ",[32,105881,105882],{},"0 0 -1.0",[17,105884,105885],{},"观察小球下降速度是否变慢。",[17,105887,102733,105888,102736,105891,105894],{},[32,105889,105890],{},"data.qpos[2] = 2.0",[32,105892,105893],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[17,105896,105897,105898,105901],{},"注释掉 ",[32,105899,105900],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[438,105903,102775],{"id":102774},[465,105905,105907,105908,105910],{"id":105906},"修改-dataqpos-后位置没有更新","修改 ",[32,105909,101395],{}," 后位置没有更新",[21,105912,102784],{},[25,105914,105915],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},[32,105916,105917],{"__ignoreMap":30},[35,105918,105919],{"class":37,"line":38},[35,105920,104865],{"class":359},[465,105922,105923],{"id":105923},"数组维度看不懂",[21,105925,105926],{},"打印模型维度:",[25,105928,105930],{"className":30704,"code":105929,"language":30706,"meta":30,"style":30},"print(model.nq, model.nv, model.nu)\n",[32,105931,105932],{"__ignoreMap":30},[35,105933,105934,105936],{"class":37,"line":38},[35,105935,30741],{"class":58},[35,105937,105938],{"class":359},"(model.nq, model.nv, model.nu)\n",[633,105940,105941,105949],{},[636,105942,105943],{},[639,105944,105945,105947],{},[642,105946,104896],{"align":24070},[642,105948,101025],{"align":24070},[680,105950,105951,105961,105971],{},[639,105952,105953,105958],{},[685,105954,105955],{"align":24070},[32,105956,105957],{},"nq",[685,105959,105960],{"align":24070},"位置变量数量",[639,105962,105963,105968],{},[685,105964,105965],{"align":24070},[32,105966,105967],{},"nv",[685,105969,105970],{"align":24070},"速度变量数量",[639,105972,105973,105977],{},[685,105974,105975],{"align":24070},[32,105976,102484],{},[685,105978,105979],{"align":24070},"控制输入数量",[465,105981,105983,105984,105986],{"id":105982},"误以为-qpos-一定等于关节数","误以为 ",[32,105985,104352],{}," 一定等于关节数",[21,105988,105989,105990,82855,105992,105994,105995,105997],{},"不是。例如 ",[32,105991,101942],{},[32,105993,104352],{}," 是 7 维，但 ",[32,105996,104682],{}," 是 6 维。",[465,105999,106001,106002,106004],{"id":106000},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[32,106003,104352],{}," 的第几位",[21,106006,106007],{},"初学时可以先打印：",[25,106009,106011],{"className":30704,"code":106010,"language":30706,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[32,106012,106013,106023,106033,106045],{"__ignoreMap":30},[35,106014,106015,106017,106019,106021],{"class":37,"line":38},[35,106016,30741],{"class":58},[35,106018,499],{"class":359},[35,106020,101761],{"class":306},[35,106022,101764],{"class":359},[35,106024,106025,106027,106029,106031],{"class":37,"line":45},[35,106026,30741],{"class":58},[35,106028,499],{"class":359},[35,106030,101773],{"class":306},[35,106032,101776],{"class":359},[35,106034,106035,106037,106039,106042],{"class":37,"line":55},[35,106036,30741],{"class":58},[35,106038,499],{"class":359},[35,106040,106041],{"class":306},"\"qpos:\"",[35,106043,106044],{"class":359},", data.qpos)\n",[35,106046,106047,106049,106051,106054],{"class":37,"line":65},[35,106048,30741],{"class":58},[35,106050,499],{"class":359},[35,106052,106053],{"class":306},"\"qvel:\"",[35,106055,106056],{"class":359},", data.qvel)\n",[21,106058,106059],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[465,106061,106062],{"id":106062},"仿真结果每次都一样",[21,106064,106065,106066,106068],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[32,106067,104352],{},"、目标点或控制输入。",[438,106070,102929],{"id":102928},[21,106072,106073,106074,24950],{},"Python 控制 MuJoCo 的核心就是读写 ",[32,106075,33727],{},[14,106077,106078,106086,106091,106096],{},[17,106079,106080,106081,101343,106083,106085],{},"用 ",[32,106082,101395],{},[32,106084,101398],{}," 读取状态。",[17,106087,106080,106088,106090],{},[32,106089,101401],{}," 写入控制。",[17,106092,106080,106093,106095],{},[32,106094,101540],{}," 推进时间。",[17,106097,106098,106099,106101],{},"手动改状态后用 ",[32,106100,104572],{}," 刷新派生量。",[21,106103,106104],{},"理解这一章后，就可以进入关节和 actuator 控制。",[416,106106,106107],{},"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":30,"searchDepth":45,"depth":45,"links":106109},[106110,106111,106112,106119,106123,106124,106125,106135],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":106113},[106114,106116,106118],{"id":104877,"depth":55,"text":106115},"qpos、qvel、ctrl 是什么",{"id":104955,"depth":55,"text":106117},"mj_step 和 mj_forward 的区别",{"id":105044,"depth":55,"text":105045},{"id":101577,"depth":45,"text":101578,"children":106120},[106121,106122],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":106126},[106127,106129,106130,106132,106134],{"id":105906,"depth":55,"text":106128},"修改 data.qpos 后位置没有更新",{"id":105923,"depth":55,"text":105923},{"id":105982,"depth":55,"text":106131},"误以为 qpos 一定等于关节数",{"id":106000,"depth":55,"text":106133},"不知道某个元素在 qpos 的第几位",{"id":106062,"depth":55,"text":106062},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104640,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106142,"title":106143,"body":106144,"description":30,"extension":422,"meta":107834,"navigation":140,"path":107835,"seo":107836,"stem":107837,"__hash__":107838},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106145,"toc":107810},[106146,106149,106151,106154,106156,106181,106184,106203,106206,106208,106210,106234,106236,106250,106252,106293,106295,106319,106321,106324,106358,106360,106373,106376,106444,106453,106457,106460,106494,106500,106503,106507,106546,106549,106569,106573,106616,106618,106647,106650,106656,106659,106661,107055,107057,107069,107071,107082,107084,107087,107116,107124,107127,107162,107165,107167,107175,107178,107180,107191,107201,107221,107224,107260,107272,107320,107339,107381,107394,107422,107427,107448,107458,107476,107479,107513,107516,107536,107539,107558,107564,107566,107569,107575,107581,107591,107594,107600,107609,107611,107657,107659,107665,107671,107674,107677,107697,107700,107706,107712,107714,107737,107740,107743,107752,107755,107793,107795,107798,107804,107807],[10,106147,106143],{"id":106148},"_4关节actuator-与力控制",[438,106150,100972],{"id":100971},[21,106152,106153],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[21,106155,104653],{},[14,106157,106158,106164,106169,106173,106178],{},[17,106159,106160,106163],{},[32,106161,106162],{},"hinge"," 关节",[17,106165,106166],{},[32,106167,106168],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[17,106170,106171],{},[32,106172,101401],{},[17,106174,106175],{},[32,106176,106177],{},"ctrlrange",[17,106179,106180],{},"读取关节角和角速度",[21,106182,106183],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[25,106185,106187],{"className":30704,"code":106186,"language":30706,"meta":30,"style":30},"data.ctrl[0] = ...\n",[32,106188,106189],{"__ignoreMap":30},[35,106190,106191,106194,106196,106198,106200],{"class":37,"line":38},[35,106192,106193],{"class":359},"data.ctrl[",[35,106195,687],{"class":58},[35,106197,4777],{"class":359},[35,106199,544],{"class":495},[35,106201,106202],{"class":58}," ...\n",[21,106204,106205],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[438,106207,101095],{"id":101094},[21,106209,101098],{},[25,106211,106212],{"className":24156,"code":104710,"language":24158,"meta":30,"style":30},[32,106213,106214],{"__ignoreMap":30},[35,106215,106216,106218,106220,106222,106224,106226,106228,106230,106232],{"class":37,"line":38},[35,106217,171],{"class":48},[35,106219,26645],{"class":306},[35,106221,318],{"class":306},[35,106223,26730],{"class":58},[35,106225,104725],{"class":306},[35,106227,101123],{"class":306},[35,106229,102823],{"class":306},[35,106231,101139],{"class":306},[35,106233,104734],{"class":306},[21,106235,103141],{},[25,106237,106238],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},[32,106239,106240],{"__ignoreMap":30},[35,106241,106242,106244,106246,106248],{"class":37,"line":38},[35,106243,24165],{"class":48},[35,106245,318],{"class":306},[35,106247,101255],{"class":306},[35,106249,101258],{"class":306},[21,106251,103158],{},[25,106253,106255],{"className":24156,"code":106254,"language":24158,"meta":30,"style":30},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[32,106256,106257,106274,106283],{"__ignoreMap":30},[35,106258,106259,106261,106263,106265,106268,106270,106272],{"class":37,"line":38},[35,106260,30656],{"class":48},[35,106262,29502],{"class":306},[35,106264,25447],{"class":58},[35,106266,106267],{"class":306}," mujoco-control",[35,106269,101300],{"class":306},[35,106271,101303],{"class":58},[35,106273,101306],{"class":58},[35,106275,106276,106278,106280],{"class":37,"line":45},[35,106277,30656],{"class":48},[35,106279,101313],{"class":306},[35,106281,106282],{"class":306}," mujoco-control\n",[35,106284,106285,106287,106289,106291],{"class":37,"line":55},[35,106286,24165],{"class":48},[35,106288,318],{"class":306},[35,106290,101255],{"class":306},[35,106292,101258],{"class":306},[21,106294,101329],{},[14,106296,106297,106303,106310,106316],{},[17,106298,106299,106302],{},[32,106300,106301],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[17,106304,106305,106307,106308,28711],{},[32,106306,101401],{}," 长度等于 ",[32,106309,102480],{},[17,106311,82547,106312,106315],{},[32,106313,106314],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[17,106317,106318],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[438,106320,101370],{"id":101369},[21,106322,106323],{},"关节决定 body 如何运动:",[25,106325,106327],{"className":53393,"code":106326,"language":53395,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,106328,106329],{"__ignoreMap":30},[35,106330,106331,106333,106335,106337,106339,106342,106344,106346,106348,106351,106353,106356],{"class":37,"line":38},[35,106332,1404],{"class":359},[35,106334,103278],{"class":51626},[35,106336,15254],{"class":48},[35,106338,544],{"class":359},[35,106340,106341],{"class":306},"\"hinge\"",[35,106343,54150],{"class":48},[35,106345,544],{"class":359},[35,106347,106341],{"class":306},[35,106349,106350],{"class":48}," axis",[35,106352,544],{"class":359},[35,106354,106355],{"class":306},"\"0 1 0\"",[35,106357,101469],{"class":359},[21,106359,103374],{},[14,106361,106362,106367,106370],{},[17,106363,106364,106365],{},"名字是 ",[32,106366,106162],{},[17,106368,106369],{},"类型是旋转关节",[17,106371,106372],{},"绕 y 轴旋转",[21,106374,106375],{},"actuator 决定如何施加控制:",[25,106377,106379],{"className":53393,"code":106378,"language":53395,"meta":30,"style":30},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[32,106380,106381,106390,106436],{"__ignoreMap":30},[35,106382,106383,106385,106388],{"class":37,"line":38},[35,106384,1404],{"class":359},[35,106386,106387],{"class":51626},"actuator",[35,106389,51633],{"class":359},[35,106391,106392,106394,106397,106399,106401,106404,106407,106409,106411,106414,106416,106418,106421,106423,106426,106429,106431,106434],{"class":37,"line":45},[35,106393,52470],{"class":359},[35,106395,106396],{"class":51626},"motor",[35,106398,15254],{"class":48},[35,106400,544],{"class":359},[35,106402,106403],{"class":306},"\"hinge_motor\"",[35,106405,106406],{"class":48}," joint",[35,106408,544],{"class":359},[35,106410,106341],{"class":306},[35,106412,106413],{"class":48}," gear",[35,106415,544],{"class":359},[35,106417,4012],{"class":306},[35,106419,106420],{"class":48}," ctrlrange",[35,106422,544],{"class":359},[35,106424,106425],{"class":306},"\"-2 2\"",[35,106427,106428],{"class":48}," ctrllimited",[35,106430,544],{"class":359},[35,106432,106433],{"class":306},"\"true\"",[35,106435,101469],{"class":359},[35,106437,106438,106440,106442],{"class":37,"line":55},[35,106439,52111],{"class":359},[35,106441,106387],{"class":51626},[35,106443,51633],{"class":359},[21,106445,106446,106449,106450,28711],{},[32,106447,106448],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[32,106451,106452],{},"[-2, 2]",[465,106454,106456],{"id":106455},"joint-和-actuator-的关系","joint 和 actuator 的关系",[21,106458,106459],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[633,106461,106462,106472],{},[636,106463,106464],{},[639,106465,106466,106468,106470],{},[642,106467,26084],{"align":24070},[642,106469,103018],{"align":24070},[642,106471,101059],{"align":24070},[680,106473,106474,106484],{},[639,106475,106476,106478,106481],{},[685,106477,103278],{"align":24070},[685,106479,106480],{"align":24070},"定义能怎么动",[685,106482,106483],{"align":24070},"门轴允许门旋转",[639,106485,106486,106488,106491],{},[685,106487,106387],{"align":24070},[685,106489,106490],{"align":24070},"定义怎么施力或控制",[685,106492,106493],{"align":24070},"人推门、马达带动门",[21,106495,106496,106497,106499],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[32,106498,101401],{}," 主动控制它。",[21,106501,106502],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[465,106504,106506],{"id":106505},"hinge-joint","hinge joint",[25,106508,106510],{"className":53393,"code":106509,"language":53395,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[32,106511,106512],{"__ignoreMap":30},[35,106513,106514,106516,106518,106520,106522,106524,106526,106528,106530,106532,106534,106536,106539,106541,106544],{"class":37,"line":38},[35,106515,1404],{"class":359},[35,106517,103278],{"class":51626},[35,106519,15254],{"class":48},[35,106521,544],{"class":359},[35,106523,106341],{"class":306},[35,106525,54150],{"class":48},[35,106527,544],{"class":359},[35,106529,106341],{"class":306},[35,106531,106350],{"class":48},[35,106533,544],{"class":359},[35,106535,106355],{"class":306},[35,106537,106538],{"class":48}," damping",[35,106540,544],{"class":359},[35,106542,106543],{"class":306},"\"0.1\"",[35,106545,101469],{"class":359},[21,106547,106548],{},"含义：",[14,106550,106551,106557,106563],{},[17,106552,106553,106556],{},[32,106554,106555],{},"type=\"hinge\"","：只能绕一个轴旋转。",[17,106558,106559,106562],{},[32,106560,106561],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[17,106564,106565,106568],{},[32,106566,106567],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[465,106570,106572],{"id":106571},"motor-actuator","motor actuator",[25,106574,106576],{"className":53393,"code":106575,"language":53395,"meta":30,"style":30},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[32,106577,106578],{"__ignoreMap":30},[35,106579,106580,106582,106584,106586,106588,106590,106592,106594,106596,106598,106600,106602,106604,106606,106608,106610,106612,106614],{"class":37,"line":38},[35,106581,1404],{"class":359},[35,106583,106396],{"class":51626},[35,106585,15254],{"class":48},[35,106587,544],{"class":359},[35,106589,106403],{"class":306},[35,106591,106406],{"class":48},[35,106593,544],{"class":359},[35,106595,106341],{"class":306},[35,106597,106413],{"class":48},[35,106599,544],{"class":359},[35,106601,4012],{"class":306},[35,106603,106420],{"class":48},[35,106605,544],{"class":359},[35,106607,106425],{"class":306},[35,106609,106428],{"class":48},[35,106611,544],{"class":359},[35,106613,106433],{"class":306},[35,106615,101469],{"class":359},[21,106617,106548],{},[14,106619,106620,106629,106635,106641],{},[17,106621,106622,106625,106626,106628],{},[32,106623,106624],{},"joint=\"hinge\"","：这个电机作用在名为 ",[32,106627,106162],{}," 的关节上。",[17,106630,106631,106634],{},[32,106632,106633],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[17,106636,106637,106640],{},[32,106638,106639],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[17,106642,106643,106646],{},[32,106644,106645],{},"ctrllimited=\"true\"","：启用控制范围限制。",[21,106648,106649],{},"简单理解：",[25,106651,106654],{"className":106652,"code":106653,"language":5521,"meta":30},[5519],"实际施加效果 ≈ data.ctrl[0] * gear\n",[32,106655,106653],{"__ignoreMap":30},[21,106657,106658],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[438,106660,101578],{"id":101577},[25,106662,106664],{"className":30704,"code":106663,"language":30706,"meta":30,"style":30},"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",[32,106665,106666,106673,106677,106683,106693,106697,106701,106709,106714,106719,106723,106727,106732,106737,106741,106746,106751,106756,106761,106765,106769,106773,106778,106783,106788,106792,106796,106800,106804,106816,106828,106836,106840,106850,106860,106870,106874,106887,106900,106904,106921,106935,106970,106974,106978,106989,107004,107019,107031,107035,107039,107051],{"__ignoreMap":30},[35,106667,106668,106670],{"class":37,"line":38},[35,106669,30718],{"class":495},[35,106671,106672],{"class":359}," math\n",[35,106674,106675],{"class":37,"line":45},[35,106676,141],{"emptyLinePlaceholder":140},[35,106678,106679,106681],{"class":37,"line":55},[35,106680,30718],{"class":495},[35,106682,101623],{"class":359},[35,106684,106685,106687,106689,106691],{"class":37,"line":65},[35,106686,30718],{"class":495},[35,106688,31706],{"class":359},[35,106690,31709],{"class":495},[35,106692,31712],{"class":359},[35,106694,106695],{"class":37,"line":74},[35,106696,141],{"emptyLinePlaceholder":140},[35,106698,106699],{"class":37,"line":83},[35,106700,141],{"emptyLinePlaceholder":140},[35,106702,106703,106705,106707],{"class":37,"line":92},[35,106704,101636],{"class":58},[35,106706,13898],{"class":495},[35,106708,101641],{"class":306},[35,106710,106711],{"class":37,"line":101},[35,106712,106713],{"class":306},"\u003Cmujoco model=\"one_link_motor\">\n",[35,106715,106716],{"class":37,"line":110},[35,106717,106718],{"class":306},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[35,106720,106721],{"class":37,"line":119},[35,106722,141],{"emptyLinePlaceholder":140},[35,106724,106725],{"class":37,"line":128},[35,106726,101660],{"class":306},[35,106728,106729],{"class":37,"line":137},[35,106730,106731],{"class":306},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[35,106733,106734],{"class":37,"line":144},[35,106735,106736],{"class":306},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[35,106738,106739],{"class":37,"line":150},[35,106740,141],{"emptyLinePlaceholder":140},[35,106742,106743],{"class":37,"line":159},[35,106744,106745],{"class":306},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[35,106747,106748],{"class":37,"line":168},[35,106749,106750],{"class":306},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[35,106752,106753],{"class":37,"line":177},[35,106754,106755],{"class":306},"        \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",[35,106757,106758],{"class":37,"line":182},[35,106759,106760],{"class":306},"      \u003C\u002Fbody>\n",[35,106762,106763],{"class":37,"line":188},[35,106764,101689],{"class":306},[35,106766,106767],{"class":37,"line":197},[35,106768,101694],{"class":306},[35,106770,106771],{"class":37,"line":206},[35,106772,141],{"emptyLinePlaceholder":140},[35,106774,106775],{"class":37,"line":215},[35,106776,106777],{"class":306},"  \u003Cactuator>\n",[35,106779,106780],{"class":37,"line":224},[35,106781,106782],{"class":306},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[35,106784,106785],{"class":37,"line":233},[35,106786,106787],{"class":306},"  \u003C\u002Factuator>\n",[35,106789,106790],{"class":37,"line":238},[35,106791,101699],{"class":306},[35,106793,106794],{"class":37,"line":244},[35,106795,96023],{"class":306},[35,106797,106798],{"class":37,"line":253},[35,106799,141],{"emptyLinePlaceholder":140},[35,106801,106802],{"class":37,"line":262},[35,106803,141],{"emptyLinePlaceholder":140},[35,106805,106806,106808,106810,106812,106814],{"class":37,"line":271},[35,106807,32273],{"class":495},[35,106809,2314],{"class":48},[35,106811,101720],{"class":359},[35,106813,96011],{"class":58},[35,106815,4073],{"class":359},[35,106817,106818,106820,106822,106824,106826],{"class":37,"line":280},[35,106819,101729],{"class":359},[35,106821,544],{"class":495},[35,106823,101734],{"class":359},[35,106825,101636],{"class":58},[35,106827,505],{"class":359},[35,106829,106830,106832,106834],{"class":37,"line":289},[35,106831,101743],{"class":359},[35,106833,544],{"class":495},[35,106835,101748],{"class":359},[35,106837,106838],{"class":37,"line":294},[35,106839,141],{"emptyLinePlaceholder":140},[35,106841,106842,106844,106846,106848],{"class":37,"line":300},[35,106843,31625],{"class":58},[35,106845,499],{"class":359},[35,106847,101761],{"class":306},[35,106849,101764],{"class":359},[35,106851,106852,106854,106856,106858],{"class":37,"line":313},[35,106853,31625],{"class":58},[35,106855,499],{"class":359},[35,106857,101773],{"class":306},[35,106859,101776],{"class":359},[35,106861,106862,106864,106866,106868],{"class":37,"line":324},[35,106863,31625],{"class":58},[35,106865,499],{"class":359},[35,106867,101785],{"class":306},[35,106869,101788],{"class":359},[35,106871,106872],{"class":37,"line":2955},[35,106873,141],{"emptyLinePlaceholder":140},[35,106875,106876,106878,106881,106883,106885],{"class":37,"line":8282},[35,106877,3435],{"class":495},[35,106879,106880],{"class":359}," model.nu ",[35,106882,21282],{"class":495},[35,106884,25450],{"class":58},[35,106886,4073],{"class":359},[35,106888,106889,106891,106893,106895,106898],{"class":37,"line":8306},[35,106890,103754],{"class":495},[35,106892,103757],{"class":58},[35,106894,499],{"class":359},[35,106896,106897],{"class":306},"\"expected exactly one actuator\"",[35,106899,505],{"class":359},[35,106901,106902],{"class":37,"line":8311},[35,106903,141],{"emptyLinePlaceholder":140},[35,106905,106906,106908,106910,106912,106914,106916,106919],{"class":37,"line":8317},[35,106907,3535],{"class":495},[35,106909,31942],{"class":359},[35,106911,26374],{"class":495},[35,106913,32769],{"class":58},[35,106915,499],{"class":359},[35,106917,106918],{"class":58},"2000",[35,106920,31112],{"class":359},[35,106922,106923,106926,106928,106930,106932],{"class":37,"line":8344},[35,106924,106925],{"class":359},"        t ",[35,106927,544],{"class":495},[35,106929,31942],{"class":359},[35,106931,949],{"class":495},[35,106933,106934],{"class":359}," model.opt.timestep\n",[35,106936,106937,106940,106942,106944,106946,106949,106951,106954,106956,106958,106961,106963,106965,106967],{"class":37,"line":8349},[35,106938,106939],{"class":359},"        data.ctrl[",[35,106941,687],{"class":58},[35,106943,4777],{"class":359},[35,106945,544],{"class":495},[35,106947,106948],{"class":58}," 1.5",[35,106950,6852],{"class":495},[35,106952,106953],{"class":359}," math.sin(",[35,106955,105582],{"class":58},[35,106957,6852],{"class":495},[35,106959,106960],{"class":359}," math.pi ",[35,106962,949],{"class":495},[35,106964,62193],{"class":58},[35,106966,6852],{"class":495},[35,106968,106969],{"class":359}," t)\n",[35,106971,106972],{"class":37,"line":8355},[35,106973,101838],{"class":359},[35,106975,106976],{"class":37,"line":8367},[35,106977,141],{"emptyLinePlaceholder":140},[35,106979,106980,106982,106984,106987],{"class":37,"line":8379},[35,106981,31625],{"class":58},[35,106983,499],{"class":359},[35,106985,106986],{"class":306},"\"time:\"",[35,106988,101800],{"class":359},[35,106990,106991,106993,106995,106998,107000,107002],{"class":37,"line":8391},[35,106992,31625],{"class":58},[35,106994,499],{"class":359},[35,106996,106997],{"class":306},"\"joint qpos:\"",[35,106999,105252],{"class":359},[35,107001,789],{"class":58},[35,107003,30823],{"class":359},[35,107005,107006,107008,107010,107013,107015,107017],{"class":37,"line":10050},[35,107007,31625],{"class":58},[35,107009,499],{"class":359},[35,107011,107012],{"class":306},"\"joint qvel:\"",[35,107014,105268],{"class":359},[35,107016,789],{"class":58},[35,107018,30823],{"class":359},[35,107020,107021,107023,107025,107028],{"class":37,"line":10075},[35,107022,31625],{"class":58},[35,107024,499],{"class":359},[35,107026,107027],{"class":306},"\"last ctrl:\"",[35,107029,107030],{"class":359},", data.ctrl.copy())\n",[35,107032,107033],{"class":37,"line":10098},[35,107034,141],{"emptyLinePlaceholder":140},[35,107036,107037],{"class":37,"line":10122},[35,107038,141],{"emptyLinePlaceholder":140},[35,107040,107041,107043,107045,107047,107049],{"class":37,"line":10127},[35,107042,1892],{"class":495},[35,107044,31546],{"class":58},[35,107046,101881],{"class":495},[35,107048,101884],{"class":306},[35,107050,4073],{"class":359},[35,107052,107053],{"class":37,"line":10132},[35,107054,101891],{"class":359},[21,107056,103892],{},[25,107058,107060],{"className":24156,"code":107059,"language":24158,"meta":30,"style":30},"touch ch4_joint_motor.py\n",[32,107061,107062],{"__ignoreMap":30},[35,107063,107064,107066],{"class":37,"line":38},[35,107065,113],{"class":48},[35,107067,107068],{"class":306}," ch4_joint_motor.py\n",[21,107070,102623],{},[25,107072,107074],{"className":24156,"code":107073,"language":24158,"meta":30,"style":30},"python ch4_joint_motor.py\n",[32,107075,107076],{"__ignoreMap":30},[35,107077,107078,107080],{"class":37,"line":38},[35,107079,30706],{"class":48},[35,107081,107068],{"class":306},[465,107083,101894],{"id":101894},[21,107085,107086],{},"检查 actuator 数量：",[25,107088,107090],{"className":30704,"code":107089,"language":30706,"meta":30,"style":30},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[32,107091,107092,107104],{"__ignoreMap":30},[35,107093,107094,107096,107098,107100,107102],{"class":37,"line":38},[35,107095,1892],{"class":495},[35,107097,106880],{"class":359},[35,107099,21282],{"class":495},[35,107101,25450],{"class":58},[35,107103,4073],{"class":359},[35,107105,107106,107108,107110,107112,107114],{"class":37,"line":45},[35,107107,104217],{"class":495},[35,107109,103757],{"class":58},[35,107111,499],{"class":359},[35,107113,106897],{"class":306},[35,107115,505],{"class":359},[21,107117,107118,107120,107121,107123],{},[32,107119,102480],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[32,107122,101401],{}," 长度应该是 1。",[21,107125,107126],{},"产生正弦控制信号：",[25,107128,107130],{"className":30704,"code":107129,"language":30706,"meta":30,"style":30},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[32,107131,107132],{"__ignoreMap":30},[35,107133,107134,107136,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160],{"class":37,"line":38},[35,107135,106193],{"class":359},[35,107137,687],{"class":58},[35,107139,4777],{"class":359},[35,107141,544],{"class":495},[35,107143,106948],{"class":58},[35,107145,6852],{"class":495},[35,107147,106953],{"class":359},[35,107149,105582],{"class":58},[35,107151,6852],{"class":495},[35,107153,106960],{"class":359},[35,107155,949],{"class":495},[35,107157,62193],{"class":58},[35,107159,6852],{"class":495},[35,107161,106969],{"class":359},[21,107163,107164],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[21,107166,101995],{},[25,107168,107169],{"className":30704,"code":104827,"language":30706,"meta":30,"style":30},[32,107170,107171],{"__ignoreMap":30},[35,107172,107173],{"class":37,"line":38},[35,107174,104827],{"class":359},[21,107176,107177],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[465,107179,102030],{"id":102030},[25,107181,107183],{"className":30704,"code":107182,"language":30706,"meta":30,"style":30},"import math\n",[32,107184,107185],{"__ignoreMap":30},[35,107186,107187,107189],{"class":37,"line":38},[35,107188,30718],{"class":495},[35,107190,106672],{"class":359},[21,107192,107193,107194,101343,107197,107200],{},"导入 Python 标准库里的数学模块。后面要用 ",[32,107195,107196],{},"math.sin",[32,107198,107199],{},"math.pi"," 生成周期变化的控制信号。",[25,107202,107203],{"className":30704,"code":104008,"language":30706,"meta":30,"style":30},[32,107204,107205,107211],{"__ignoreMap":30},[35,107206,107207,107209],{"class":37,"line":38},[35,107208,30718],{"class":495},[35,107210,101623],{"class":359},[35,107212,107213,107215,107217,107219],{"class":37,"line":45},[35,107214,30718],{"class":495},[35,107216,31706],{"class":359},[35,107218,31709],{"class":495},[35,107220,31712],{"class":359},[21,107222,107223],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[25,107225,107226],{"className":53393,"code":106509,"language":53395,"meta":30,"style":30},[32,107227,107228],{"__ignoreMap":30},[35,107229,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254,107256,107258],{"class":37,"line":38},[35,107231,1404],{"class":359},[35,107233,103278],{"class":51626},[35,107235,15254],{"class":48},[35,107237,544],{"class":359},[35,107239,106341],{"class":306},[35,107241,54150],{"class":48},[35,107243,544],{"class":359},[35,107245,106341],{"class":306},[35,107247,106350],{"class":48},[35,107249,544],{"class":359},[35,107251,106355],{"class":306},[35,107253,106538],{"class":48},[35,107255,544],{"class":359},[35,107257,106543],{"class":306},[35,107259,101469],{"class":359},[21,107261,107262,107263,107265,107266,107268,107269,107271],{},"这行定义关节。",[32,107264,106162],{}," 表示旋转关节。",[32,107267,106561],{}," 表示绕 y 轴旋转。",[32,107270,106567],{}," 表示有一点阻尼，运动不会完全无损耗。",[25,107273,107275],{"className":53393,"code":107274,"language":53395,"meta":30,"style":30},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[32,107276,107277],{"__ignoreMap":30},[35,107278,107279,107281,107283,107285,107287,107290,107292,107294,107297,107300,107302,107305,107307,107309,107311,107313,107315,107318],{"class":37,"line":38},[35,107280,1404],{"class":359},[35,107282,101445],{"class":51626},[35,107284,15254],{"class":48},[35,107286,544],{"class":359},[35,107288,107289],{"class":306},"\"link_geom\"",[35,107291,54150],{"class":48},[35,107293,544],{"class":359},[35,107295,107296],{"class":306},"\"capsule\"",[35,107298,107299],{"class":48}," fromto",[35,107301,544],{"class":359},[35,107303,107304],{"class":306},"\"0 0 0 0 0 0.5\"",[35,107306,101461],{"class":48},[35,107308,544],{"class":359},[35,107310,104100],{"class":306},[35,107312,102323],{"class":48},[35,107314,544],{"class":359},[35,107316,107317],{"class":306},"\"0.5\"",[35,107319,101469],{"class":359},[21,107321,107322,107323,107325,107326,107328,107329,107332,107333,28711,107336,107338],{},"这行定义摆杆的形状。",[32,107324,103487],{}," 是胶囊体，适合表示杆子。",[32,107327,103498],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[32,107330,107331],{},"(0,0,0)"," 延伸到 ",[32,107334,107335],{},"(0,0,0.5)",[32,107337,103492],{}," 是半径。",[25,107340,107341],{"className":53393,"code":106575,"language":53395,"meta":30,"style":30},[32,107342,107343],{"__ignoreMap":30},[35,107344,107345,107347,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369,107371,107373,107375,107377,107379],{"class":37,"line":38},[35,107346,1404],{"class":359},[35,107348,106396],{"class":51626},[35,107350,15254],{"class":48},[35,107352,544],{"class":359},[35,107354,106403],{"class":306},[35,107356,106406],{"class":48},[35,107358,544],{"class":359},[35,107360,106341],{"class":306},[35,107362,106413],{"class":48},[35,107364,544],{"class":359},[35,107366,4012],{"class":306},[35,107368,106420],{"class":48},[35,107370,544],{"class":359},[35,107372,106425],{"class":306},[35,107374,106428],{"class":48},[35,107376,544],{"class":359},[35,107378,106433],{"class":306},[35,107380,101469],{"class":359},[21,107382,107383,107384,107386,107387,107390,107391,107393],{},"这行定义电机。它作用在 ",[32,107385,106162],{}," 关节上。",[32,107388,107389],{},"gear"," 可以理解成放大倍数。",[32,107392,106177],{}," 限制控制输入范围。",[25,107395,107396],{"className":30704,"code":107089,"language":30706,"meta":30,"style":30},[32,107397,107398,107410],{"__ignoreMap":30},[35,107399,107400,107402,107404,107406,107408],{"class":37,"line":38},[35,107401,1892],{"class":495},[35,107403,106880],{"class":359},[35,107405,21282],{"class":495},[35,107407,25450],{"class":58},[35,107409,4073],{"class":359},[35,107411,107412,107414,107416,107418,107420],{"class":37,"line":45},[35,107413,104217],{"class":495},[35,107415,103757],{"class":58},[35,107417,499],{"class":359},[35,107419,106897],{"class":306},[35,107421,505],{"class":359},[21,107423,107424,107426],{},[32,107425,102480],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[25,107428,107430],{"className":30704,"code":107429,"language":30706,"meta":30,"style":30},"for step in range(2000):\n",[32,107431,107432],{"__ignoreMap":30},[35,107433,107434,107436,107438,107440,107442,107444,107446],{"class":37,"line":38},[35,107435,3359],{"class":495},[35,107437,31942],{"class":359},[35,107439,26374],{"class":495},[35,107441,32769],{"class":58},[35,107443,499],{"class":359},[35,107445,106918],{"class":58},[35,107447,31112],{"class":359},[21,107449,107450,107451,107453,107454,107457],{},"循环 2000 步。这里没有用 ",[32,107452,1486],{},"，而是用 ",[32,107455,107456],{},"step","，因为后面要用当前步数计算时间。",[25,107459,107461],{"className":30704,"code":107460,"language":30706,"meta":30,"style":30},"t = step * model.opt.timestep\n",[32,107462,107463],{"__ignoreMap":30},[35,107464,107465,107468,107470,107472,107474],{"class":37,"line":38},[35,107466,107467],{"class":359},"t ",[35,107469,544],{"class":495},[35,107471,31942],{"class":359},[35,107473,949],{"class":495},[35,107475,106934],{"class":359},[21,107477,107478],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[25,107480,107481],{"className":30704,"code":107129,"language":30706,"meta":30,"style":30},[32,107482,107483],{"__ignoreMap":30},[35,107484,107485,107487,107489,107491,107493,107495,107497,107499,107501,107503,107505,107507,107509,107511],{"class":37,"line":38},[35,107486,106193],{"class":359},[35,107488,687],{"class":58},[35,107490,4777],{"class":359},[35,107492,544],{"class":495},[35,107494,106948],{"class":58},[35,107496,6852],{"class":495},[35,107498,106953],{"class":359},[35,107500,105582],{"class":58},[35,107502,6852],{"class":495},[35,107504,106960],{"class":359},[35,107506,949],{"class":495},[35,107508,62193],{"class":58},[35,107510,6852],{"class":495},[35,107512,106969],{"class":359},[21,107514,107515],{},"这行给电机输入一个正弦波。拆开看：",[14,107517,107518,107524,107530],{},[17,107519,107520,107523],{},[32,107521,107522],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[17,107525,107526,107529],{},[32,107527,107528],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[17,107531,107532,107535],{},[32,107533,107534],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[21,107537,107538],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[25,107540,107542],{"className":30704,"code":107541,"language":30706,"meta":30,"style":30},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[32,107543,107544],{"__ignoreMap":30},[35,107545,107546,107548,107550,107552,107554,107556],{"class":37,"line":38},[35,107547,30741],{"class":58},[35,107549,499],{"class":359},[35,107551,106997],{"class":306},[35,107553,105252],{"class":359},[35,107555,789],{"class":58},[35,107557,30823],{"class":359},[21,107559,107560,107561,107563],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[32,107562,101395],{}," 只有一个数。",[438,107565,102638],{"id":102637},[21,107567,107568],{},"输出类似:",[25,107570,107573],{"className":107571,"code":107572,"language":5521,"meta":30},[5519],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[32,107574,107572],{"__ignoreMap":30},[21,107576,107577,107578,107580],{},"这里 ",[32,107579,106448],{}," 是电机输入。",[21,107582,107583,107586,107587,107590],{},[32,107584,107585],{},"joint qpos"," 是关节角度，单位通常是弧度。",[32,107588,107589],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[21,107592,107593],{},"角度单位提示：",[25,107595,107598],{"className":107596,"code":107597,"language":5521,"meta":30},[5519],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[32,107599,107597],{"__ignoreMap":30},[21,107601,107602,107603,107605,107606,107608],{},"如果你看到 ",[32,107604,104352],{}," 是 ",[32,107607,35655],{},"，大约就是 28.6 度。",[438,107610,102670],{"id":102669},[14,107612,107613,107620,107623,107630,107633,107641,107649],{},[17,107614,102733,107615,102736,107617,28711],{},[32,107616,106633],{},[32,107618,107619],{},"gear=\"5\"",[17,107621,107622],{},"重新运行，观察关节运动是否更剧烈。",[17,107624,102733,107625,102736,107627,28711],{},[32,107626,106177],{},[32,107628,107629],{},"-0.2 0.2",[17,107631,107632],{},"重新运行，观察控制能力是否变弱。",[17,107634,107635,107636,107638,107639,28711],{},"去掉 actuator，确认 ",[32,107637,102480],{}," 变成 ",[32,107640,687],{},[17,107642,102733,107643,102736,107645,107648],{},[32,107644,106567],{},[32,107646,107647],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[17,107650,102733,107651,102736,107653,107656],{},[32,107652,106561],{},[32,107654,107655],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[438,107658,102775],{"id":102774},[465,107660,107662],{"id":107661},"indexerror-index-0-is-out-of-bounds",[32,107663,107664],{},"IndexError: index 0 is out of bounds",[21,107666,107667,107668,107670],{},"原因是 ",[32,107669,106314],{},"，没有 actuator。",[465,107672,107673],{"id":107673},"关节几乎不动",[21,107675,107676],{},"可能原因:",[14,107678,107679,107684,107688,107694],{},[17,107680,107681,107683],{},[32,107682,107389],{}," 太小",[17,107685,107686,107683],{},[32,107687,106177],{},[17,107689,107690,107693],{},[32,107691,107692],{},"damping"," 太大",[17,107695,107696],{},"重力方向导致运动不明显",[465,107698,107699],{"id":107699},"模型编译失败",[21,107701,107702,107703,107705],{},"检查 actuator 引用的 ",[32,107704,106624],{}," 是否存在，joint 名称是否拼写一致。",[465,107707,107709,107711],{"id":107708},"datactrl0-写了但没有效果",[32,107710,106448],{}," 写了但没有效果",[21,107713,102897],{},[14,107715,107716,107721,107724,107729,107734],{},[17,107717,107718,107720],{},[32,107719,102480],{}," 是否大于 0。",[17,107722,107723],{},"motor 是否引用了正确 joint。",[17,107725,107726,107728],{},[32,107727,107389],{}," 是否太小。",[17,107730,107731,107733],{},[32,107732,106177],{}," 是否把输入限制得太小。",[17,107735,107736],{},"body 是否真的有可动 joint。",[465,107738,107739],{"id":107739},"控制输入超过范围会怎样",[21,107741,107742],{},"如果设置了：",[25,107744,107746],{"className":53393,"code":107745,"language":53395,"meta":30,"style":30},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[32,107747,107748],{"__ignoreMap":30},[35,107749,107750],{"class":37,"line":38},[35,107751,107745],{"class":359},[21,107753,107754],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[25,107756,107758],{"className":30704,"code":107757,"language":30706,"meta":30,"style":30},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[32,107759,107760,107780],{"__ignoreMap":30},[35,107761,107762,107765,107767,107770,107772,107774,107776,107778],{"class":37,"line":38},[35,107763,107764],{"class":359},"action ",[35,107766,544],{"class":495},[35,107768,107769],{"class":359}," np.clip(action, ",[35,107771,1026],{"class":495},[35,107773,105582],{"class":58},[35,107775,12769],{"class":359},[35,107777,105582],{"class":58},[35,107779,505],{"class":359},[35,107781,107782,107784,107786,107788,107790],{"class":37,"line":45},[35,107783,106193],{"class":359},[35,107785,687],{"class":58},[35,107787,4777],{"class":359},[35,107789,544],{"class":495},[35,107791,107792],{"class":359}," action\n",[438,107794,102929],{"id":102928},[21,107796,107797],{},"这一章建立了控制任务的基本形式：",[25,107799,107802],{"className":107800,"code":107801,"language":5521,"meta":30},[5519],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[32,107803,107801],{"__ignoreMap":30},[21,107805,107806],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[416,107808,107809],{},"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":30,"searchDepth":45,"depth":45,"links":107811},[107812,107813,107814,107819,107823,107824,107825,107833],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":107815},[107816,107817,107818],{"id":106455,"depth":55,"text":106456},{"id":106505,"depth":55,"text":106506},{"id":106571,"depth":55,"text":106572},{"id":101577,"depth":45,"text":101578,"children":107820},[107821,107822],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":107826},[107827,107828,107829,107830,107832],{"id":107661,"depth":55,"text":107664},{"id":107673,"depth":55,"text":107673},{"id":107699,"depth":55,"text":107699},{"id":107708,"depth":55,"text":107831},"data.ctrl[0] 写了但没有效果",{"id":107739,"depth":55,"text":107739},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106143,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107840,"title":107841,"body":107842,"description":30,"extension":422,"meta":109751,"navigation":140,"path":109752,"seo":109753,"stem":109754,"__hash__":109755},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107843,"toc":109727},[107844,107847,107849,107852,107860,107863,107880,107883,107908,107911,107957,107959,107961,108016,108018,108037,108039,108082,108085,108102,108105,108121,108131,108138,108140,108143,108146,108180,108183,108231,108235,108238,108252,108261,108265,108268,108293,108296,108300,108313,108316,108322,108325,108340,108342,108345,108605,108607,108619,108622,108934,108936,108948,108950,108953,108968,108973,108976,108998,109001,109004,109038,109041,109045,109056,109059,109076,109079,109093,109100,109120,109127,109141,109144,109156,109171,109191,109194,109216,109219,109223,109238,109249,109264,109267,109297,109313,109342,109350,109374,109377,109395,109405,109417,109424,109433,109439,109448,109451,109453,109462,109465,109480,109482,109485,109496,109499,109510,109513,109531,109533,109550,109553,109581,109583,109587,109590,109620,109626,109629,109633,109641,109644,109646,109667,109670,109673,109689,109692,109708,109710,109713,109724],[10,107845,107841],{"id":107846},"_5viewer-可视化与-renderer-离屏渲染",[438,107848,100972],{"id":100971},[21,107850,107851],{},"本章掌握两类可视化方式:",[14,107853,107854,107857],{},[17,107855,107856],{},"交互式 viewer: 适合人工观察仿真",[17,107858,107859],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[21,107861,107862],{},"使用官方接口:",[25,107864,107866],{"className":30704,"code":107865,"language":30706,"meta":30,"style":30},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[32,107867,107868,107875],{"__ignoreMap":30},[35,107869,107870,107872],{"class":37,"line":38},[35,107871,30718],{"class":495},[35,107873,107874],{"class":359}," mujoco.viewer\n",[35,107876,107877],{"class":37,"line":45},[35,107878,107879],{"class":359},"mujoco.viewer.launch_passive(model, data)\n",[21,107881,107882],{},"以及:",[25,107884,107886],{"className":30704,"code":107885,"language":30706,"meta":30,"style":30},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[32,107887,107888,107898],{"__ignoreMap":30},[35,107889,107890,107893,107895],{"class":37,"line":38},[35,107891,107892],{"class":359},"renderer ",[35,107894,544],{"class":495},[35,107896,107897],{"class":359}," mujoco.Renderer(model)\n",[35,107899,107900,107903,107905],{"class":37,"line":45},[35,107901,107902],{"class":359},"image ",[35,107904,544],{"class":495},[35,107906,107907],{"class":359}," renderer.render()\n",[21,107909,107910],{},"新手建议先理解二者区别：",[633,107912,107913,107929],{},[636,107914,107915],{},[639,107916,107917,107920,107923,107926],{},[642,107918,107919],{"align":24070},"工具",[642,107921,107922],{"align":24070},"用途",[642,107924,107925],{"align":24070},"是否打开窗口",[642,107927,107928],{"align":24070},"常见场景",[680,107930,107931,107944],{},[639,107932,107933,107936,107939,107941],{},[685,107934,107935],{"align":24070},"Viewer",[685,107937,107938],{"align":24070},"人眼实时观察仿真",[685,107940,104987],{"align":24070},[685,107942,107943],{"align":24070},"调试模型、看控制效果",[639,107945,107946,107949,107952,107954],{},[685,107947,107948],{"align":24070},"Renderer",[685,107950,107951],{"align":24070},"生成图像数组",[685,107953,105000],{"align":24070},[685,107955,107956],{"align":24070},"保存图片、训练视觉策略、服务器批量采集",[438,107958,101095],{"id":101094},[21,107960,101098],{},[25,107962,107964],{"className":24156,"code":107963,"language":24158,"meta":30,"style":30},"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",[32,107965,107966,107978,107988,107996,108004],{"__ignoreMap":30},[35,107967,107968,107970,107972,107974,107976],{"class":37,"line":38},[35,107969,171],{"class":48},[35,107971,26645],{"class":306},[35,107973,318],{"class":306},[35,107975,26730],{"class":58},[35,107977,25010],{"class":58},[35,107979,107980,107982,107984,107986],{"class":37,"line":45},[35,107981,101133],{"class":306},[35,107983,101136],{"class":306},[35,107985,101139],{"class":306},[35,107987,25010],{"class":58},[35,107989,107990,107992,107994],{"class":37,"line":55},[35,107991,101146],{"class":306},[35,107993,101149],{"class":306},[35,107995,25010],{"class":58},[35,107997,107998,108000,108002],{"class":37,"line":65},[35,107999,101156],{"class":306},[35,108001,101159],{"class":306},[35,108003,25010],{"class":58},[35,108005,108006,108008,108010,108012,108014],{"class":37,"line":74},[35,108007,101166],{"class":306},[35,108009,101169],{"class":306},[35,108011,101172],{"class":306},[35,108013,101175],{"class":306},[35,108015,102838],{"class":306},[21,108017,103141],{},[25,108019,108021],{"className":24156,"code":108020,"language":24158,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy pillow\n",[32,108022,108023],{"__ignoreMap":30},[35,108024,108025,108027,108029,108031,108034],{"class":37,"line":38},[35,108026,24165],{"class":48},[35,108028,318],{"class":306},[35,108030,101255],{"class":306},[35,108032,108033],{"class":306}," numpy",[35,108035,108036],{"class":306}," pillow\n",[21,108038,103158],{},[25,108040,108042],{"className":24156,"code":108041,"language":24158,"meta":30,"style":30},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[32,108043,108044,108061,108070],{"__ignoreMap":30},[35,108045,108046,108048,108050,108052,108055,108057,108059],{"class":37,"line":38},[35,108047,30656],{"class":48},[35,108049,29502],{"class":306},[35,108051,25447],{"class":58},[35,108053,108054],{"class":306}," mujoco-render",[35,108056,101300],{"class":306},[35,108058,101303],{"class":58},[35,108060,101306],{"class":58},[35,108062,108063,108065,108067],{"class":37,"line":45},[35,108064,30656],{"class":48},[35,108066,101313],{"class":306},[35,108068,108069],{"class":306}," mujoco-render\n",[35,108071,108072,108074,108076,108078,108080],{"class":37,"line":55},[35,108073,24165],{"class":48},[35,108075,318],{"class":306},[35,108077,101255],{"class":306},[35,108079,108033],{"class":306},[35,108081,108036],{"class":306},[21,108083,108084],{},"离屏渲染后端:",[25,108086,108088],{"className":24156,"code":108087,"language":24158,"meta":30,"style":30},"export MUJOCO_GL=egl\n",[32,108089,108090],{"__ignoreMap":30},[35,108091,108092,108094,108097,108099],{"class":37,"line":38},[35,108093,25374],{"class":495},[35,108095,108096],{"class":359}," MUJOCO_GL",[35,108098,544],{"class":495},[35,108100,108101],{"class":359},"egl\n",[21,108103,108104],{},"或:",[25,108106,108108],{"className":24156,"code":108107,"language":24158,"meta":30,"style":30},"export MUJOCO_GL=osmesa\n",[32,108109,108110],{"__ignoreMap":30},[35,108111,108112,108114,108116,108118],{"class":37,"line":38},[35,108113,25374],{"class":495},[35,108115,108096],{"class":359},[35,108117,544],{"class":495},[35,108119,108120],{"class":359},"osmesa\n",[21,108122,108123,108124,108127,108128,28711],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[32,108125,108126],{},"egl"," 失败，再尝试 ",[32,108129,108130],{},"osmesa",[21,108132,108133,108134,108137],{},"如果你在本机桌面环境运行，通常先不要设置 ",[32,108135,108136],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[438,108139,101370],{"id":101369},[21,108141,108142],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[21,108144,108145],{},"典型 viewer 流程:",[25,108147,108149],{"className":30704,"code":108148,"language":30706,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[32,108150,108151,108164,108171,108175],{"__ignoreMap":30},[35,108152,108153,108156,108159,108161],{"class":37,"line":38},[35,108154,108155],{"class":495},"with",[35,108157,108158],{"class":359}," mujoco.viewer.launch_passive(model, data) ",[35,108160,31709],{"class":495},[35,108162,108163],{"class":359}," viewer:\n",[35,108165,108166,108168],{"class":37,"line":45},[35,108167,2592],{"class":495},[35,108169,108170],{"class":359}," viewer.is_running():\n",[35,108172,108173],{"class":37,"line":55},[35,108174,101838],{"class":359},[35,108176,108177],{"class":37,"line":65},[35,108178,108179],{"class":359},"        viewer.sync()\n",[21,108181,108182],{},"典型 renderer 流程:",[25,108184,108186],{"className":30704,"code":108185,"language":30706,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[32,108187,108188,108214,108218,108223],{"__ignoreMap":30},[35,108189,108190,108192,108194,108197,108199,108201,108203,108205,108207,108209,108212],{"class":37,"line":38},[35,108191,107892],{"class":359},[35,108193,544],{"class":495},[35,108195,108196],{"class":359}," mujoco.Renderer(model, ",[35,108198,25313],{"class":5550},[35,108200,544],{"class":495},[35,108202,42668],{"class":58},[35,108204,12769],{"class":359},[35,108206,25309],{"class":5550},[35,108208,544],{"class":495},[35,108210,108211],{"class":58},"640",[35,108213,505],{"class":359},[35,108215,108216],{"class":37,"line":45},[35,108217,104827],{"class":359},[35,108219,108220],{"class":37,"line":55},[35,108221,108222],{"class":359},"renderer.update_scene(data)\n",[35,108224,108225,108227,108229],{"class":37,"line":65},[35,108226,107902],{"class":359},[35,108228,544],{"class":495},[35,108230,107907],{"class":359},[465,108232,108234],{"id":108233},"viewer-的同步逻辑","viewer 的同步逻辑",[21,108236,108237],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[25,108239,108241],{"className":30704,"code":108240,"language":30706,"meta":30,"style":30},"mujoco.mj_step(model, data)\nviewer.sync()\n",[32,108242,108243,108247],{"__ignoreMap":30},[35,108244,108245],{"class":37,"line":38},[35,108246,104827],{"class":359},[35,108248,108249],{"class":37,"line":45},[35,108250,108251],{"class":359},"viewer.sync()\n",[21,108253,108254,108256,108257,108260],{},[32,108255,101540],{}," 负责算物理，",[32,108258,108259],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[465,108262,108264],{"id":108263},"为什么要-sleep","为什么要 sleep",[21,108266,108267],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[25,108269,108271],{"className":30704,"code":108270,"language":30706,"meta":30,"style":30},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[32,108272,108273],{"__ignoreMap":30},[35,108274,108275,108278,108280,108283,108285,108288,108290],{"class":37,"line":38},[35,108276,108277],{"class":359},"sleep_time ",[35,108279,544],{"class":495},[35,108281,108282],{"class":359}," model.opt.timestep ",[35,108284,1026],{"class":495},[35,108286,108287],{"class":359}," (time.time() ",[35,108289,1026],{"class":495},[35,108291,108292],{"class":359}," step_start)\n",[21,108294,108295],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[465,108297,108299],{"id":108298},"renderer-输出是什么","renderer 输出是什么",[25,108301,108303],{"className":30704,"code":108302,"language":30706,"meta":30,"style":30},"image = renderer.render()\n",[32,108304,108305],{"__ignoreMap":30},[35,108306,108307,108309,108311],{"class":37,"line":38},[35,108308,107902],{"class":359},[35,108310,544],{"class":495},[35,108312,107907],{"class":359},[21,108314,108315],{},"得到的是 NumPy 数组，形状通常是：",[25,108317,108320],{"className":108318,"code":108319,"language":5521,"meta":30},[5519],"(height, width, 3)\n",[32,108321,108319],{"__ignoreMap":30},[21,108323,108324],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[25,108326,108328],{"className":30704,"code":108327,"language":30706,"meta":30,"style":30},"Image.fromarray(image).save(\"render_output.png\")\n",[32,108329,108330],{"__ignoreMap":30},[35,108331,108332,108335,108338],{"class":37,"line":38},[35,108333,108334],{"class":359},"Image.fromarray(image).save(",[35,108336,108337],{"class":306},"\"render_output.png\"",[35,108339,505],{"class":359},[438,108341,101578],{"id":101577},[21,108343,108344],{},"交互式 Viewer:",[25,108346,108348],{"className":30704,"code":108347,"language":30706,"meta":30,"style":30},"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",[32,108349,108350,108356,108360,108366,108372,108376,108380,108388,108393,108397,108401,108405,108410,108415,108419,108423,108427,108432,108436,108440,108444,108448,108452,108456,108468,108480,108488,108492,108502,108522,108532,108537,108542,108546,108563,108576,108581,108585,108589,108601],{"__ignoreMap":30},[35,108351,108352,108354],{"class":37,"line":38},[35,108353,30718],{"class":495},[35,108355,32155],{"class":359},[35,108357,108358],{"class":37,"line":45},[35,108359,141],{"emptyLinePlaceholder":140},[35,108361,108362,108364],{"class":37,"line":55},[35,108363,30718],{"class":495},[35,108365,101623],{"class":359},[35,108367,108368,108370],{"class":37,"line":65},[35,108369,30718],{"class":495},[35,108371,107874],{"class":359},[35,108373,108374],{"class":37,"line":74},[35,108375,141],{"emptyLinePlaceholder":140},[35,108377,108378],{"class":37,"line":83},[35,108379,141],{"emptyLinePlaceholder":140},[35,108381,108382,108384,108386],{"class":37,"line":92},[35,108383,101636],{"class":58},[35,108385,13898],{"class":495},[35,108387,101641],{"class":306},[35,108389,108390],{"class":37,"line":101},[35,108391,108392],{"class":306},"\u003Cmujoco model=\"viewer_demo\">\n",[35,108394,108395],{"class":37,"line":110},[35,108396,101651],{"class":306},[35,108398,108399],{"class":37,"line":119},[35,108400,141],{"emptyLinePlaceholder":140},[35,108402,108403],{"class":37,"line":128},[35,108404,101660],{"class":306},[35,108406,108407],{"class":37,"line":137},[35,108408,108409],{"class":306},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[35,108411,108412],{"class":37,"line":144},[35,108413,108414],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[35,108416,108417],{"class":37,"line":150},[35,108418,141],{"emptyLinePlaceholder":140},[35,108420,108421],{"class":37,"line":159},[35,108422,101674],{"class":306},[35,108424,108425],{"class":37,"line":168},[35,108426,101679],{"class":306},[35,108428,108429],{"class":37,"line":177},[35,108430,108431],{"class":306},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[35,108433,108434],{"class":37,"line":182},[35,108435,101689],{"class":306},[35,108437,108438],{"class":37,"line":188},[35,108439,101694],{"class":306},[35,108441,108442],{"class":37,"line":197},[35,108443,101699],{"class":306},[35,108445,108446],{"class":37,"line":206},[35,108447,96023],{"class":306},[35,108449,108450],{"class":37,"line":215},[35,108451,141],{"emptyLinePlaceholder":140},[35,108453,108454],{"class":37,"line":224},[35,108455,141],{"emptyLinePlaceholder":140},[35,108457,108458,108460,108462,108464,108466],{"class":37,"line":233},[35,108459,32273],{"class":495},[35,108461,2314],{"class":48},[35,108463,101720],{"class":359},[35,108465,96011],{"class":58},[35,108467,4073],{"class":359},[35,108469,108470,108472,108474,108476,108478],{"class":37,"line":238},[35,108471,101729],{"class":359},[35,108473,544],{"class":495},[35,108475,101734],{"class":359},[35,108477,101636],{"class":58},[35,108479,505],{"class":359},[35,108481,108482,108484,108486],{"class":37,"line":244},[35,108483,101743],{"class":359},[35,108485,544],{"class":495},[35,108487,101748],{"class":359},[35,108489,108490],{"class":37,"line":253},[35,108491,141],{"emptyLinePlaceholder":140},[35,108493,108494,108496,108498,108500],{"class":37,"line":262},[35,108495,34504],{"class":495},[35,108497,108158],{"class":359},[35,108499,31709],{"class":495},[35,108501,108163],{"class":359},[35,108503,108504,108507,108510,108512,108515,108517,108520],{"class":37,"line":271},[35,108505,108506],{"class":495},"        while",[35,108508,108509],{"class":359}," viewer.is_running() ",[35,108511,30788],{"class":495},[35,108513,108514],{"class":359}," data.time ",[35,108516,1404],{"class":495},[35,108518,108519],{"class":58}," 5.0",[35,108521,4073],{"class":359},[35,108523,108524,108527,108529],{"class":37,"line":280},[35,108525,108526],{"class":359},"            step_start ",[35,108528,544],{"class":495},[35,108530,108531],{"class":359}," time.time()\n",[35,108533,108534],{"class":37,"line":289},[35,108535,108536],{"class":359},"            mujoco.mj_step(model, data)\n",[35,108538,108539],{"class":37,"line":294},[35,108540,108541],{"class":359},"            viewer.sync()\n",[35,108543,108544],{"class":37,"line":300},[35,108545,141],{"emptyLinePlaceholder":140},[35,108547,108548,108551,108553,108555,108557,108559,108561],{"class":37,"line":313},[35,108549,108550],{"class":359},"            sleep_time ",[35,108552,544],{"class":495},[35,108554,108282],{"class":359},[35,108556,1026],{"class":495},[35,108558,108287],{"class":359},[35,108560,1026],{"class":495},[35,108562,108292],{"class":359},[35,108564,108565,108567,108570,108572,108574],{"class":37,"line":324},[35,108566,4976],{"class":495},[35,108568,108569],{"class":359}," sleep_time ",[35,108571,1454],{"class":495},[35,108573,4427],{"class":58},[35,108575,4073],{"class":359},[35,108577,108578],{"class":37,"line":2955},[35,108579,108580],{"class":359},"                time.sleep(sleep_time)\n",[35,108582,108583],{"class":37,"line":8282},[35,108584,141],{"emptyLinePlaceholder":140},[35,108586,108587],{"class":37,"line":8306},[35,108588,141],{"emptyLinePlaceholder":140},[35,108590,108591,108593,108595,108597,108599],{"class":37,"line":8311},[35,108592,1892],{"class":495},[35,108594,31546],{"class":58},[35,108596,101881],{"class":495},[35,108598,101884],{"class":306},[35,108600,4073],{"class":359},[35,108602,108603],{"class":37,"line":8317},[35,108604,101891],{"class":359},[21,108606,103892],{},[25,108608,108610],{"className":24156,"code":108609,"language":24158,"meta":30,"style":30},"touch ch5_viewer.py\n",[32,108611,108612],{"__ignoreMap":30},[35,108613,108614,108616],{"class":37,"line":38},[35,108615,113],{"class":48},[35,108617,108618],{"class":306}," ch5_viewer.py\n",[21,108620,108621],{},"离屏 Renderer 保存图片:",[25,108623,108625],{"className":30704,"code":108624,"language":30706,"meta":30,"style":30},"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",[32,108626,108627,108639,108643,108649,108659,108663,108667,108675,108680,108684,108688,108692,108696,108701,108705,108709,108713,108717,108721,108725,108729,108733,108737,108741,108745,108757,108769,108777,108802,108806,108822,108826,108830,108845,108854,108858,108872,108877,108882,108886,108898,108910,108914,108918,108930],{"__ignoreMap":30},[35,108628,108629,108631,108634,108636],{"class":37,"line":38},[35,108630,31063],{"class":495},[35,108632,108633],{"class":359}," pathlib ",[35,108635,30718],{"class":495},[35,108637,108638],{"class":359}," Path\n",[35,108640,108641],{"class":37,"line":45},[35,108642,141],{"emptyLinePlaceholder":140},[35,108644,108645,108647],{"class":37,"line":55},[35,108646,30718],{"class":495},[35,108648,101623],{"class":359},[35,108650,108651,108653,108655,108657],{"class":37,"line":65},[35,108652,31063],{"class":495},[35,108654,47589],{"class":58},[35,108656,47592],{"class":495},[35,108658,47595],{"class":359},[35,108660,108661],{"class":37,"line":74},[35,108662,141],{"emptyLinePlaceholder":140},[35,108664,108665],{"class":37,"line":83},[35,108666,141],{"emptyLinePlaceholder":140},[35,108668,108669,108671,108673],{"class":37,"line":92},[35,108670,101636],{"class":58},[35,108672,13898],{"class":495},[35,108674,101641],{"class":306},[35,108676,108677],{"class":37,"line":101},[35,108678,108679],{"class":306},"\u003Cmujoco model=\"renderer_demo\">\n",[35,108681,108682],{"class":37,"line":110},[35,108683,101651],{"class":306},[35,108685,108686],{"class":37,"line":119},[35,108687,141],{"emptyLinePlaceholder":140},[35,108689,108690],{"class":37,"line":128},[35,108691,101660],{"class":306},[35,108693,108694],{"class":37,"line":137},[35,108695,108409],{"class":306},[35,108697,108698],{"class":37,"line":144},[35,108699,108700],{"class":306},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[35,108702,108703],{"class":37,"line":150},[35,108704,108414],{"class":306},[35,108706,108707],{"class":37,"line":159},[35,108708,141],{"emptyLinePlaceholder":140},[35,108710,108711],{"class":37,"line":168},[35,108712,101674],{"class":306},[35,108714,108715],{"class":37,"line":177},[35,108716,101679],{"class":306},[35,108718,108719],{"class":37,"line":182},[35,108720,108431],{"class":306},[35,108722,108723],{"class":37,"line":188},[35,108724,101689],{"class":306},[35,108726,108727],{"class":37,"line":197},[35,108728,101694],{"class":306},[35,108730,108731],{"class":37,"line":206},[35,108732,101699],{"class":306},[35,108734,108735],{"class":37,"line":215},[35,108736,96023],{"class":306},[35,108738,108739],{"class":37,"line":224},[35,108740,141],{"emptyLinePlaceholder":140},[35,108742,108743],{"class":37,"line":233},[35,108744,141],{"emptyLinePlaceholder":140},[35,108746,108747,108749,108751,108753,108755],{"class":37,"line":238},[35,108748,32273],{"class":495},[35,108750,2314],{"class":48},[35,108752,101720],{"class":359},[35,108754,96011],{"class":58},[35,108756,4073],{"class":359},[35,108758,108759,108761,108763,108765,108767],{"class":37,"line":244},[35,108760,101729],{"class":359},[35,108762,544],{"class":495},[35,108764,101734],{"class":359},[35,108766,101636],{"class":58},[35,108768,505],{"class":359},[35,108770,108771,108773,108775],{"class":37,"line":253},[35,108772,101743],{"class":359},[35,108774,544],{"class":495},[35,108776,101748],{"class":359},[35,108778,108779,108782,108784,108786,108788,108790,108792,108794,108796,108798,108800],{"class":37,"line":262},[35,108780,108781],{"class":359},"    renderer ",[35,108783,544],{"class":495},[35,108785,108196],{"class":359},[35,108787,25313],{"class":5550},[35,108789,544],{"class":495},[35,108791,42668],{"class":58},[35,108793,12769],{"class":359},[35,108795,25309],{"class":5550},[35,108797,544],{"class":495},[35,108799,108211],{"class":58},[35,108801,505],{"class":359},[35,108803,108804],{"class":37,"line":271},[35,108805,141],{"emptyLinePlaceholder":140},[35,108807,108808,108810,108812,108814,108816,108818,108820],{"class":37,"line":280},[35,108809,3535],{"class":495},[35,108811,101823],{"class":359},[35,108813,26374],{"class":495},[35,108815,32769],{"class":58},[35,108817,499],{"class":359},[35,108819,807],{"class":58},[35,108821,31112],{"class":359},[35,108823,108824],{"class":37,"line":289},[35,108825,101838],{"class":359},[35,108827,108828],{"class":37,"line":294},[35,108829,141],{"emptyLinePlaceholder":140},[35,108831,108832,108835,108838,108840,108843],{"class":37,"line":300},[35,108833,108834],{"class":359},"    renderer.update_scene(data, ",[35,108836,108837],{"class":5550},"camera",[35,108839,544],{"class":495},[35,108841,108842],{"class":306},"\"fixed_camera\"",[35,108844,505],{"class":359},[35,108846,108847,108850,108852],{"class":37,"line":313},[35,108848,108849],{"class":359},"    image ",[35,108851,544],{"class":495},[35,108853,107907],{"class":359},[35,108855,108856],{"class":37,"line":324},[35,108857,141],{"emptyLinePlaceholder":140},[35,108859,108860,108863,108865,108868,108870],{"class":37,"line":2955},[35,108861,108862],{"class":359},"    output_path ",[35,108864,544],{"class":495},[35,108866,108867],{"class":359}," Path(",[35,108869,108337],{"class":306},[35,108871,505],{"class":359},[35,108873,108874],{"class":37,"line":8282},[35,108875,108876],{"class":359},"    Image.fromarray(image).save(output_path)\n",[35,108878,108879],{"class":37,"line":8306},[35,108880,108881],{"class":359},"    renderer.close()\n",[35,108883,108884],{"class":37,"line":8311},[35,108885,141],{"emptyLinePlaceholder":140},[35,108887,108888,108890,108892,108895],{"class":37,"line":8317},[35,108889,31625],{"class":58},[35,108891,499],{"class":359},[35,108893,108894],{"class":306},"\"saved:\"",[35,108896,108897],{"class":359},", output_path.resolve())\n",[35,108899,108900,108902,108904,108907],{"class":37,"line":8344},[35,108901,31625],{"class":58},[35,108903,499],{"class":359},[35,108905,108906],{"class":306},"\"image shape:\"",[35,108908,108909],{"class":359},", image.shape)\n",[35,108911,108912],{"class":37,"line":8349},[35,108913,141],{"emptyLinePlaceholder":140},[35,108915,108916],{"class":37,"line":8355},[35,108917,141],{"emptyLinePlaceholder":140},[35,108919,108920,108922,108924,108926,108928],{"class":37,"line":8367},[35,108921,1892],{"class":495},[35,108923,31546],{"class":58},[35,108925,101881],{"class":495},[35,108927,101884],{"class":306},[35,108929,4073],{"class":359},[35,108931,108932],{"class":37,"line":8379},[35,108933,101891],{"class":359},[21,108935,103892],{},[25,108937,108939],{"className":24156,"code":108938,"language":24158,"meta":30,"style":30},"touch ch5_renderer.py\n",[32,108940,108941],{"__ignoreMap":30},[35,108942,108943,108945],{"class":37,"line":38},[35,108944,113],{"class":48},[35,108946,108947],{"class":306}," ch5_renderer.py\n",[465,108949,101894],{"id":101894},[21,108951,108952],{},"viewer 上下文：",[25,108954,108956],{"className":30704,"code":108955,"language":30706,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[32,108957,108958],{"__ignoreMap":30},[35,108959,108960,108962,108964,108966],{"class":37,"line":38},[35,108961,108155],{"class":495},[35,108963,108158],{"class":359},[35,108965,31709],{"class":495},[35,108967,108163],{"class":359},[21,108969,108970,108972],{},[32,108971,108155],{}," 语句会创建窗口，并在退出时自动清理资源。",[21,108974,108975],{},"窗口循环：",[25,108977,108979],{"className":30704,"code":108978,"language":30706,"meta":30,"style":30},"while viewer.is_running() and data.time \u003C 5.0:\n",[32,108980,108981],{"__ignoreMap":30},[35,108982,108983,108986,108988,108990,108992,108994,108996],{"class":37,"line":38},[35,108984,108985],{"class":495},"while",[35,108987,108509],{"class":359},[35,108989,30788],{"class":495},[35,108991,108514],{"class":359},[35,108993,1404],{"class":495},[35,108995,108519],{"class":58},[35,108997,4073],{"class":359},[21,108999,109000],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[21,109002,109003],{},"固定相机：",[25,109005,109007],{"className":53393,"code":109006,"language":53395,"meta":30,"style":30},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[32,109008,109009],{"__ignoreMap":30},[35,109010,109011,109013,109015,109017,109019,109021,109023,109025,109028,109031,109033,109036],{"class":37,"line":38},[35,109012,1404],{"class":359},[35,109014,108837],{"class":51626},[35,109016,15254],{"class":48},[35,109018,544],{"class":359},[35,109020,108842],{"class":306},[35,109022,101431],{"class":48},[35,109024,544],{"class":359},[35,109026,109027],{"class":306},"\"1.5 -2.0 1.2\"",[35,109029,109030],{"class":48}," xyaxes",[35,109032,544],{"class":359},[35,109034,109035],{"class":306},"\"1 0.75 0 0 0 1\"",[35,109037,101469],{"class":359},[21,109039,109040],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[465,109042,109044],{"id":109043},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[25,109046,109048],{"className":30704,"code":109047,"language":30706,"meta":30,"style":30},"import time\n",[32,109049,109050],{"__ignoreMap":30},[35,109051,109052,109054],{"class":37,"line":38},[35,109053,30718],{"class":495},[35,109055,32155],{"class":359},[21,109057,109058],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[25,109060,109062],{"className":30704,"code":109061,"language":30706,"meta":30,"style":30},"import mujoco\nimport mujoco.viewer\n",[32,109063,109064,109070],{"__ignoreMap":30},[35,109065,109066,109068],{"class":37,"line":38},[35,109067,30718],{"class":495},[35,109069,101623],{"class":359},[35,109071,109072,109074],{"class":37,"line":45},[35,109073,30718],{"class":495},[35,109075,107874],{"class":359},[21,109077,109078],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[25,109080,109081],{"className":30704,"code":108955,"language":30706,"meta":30,"style":30},[32,109082,109083],{"__ignoreMap":30},[35,109084,109085,109087,109089,109091],{"class":37,"line":38},[35,109086,108155],{"class":495},[35,109088,108158],{"class":359},[35,109090,31709],{"class":495},[35,109092,108163],{"class":359},[21,109094,109095,109096,109099],{},"打开一个 viewer 窗口。",[32,109097,109098],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[25,109101,109102],{"className":30704,"code":108978,"language":30706,"meta":30,"style":30},[32,109103,109104],{"__ignoreMap":30},[35,109105,109106,109108,109110,109112,109114,109116,109118],{"class":37,"line":38},[35,109107,108985],{"class":495},[35,109109,108509],{"class":359},[35,109111,30788],{"class":495},[35,109113,108514],{"class":359},[35,109115,1404],{"class":495},[35,109117,108519],{"class":58},[35,109119,4073],{"class":359},[21,109121,109122,109123,109126],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[32,109124,109125],{},"viewer.is_running()"," 会变成 false，循环结束。",[25,109128,109130],{"className":30704,"code":109129,"language":30706,"meta":30,"style":30},"step_start = time.time()\n",[32,109131,109132],{"__ignoreMap":30},[35,109133,109134,109137,109139],{"class":37,"line":38},[35,109135,109136],{"class":359},"step_start ",[35,109138,544],{"class":495},[35,109140,108531],{"class":359},[21,109142,109143],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[25,109145,109146],{"className":30704,"code":108240,"language":30706,"meta":30,"style":30},[32,109147,109148,109152],{"__ignoreMap":30},[35,109149,109150],{"class":37,"line":38},[35,109151,104827],{"class":359},[35,109153,109154],{"class":37,"line":45},[35,109155,108251],{"class":359},[21,109157,109158,109160,109161,109163,109164,109166,109167,109170],{},[32,109159,101540],{}," 推进物理仿真。",[32,109162,108259],{}," 把最新的 ",[32,109165,33727],{}," 同步到窗口里显示。没有 ",[32,109168,109169],{},"sync()","，窗口可能看不到最新状态。",[25,109172,109173],{"className":30704,"code":108270,"language":30706,"meta":30,"style":30},[32,109174,109175],{"__ignoreMap":30},[35,109176,109177,109179,109181,109183,109185,109187,109189],{"class":37,"line":38},[35,109178,108277],{"class":359},[35,109180,544],{"class":495},[35,109182,108282],{"class":359},[35,109184,1026],{"class":495},[35,109186,108287],{"class":359},[35,109188,1026],{"class":495},[35,109190,108292],{"class":359},[21,109192,109193],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[25,109195,109197],{"className":30704,"code":109196,"language":30706,"meta":30,"style":30},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[32,109198,109199,109211],{"__ignoreMap":30},[35,109200,109201,109203,109205,109207,109209],{"class":37,"line":38},[35,109202,1892],{"class":495},[35,109204,108569],{"class":359},[35,109206,1454],{"class":495},[35,109208,4427],{"class":58},[35,109210,4073],{"class":359},[35,109212,109213],{"class":37,"line":45},[35,109214,109215],{"class":359},"    time.sleep(sleep_time)\n",[21,109217,109218],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[465,109220,109222],{"id":109221},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[25,109224,109226],{"className":30704,"code":109225,"language":30706,"meta":30,"style":30},"from pathlib import Path\n",[32,109227,109228],{"__ignoreMap":30},[35,109229,109230,109232,109234,109236],{"class":37,"line":38},[35,109231,31063],{"class":495},[35,109233,108633],{"class":359},[35,109235,30718],{"class":495},[35,109237,108638],{"class":359},[21,109239,109240,109241,109244,109245,109248],{},"导入 ",[32,109242,109243],{},"Path","，用来处理文件路径。相比直接写字符串，",[32,109246,109247],{},"Path(\"render_output.png\")"," 更清晰。",[25,109250,109252],{"className":30704,"code":109251,"language":30706,"meta":30,"style":30},"from PIL import Image\n",[32,109253,109254],{"__ignoreMap":30},[35,109255,109256,109258,109260,109262],{"class":37,"line":38},[35,109257,31063],{"class":495},[35,109259,47589],{"class":58},[35,109261,47592],{"class":495},[35,109263,47595],{"class":359},[21,109265,109266],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[25,109268,109269],{"className":53393,"code":109006,"language":53395,"meta":30,"style":30},[32,109270,109271],{"__ignoreMap":30},[35,109272,109273,109275,109277,109279,109281,109283,109285,109287,109289,109291,109293,109295],{"class":37,"line":38},[35,109274,1404],{"class":359},[35,109276,108837],{"class":51626},[35,109278,15254],{"class":48},[35,109280,544],{"class":359},[35,109282,108842],{"class":306},[35,109284,101431],{"class":48},[35,109286,544],{"class":359},[35,109288,109027],{"class":306},[35,109290,109030],{"class":48},[35,109292,544],{"class":359},[35,109294,109035],{"class":306},[35,109296,101469],{"class":359},[21,109298,109299,109300,109302,109303,109305,109306,109309,109310,109312],{},"定义一个相机。",[32,109301,80135],{}," 是相机名字。",[32,109304,104468],{}," 是相机在世界里的位置。",[32,109307,109308],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[32,109311,104468],{}," 来调视角。",[25,109314,109316],{"className":30704,"code":109315,"language":30706,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[32,109317,109318],{"__ignoreMap":30},[35,109319,109320,109322,109324,109326,109328,109330,109332,109334,109336,109338,109340],{"class":37,"line":38},[35,109321,107892],{"class":359},[35,109323,544],{"class":495},[35,109325,108196],{"class":359},[35,109327,25313],{"class":5550},[35,109329,544],{"class":495},[35,109331,42668],{"class":58},[35,109333,12769],{"class":359},[35,109335,25309],{"class":5550},[35,109337,544],{"class":495},[35,109339,108211],{"class":58},[35,109341,505],{"class":359},[21,109343,109344,109345,101343,109347,109349],{},"创建离屏渲染器。",[32,109346,25313],{},[32,109348,25309],{}," 决定输出图片大小。",[25,109351,109352],{"className":30704,"code":101998,"language":30706,"meta":30,"style":30},[32,109353,109354,109370],{"__ignoreMap":30},[35,109355,109356,109358,109360,109362,109364,109366,109368],{"class":37,"line":38},[35,109357,3359],{"class":495},[35,109359,101823],{"class":359},[35,109361,26374],{"class":495},[35,109363,32769],{"class":58},[35,109365,499],{"class":359},[35,109367,807],{"class":58},[35,109369,31112],{"class":359},[35,109371,109372],{"class":37,"line":45},[35,109373,102021],{"class":359},[21,109375,109376],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[25,109378,109380],{"className":30704,"code":109379,"language":30706,"meta":30,"style":30},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[32,109381,109382],{"__ignoreMap":30},[35,109383,109384,109387,109389,109391,109393],{"class":37,"line":38},[35,109385,109386],{"class":359},"renderer.update_scene(data, ",[35,109388,108837],{"class":5550},[35,109390,544],{"class":495},[35,109392,108842],{"class":306},[35,109394,505],{"class":359},[21,109396,109397,109398,109400,109401,109404],{},"告诉 renderer：用当前 ",[32,109399,33727],{}," 的状态更新画面，并使用名为 ",[32,109402,109403],{},"fixed_camera"," 的相机视角。",[25,109406,109407],{"className":30704,"code":108302,"language":30706,"meta":30,"style":30},[32,109408,109409],{"__ignoreMap":30},[35,109410,109411,109413,109415],{"class":37,"line":38},[35,109412,107902],{"class":359},[35,109414,544],{"class":495},[35,109416,107907],{"class":359},[21,109418,109419,109420,109423],{},"真正渲染出图像。",[32,109421,109422],{},"image"," 是一个 NumPy 数组，不是文件。",[25,109425,109427],{"className":30704,"code":109426,"language":30706,"meta":30,"style":30},"Image.fromarray(image).save(output_path)\n",[32,109428,109429],{"__ignoreMap":30},[35,109430,109431],{"class":37,"line":38},[35,109432,109426],{"class":359},[21,109434,109435,109436,28711],{},"把数组转换成图片，并保存到 ",[32,109437,109438],{},"render_output.png",[25,109440,109442],{"className":30704,"code":109441,"language":30706,"meta":30,"style":30},"renderer.close()\n",[32,109443,109444],{"__ignoreMap":30},[35,109445,109446],{"class":37,"line":38},[35,109447,109441],{"class":359},[21,109449,109450],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[438,109452,102638],{"id":102637},[21,109454,109455,109456,109458,109459,28711],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[32,109457,109438],{},"，并输出图像数组形状，例如 ",[32,109460,109461],{},"(480, 640, 3)",[21,109463,109464],{},"如果图片里看不到方块，先检查：",[14,109466,109467,109470,109473],{},[17,109468,109469],{},"方块是否掉到相机视野外。",[17,109471,109472],{},"camera 位置是否合理。",[17,109474,109475,109476,109479],{},"是否在 ",[32,109477,109478],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[438,109481,102670],{"id":102669},[21,109483,109484],{},"运行 viewer:",[25,109486,109488],{"className":24156,"code":109487,"language":24158,"meta":30,"style":30},"python ch5_viewer.py\n",[32,109489,109490],{"__ignoreMap":30},[35,109491,109492,109494],{"class":37,"line":38},[35,109493,30706],{"class":48},[35,109495,108618],{"class":306},[21,109497,109498],{},"运行 renderer:",[25,109500,109502],{"className":24156,"code":109501,"language":24158,"meta":30,"style":30},"python ch5_renderer.py\n",[32,109503,109504],{"__ignoreMap":30},[35,109505,109506,109508],{"class":37,"line":38},[35,109507,30706],{"class":48},[35,109509,108947],{"class":306},[21,109511,109512],{},"如果在服务器上运行:",[25,109514,109516],{"className":24156,"code":109515,"language":24158,"meta":30,"style":30},"MUJOCO_GL=egl python ch5_renderer.py\n",[32,109517,109518],{"__ignoreMap":30},[35,109519,109520,109522,109524,109526,109529],{"class":37,"line":38},[35,109521,108136],{"class":359},[35,109523,544],{"class":495},[35,109525,108126],{"class":306},[35,109527,109528],{"class":48}," python",[35,109530,108947],{"class":306},[21,109532,108104],{},[25,109534,109536],{"className":24156,"code":109535,"language":24158,"meta":30,"style":30},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[32,109537,109538],{"__ignoreMap":30},[35,109539,109540,109542,109544,109546,109548],{"class":37,"line":38},[35,109541,108136],{"class":359},[35,109543,544],{"class":495},[35,109545,108130],{"class":306},[35,109547,109528],{"class":48},[35,109549,108947],{"class":306},[21,109551,109552],{},"再做几个练习：",[14,109554,109555,109562,109565,109571],{},[17,109556,109557,109558,109561],{},"把 renderer 分辨率改成 ",[32,109559,109560],{},"height=240, width=320","，观察输出 shape。",[17,109563,109564],{},"把方块颜色改成蓝色，重新保存图片。",[17,109566,109567,109568,109570],{},"把相机 ",[32,109569,104468],{}," 改远一点，观察画面中物体是否变小。",[17,109572,109573,109574,102736,109577,109580],{},"把 viewer 示例中的 ",[32,109575,109576],{},"data.time \u003C 5.0",[32,109578,109579],{},"data.time \u003C 20.0","，观察更长时间。",[438,109582,102775],{"id":102774},[465,109584,109586],{"id":109585},"viewer-窗口打不开","viewer 窗口打不开",[21,109588,109589],{},"安装:",[25,109591,109593],{"className":24156,"code":109592,"language":24158,"meta":30,"style":30},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[32,109594,109595],{"__ignoreMap":30},[35,109596,109597,109599,109601,109603,109605,109607,109609,109611,109613,109615,109617],{"class":37,"line":38},[35,109598,171],{"class":48},[35,109600,26645],{"class":306},[35,109602,318],{"class":306},[35,109604,26730],{"class":58},[35,109606,102828],{"class":306},[35,109608,101159],{"class":306},[35,109610,102833],{"class":306},[35,109612,101172],{"class":306},[35,109614,101178],{"class":306},[35,109616,101169],{"class":306},[35,109618,109619],{"class":306}," libXinerama\n",[465,109621,109623],{"id":109622},"glfwerror",[32,109624,109625],{},"GLFWError",[21,109627,109628],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[465,109630,109632],{"id":109631},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[21,109634,109635,109636,82864,109638,109640],{},"尝试 ",[32,109637,101362],{},[32,109639,101365],{},"。可能存在版本差异。",[465,109642,109643],{"id":109643},"保存图片是黑的",[21,109645,102897],{},[14,109647,109648,109651,109654,109664],{},[17,109649,109650],{},"XML 里是否有 light。",[17,109652,109653],{},"相机是否对着模型。",[17,109655,109656,109657,109660,109661,28711],{},"是否先 ",[32,109658,109659],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[32,109662,109663],{},"renderer.render()",[17,109665,109666],{},"物体是否已经掉出视野。",[465,109668,109669],{"id":109669},"远程服务器没有显示器",[21,109671,109672],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[25,109674,109675],{"className":24156,"code":109515,"language":24158,"meta":30,"style":30},[32,109676,109677],{"__ignoreMap":30},[35,109678,109679,109681,109683,109685,109687],{"class":37,"line":38},[35,109680,108136],{"class":359},[35,109682,544],{"class":495},[35,109684,108126],{"class":306},[35,109686,109528],{"class":48},[35,109688,108947],{"class":306},[21,109690,109691],{},"如果 EGL 不可用，再尝试：",[25,109693,109694],{"className":24156,"code":109535,"language":24158,"meta":30,"style":30},[32,109695,109696],{"__ignoreMap":30},[35,109697,109698,109700,109702,109704,109706],{"class":37,"line":38},[35,109699,108136],{"class":359},[35,109701,544],{"class":495},[35,109703,108130],{"class":306},[35,109705,109528],{"class":48},[35,109707,108947],{"class":306},[438,109709,102929],{"id":102928},[21,109711,109712],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[14,109714,109715,109718,109721],{},[17,109716,109717],{},"先用 viewer 看模型和控制是否正常。",[17,109719,109720],{},"再用 renderer 保存图片或构造视觉观测。",[17,109722,109723],{},"最后把状态、动作、图像、奖励组织成训练数据。",[416,109725,109726],{},"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":30,"searchDepth":45,"depth":45,"links":109728},[109729,109730,109731,109736,109741,109742,109743,109750],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":109732},[109733,109734,109735],{"id":108233,"depth":55,"text":108234},{"id":108263,"depth":55,"text":108264},{"id":108298,"depth":55,"text":108299},{"id":101577,"depth":45,"text":101578,"children":109737},[109738,109739,109740],{"id":101894,"depth":55,"text":101894},{"id":109043,"depth":55,"text":109044},{"id":109221,"depth":55,"text":109222},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":109744},[109745,109746,109747,109748,109749],{"id":109585,"depth":55,"text":109586},{"id":109622,"depth":55,"text":109625},{"id":109631,"depth":55,"text":109632},{"id":109643,"depth":55,"text":109643},{"id":109669,"depth":55,"text":109669},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107841,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109757,"title":109758,"body":109759,"description":30,"extension":422,"meta":111670,"navigation":140,"path":111671,"seo":111672,"stem":111673,"__hash__":111674},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109760,"toc":111646},[109761,109764,109766,109769,109771,109790,109793,109799,109802,109804,109806,109830,109832,109846,109848,109889,109891,109902,109904,109907,109913,109916,109950,109953,109985,109988,110020,110024,110027,110067,110070,110076,110079,110085,110089,110092,110098,110101,110105,110108,110148,110150,110163,110166,110168,110750,110752,110764,110767,110778,110780,110783,110802,110814,110817,110838,110841,110844,110887,110890,110893,110913,110920,110922,110940,110955,110958,110964,110967,110973,110990,110997,111028,111039,111073,111084,111101,111110,111118,111123,111137,111140,111161,111167,111181,111186,111216,111226,111251,111259,111282,111285,111301,111304,111312,111318,111340,111353,111374,111383,111422,111433,111435,111438,111444,111447,111450,111456,111459,111479,111482,111484,111523,111525,111528,111536,111539,111542,111569,111572,111582,111588,111591,111597,111599,111605,111609,111612,111614,111617,111641,111644],[10,109762,109758],{"id":109763},"_6控制任务cartpole",[438,109765,100972],{"id":100971},[21,109767,109768],{},"本章搭建一个最小 Cartpole 控制任务。",[21,109770,104653],{},[14,109772,109773,109776,109778,109781,109784,109787],{},[17,109774,109775],{},"slide joint",[17,109777,106506],{},[17,109779,109780],{},"cart force actuator",[17,109782,109783],{},"状态观测",[17,109785,109786],{},"简单控制循环",[17,109788,109789],{},"reward 设计雏形",[21,109791,109792],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[25,109794,109797],{"className":109795,"code":109796,"language":5521,"meta":30},[5519],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[32,109798,109796],{"__ignoreMap":30},[21,109800,109801],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[438,109803,101095],{"id":101094},[21,109805,101098],{},[25,109807,109808],{"className":24156,"code":104710,"language":24158,"meta":30,"style":30},[32,109809,109810],{"__ignoreMap":30},[35,109811,109812,109814,109816,109818,109820,109822,109824,109826,109828],{"class":37,"line":38},[35,109813,171],{"class":48},[35,109815,26645],{"class":306},[35,109817,318],{"class":306},[35,109819,26730],{"class":58},[35,109821,104725],{"class":306},[35,109823,101123],{"class":306},[35,109825,102823],{"class":306},[35,109827,101139],{"class":306},[35,109829,104734],{"class":306},[21,109831,103141],{},[25,109833,109834],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},[32,109835,109836],{"__ignoreMap":30},[35,109837,109838,109840,109842,109844],{"class":37,"line":38},[35,109839,24165],{"class":48},[35,109841,318],{"class":306},[35,109843,101255],{"class":306},[35,109845,101258],{"class":306},[21,109847,103158],{},[25,109849,109851],{"className":24156,"code":109850,"language":24158,"meta":30,"style":30},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[32,109852,109853,109870,109879],{"__ignoreMap":30},[35,109854,109855,109857,109859,109861,109864,109866,109868],{"class":37,"line":38},[35,109856,30656],{"class":48},[35,109858,29502],{"class":306},[35,109860,25447],{"class":58},[35,109862,109863],{"class":306}," mujoco-cartpole",[35,109865,101300],{"class":306},[35,109867,101303],{"class":58},[35,109869,101306],{"class":58},[35,109871,109872,109874,109876],{"class":37,"line":45},[35,109873,30656],{"class":48},[35,109875,101313],{"class":306},[35,109877,109878],{"class":306}," mujoco-cartpole\n",[35,109880,109881,109883,109885,109887],{"class":37,"line":55},[35,109882,24165],{"class":48},[35,109884,318],{"class":306},[35,109886,101255],{"class":306},[35,109888,101258],{"class":306},[21,109890,101329],{},[14,109892,109893,109896,109899],{},[17,109894,109895],{},"本章不依赖 Gymnasium。",[17,109897,109898],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[17,109900,109901],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[438,109903,101370],{"id":101369},[21,109905,109906],{},"Cartpole 的模型结构:",[25,109908,109911],{"className":109909,"code":109910,"language":5521,"meta":30},[5519],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[32,109912,109910],{"__ignoreMap":30},[21,109914,109915],{},"小车通过 slide joint 左右移动:",[25,109917,109919],{"className":53393,"code":109918,"language":53395,"meta":30,"style":30},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[32,109920,109921],{"__ignoreMap":30},[35,109922,109923,109925,109927,109929,109931,109934,109936,109938,109941,109943,109945,109948],{"class":37,"line":38},[35,109924,1404],{"class":359},[35,109926,103278],{"class":51626},[35,109928,15254],{"class":48},[35,109930,544],{"class":359},[35,109932,109933],{"class":306},"\"cart_x\"",[35,109935,54150],{"class":48},[35,109937,544],{"class":359},[35,109939,109940],{"class":306},"\"slide\"",[35,109942,106350],{"class":48},[35,109944,544],{"class":359},[35,109946,109947],{"class":306},"\"1 0 0\"",[35,109949,101469],{"class":359},[21,109951,109952],{},"杆子通过 hinge joint 旋转:",[25,109954,109956],{"className":53393,"code":109955,"language":53395,"meta":30,"style":30},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,109957,109958],{"__ignoreMap":30},[35,109959,109960,109962,109964,109966,109968,109971,109973,109975,109977,109979,109981,109983],{"class":37,"line":38},[35,109961,1404],{"class":359},[35,109963,103278],{"class":51626},[35,109965,15254],{"class":48},[35,109967,544],{"class":359},[35,109969,109970],{"class":306},"\"pole_hinge\"",[35,109972,54150],{"class":48},[35,109974,544],{"class":359},[35,109976,106341],{"class":306},[35,109978,106350],{"class":48},[35,109980,544],{"class":359},[35,109982,106355],{"class":306},[35,109984,101469],{"class":359},[21,109986,109987],{},"控制力作用在小车 slide joint 上:",[25,109989,109991],{"className":53393,"code":109990,"language":53395,"meta":30,"style":30},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[32,109992,109993],{"__ignoreMap":30},[35,109994,109995,109997,109999,110001,110003,110006,110008,110010,110012,110014,110016,110018],{"class":37,"line":38},[35,109996,1404],{"class":359},[35,109998,106396],{"class":51626},[35,110000,15254],{"class":48},[35,110002,544],{"class":359},[35,110004,110005],{"class":306},"\"cart_motor\"",[35,110007,106406],{"class":48},[35,110009,544],{"class":359},[35,110011,109933],{"class":306},[35,110013,106413],{"class":48},[35,110015,544],{"class":359},[35,110017,54642],{"class":306},[35,110019,101469],{"class":359},[465,110021,110023],{"id":110022},"cartpole-的状态是什么","Cartpole 的状态是什么",[21,110025,110026],{},"这个简化模型有两个关节：",[633,110028,110029,110040],{},[636,110030,110031],{},[639,110032,110033,110035,110037],{},[642,110034,103081],{"align":24070},[642,110036,24071],{"align":24070},[642,110038,110039],{"align":24070},"对应状态",[680,110041,110042,110055],{},[639,110043,110044,110049,110052],{},[685,110045,110046],{"align":24070},[32,110047,110048],{},"cart_x",[685,110050,110051],{"align":24070},"slide",[685,110053,110054],{"align":24070},"小车 x 位置",[639,110056,110057,110062,110064],{},[685,110058,110059],{"align":24070},[32,110060,110061],{},"pole_hinge",[685,110063,106162],{"align":24070},[685,110065,110066],{"align":24070},"杆子角度",[21,110068,110069],{},"所以：",[25,110071,110074],{"className":110072,"code":110073,"language":5521,"meta":30},[5519],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[32,110075,110073],{"__ignoreMap":30},[21,110077,110078],{},"把它们拼起来就是观测：",[25,110080,110083],{"className":110081,"code":110082,"language":5521,"meta":30},[5519],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,110084,110082],{"__ignoreMap":30},[465,110086,110088],{"id":110087},"action-是什么","action 是什么",[21,110090,110091],{},"本章只有一个 actuator：",[25,110093,110096],{"className":110094,"code":110095,"language":5521,"meta":30},[5519],"data.ctrl[0] = action\n",[32,110097,110095],{"__ignoreMap":30},[21,110099,110100],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[465,110102,110104],{"id":110103},"reward-是什么","reward 是什么",[21,110106,110107],{},"奖励函数：",[25,110109,110111],{"className":30704,"code":110110,"language":30706,"meta":30,"style":30},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[32,110112,110113],{"__ignoreMap":30},[35,110114,110115,110117,110120,110122,110124,110126,110129,110131,110134,110136,110138,110140,110143,110145],{"class":37,"line":38},[35,110116,17380],{"class":495},[35,110118,110119],{"class":58}," float",[35,110121,499],{"class":359},[35,110123,102725],{"class":58},[35,110125,52597],{"class":495},[35,110127,110128],{"class":58}," 0.1",[35,110130,6852],{"class":495},[35,110132,110133],{"class":359}," cart_x ",[35,110135,949],{"class":495},[35,110137,110133],{"class":359},[35,110139,1026],{"class":495},[35,110141,110142],{"class":359}," pole_angle ",[35,110144,949],{"class":495},[35,110146,110147],{"class":359}," pole_angle)\n",[21,110149,106548],{},[14,110151,110152,110157,110160],{},[17,110153,110154,110155,28711],{},"基础奖励是 ",[32,110156,102725],{},[17,110158,110159],{},"小车离中心越远，扣分越多。",[17,110161,110162],{},"杆子角度越大，扣分越多。",[21,110164,110165],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[438,110167,101578],{"id":101577},[25,110169,110171],{"className":30704,"code":110170,"language":30706,"meta":30,"style":30},"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",[32,110172,110173,110179,110189,110193,110197,110205,110210,110214,110218,110222,110227,110231,110236,110241,110246,110250,110255,110260,110265,110269,110273,110277,110281,110285,110290,110294,110298,110302,110306,110310,110320,110327,110331,110335,110349,110363,110376,110406,110410,110414,110426,110438,110446,110450,110463,110467,110471,110480,110484,110500,110510,110523,110536,110540,110563,110581,110585,110597,110601,110605,110615,110625,110629,110645,110686,110690,110710,110726,110730,110734,110746],{"__ignoreMap":30},[35,110174,110175,110177],{"class":37,"line":38},[35,110176,30718],{"class":495},[35,110178,101623],{"class":359},[35,110180,110181,110183,110185,110187],{"class":37,"line":45},[35,110182,30718],{"class":495},[35,110184,31706],{"class":359},[35,110186,31709],{"class":495},[35,110188,31712],{"class":359},[35,110190,110191],{"class":37,"line":55},[35,110192,141],{"emptyLinePlaceholder":140},[35,110194,110195],{"class":37,"line":65},[35,110196,141],{"emptyLinePlaceholder":140},[35,110198,110199,110201,110203],{"class":37,"line":74},[35,110200,101636],{"class":58},[35,110202,13898],{"class":495},[35,110204,101641],{"class":306},[35,110206,110207],{"class":37,"line":83},[35,110208,110209],{"class":306},"\u003Cmujoco model=\"cartpole\">\n",[35,110211,110212],{"class":37,"line":92},[35,110213,101651],{"class":306},[35,110215,110216],{"class":37,"line":101},[35,110217,141],{"emptyLinePlaceholder":140},[35,110219,110220],{"class":37,"line":110},[35,110221,101660],{"class":306},[35,110223,110224],{"class":37,"line":119},[35,110225,110226],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[35,110228,110229],{"class":37,"line":128},[35,110230,141],{"emptyLinePlaceholder":140},[35,110232,110233],{"class":37,"line":137},[35,110234,110235],{"class":306},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[35,110237,110238],{"class":37,"line":144},[35,110239,110240],{"class":306},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[35,110242,110243],{"class":37,"line":150},[35,110244,110245],{"class":306},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[35,110247,110248],{"class":37,"line":159},[35,110249,141],{"emptyLinePlaceholder":140},[35,110251,110252],{"class":37,"line":168},[35,110253,110254],{"class":306},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[35,110256,110257],{"class":37,"line":177},[35,110258,110259],{"class":306},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[35,110261,110262],{"class":37,"line":182},[35,110263,110264],{"class":306},"        \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",[35,110266,110267],{"class":37,"line":188},[35,110268,106760],{"class":306},[35,110270,110271],{"class":37,"line":197},[35,110272,101689],{"class":306},[35,110274,110275],{"class":37,"line":206},[35,110276,101694],{"class":306},[35,110278,110279],{"class":37,"line":215},[35,110280,141],{"emptyLinePlaceholder":140},[35,110282,110283],{"class":37,"line":224},[35,110284,106777],{"class":306},[35,110286,110287],{"class":37,"line":233},[35,110288,110289],{"class":306},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[35,110291,110292],{"class":37,"line":238},[35,110293,106787],{"class":306},[35,110295,110296],{"class":37,"line":244},[35,110297,101699],{"class":306},[35,110299,110300],{"class":37,"line":253},[35,110301,96023],{"class":306},[35,110303,110304],{"class":37,"line":262},[35,110305,141],{"emptyLinePlaceholder":140},[35,110307,110308],{"class":37,"line":271},[35,110309,141],{"emptyLinePlaceholder":140},[35,110311,110312,110314,110317],{"class":37,"line":280},[35,110313,32273],{"class":495},[35,110315,110316],{"class":48}," get_observation",[35,110318,110319],{"class":359},"(data: mujoco.MjData) -> np.ndarray:\n",[35,110321,110322,110324],{"class":37,"line":289},[35,110323,4424],{"class":495},[35,110325,110326],{"class":359}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[35,110328,110329],{"class":37,"line":294},[35,110330,141],{"emptyLinePlaceholder":140},[35,110332,110333],{"class":37,"line":300},[35,110334,141],{"emptyLinePlaceholder":140},[35,110336,110337,110339,110342,110345,110347],{"class":37,"line":313},[35,110338,32273],{"class":495},[35,110340,110341],{"class":48}," compute_reward",[35,110343,110344],{"class":359},"(obs: np.ndarray) -> ",[35,110346,538],{"class":58},[35,110348,4073],{"class":359},[35,110350,110351,110354,110356,110359,110361],{"class":37,"line":324},[35,110352,110353],{"class":359},"    cart_x ",[35,110355,544],{"class":495},[35,110357,110358],{"class":359}," obs[",[35,110360,687],{"class":58},[35,110362,33572],{"class":359},[35,110364,110365,110368,110370,110372,110374],{"class":37,"line":2955},[35,110366,110367],{"class":359},"    pole_angle ",[35,110369,544],{"class":495},[35,110371,110358],{"class":359},[35,110373,713],{"class":58},[35,110375,33572],{"class":359},[35,110377,110378,110380,110382,110384,110386,110388,110390,110392,110394,110396,110398,110400,110402,110404],{"class":37,"line":8282},[35,110379,4424],{"class":495},[35,110381,110119],{"class":58},[35,110383,499],{"class":359},[35,110385,102725],{"class":58},[35,110387,52597],{"class":495},[35,110389,110128],{"class":58},[35,110391,6852],{"class":495},[35,110393,110133],{"class":359},[35,110395,949],{"class":495},[35,110397,110133],{"class":359},[35,110399,1026],{"class":495},[35,110401,110142],{"class":359},[35,110403,949],{"class":495},[35,110405,110147],{"class":359},[35,110407,110408],{"class":37,"line":8306},[35,110409,141],{"emptyLinePlaceholder":140},[35,110411,110412],{"class":37,"line":8311},[35,110413,141],{"emptyLinePlaceholder":140},[35,110415,110416,110418,110420,110422,110424],{"class":37,"line":8317},[35,110417,32273],{"class":495},[35,110419,2314],{"class":48},[35,110421,101720],{"class":359},[35,110423,96011],{"class":58},[35,110425,4073],{"class":359},[35,110427,110428,110430,110432,110434,110436],{"class":37,"line":8344},[35,110429,101729],{"class":359},[35,110431,544],{"class":495},[35,110433,101734],{"class":359},[35,110435,101636],{"class":58},[35,110437,505],{"class":359},[35,110439,110440,110442,110444],{"class":37,"line":8349},[35,110441,101743],{"class":359},[35,110443,544],{"class":495},[35,110445,101748],{"class":359},[35,110447,110448],{"class":37,"line":8355},[35,110449,141],{"emptyLinePlaceholder":140},[35,110451,110452,110454,110456,110458,110460],{"class":37,"line":8367},[35,110453,105391],{"class":359},[35,110455,713],{"class":58},[35,110457,4777],{"class":359},[35,110459,544],{"class":495},[35,110461,110462],{"class":58}," 0.1\n",[35,110464,110465],{"class":37,"line":8379},[35,110466,105404],{"class":359},[35,110468,110469],{"class":37,"line":8391},[35,110470,141],{"emptyLinePlaceholder":140},[35,110472,110473,110476,110478],{"class":37,"line":10050},[35,110474,110475],{"class":359},"    total_reward ",[35,110477,544],{"class":495},[35,110479,105083],{"class":58},[35,110481,110482],{"class":37,"line":10075},[35,110483,141],{"emptyLinePlaceholder":140},[35,110485,110486,110488,110490,110492,110494,110496,110498],{"class":37,"line":10098},[35,110487,3535],{"class":495},[35,110489,31942],{"class":359},[35,110491,26374],{"class":495},[35,110493,32769],{"class":58},[35,110495,499],{"class":359},[35,110497,6744],{"class":58},[35,110499,31112],{"class":359},[35,110501,110502,110505,110507],{"class":37,"line":10122},[35,110503,110504],{"class":359},"        obs ",[35,110506,544],{"class":495},[35,110508,110509],{"class":359}," get_observation(data)\n",[35,110511,110512,110515,110517,110519,110521],{"class":37,"line":10127},[35,110513,110514],{"class":359},"        pole_angle ",[35,110516,544],{"class":495},[35,110518,110358],{"class":359},[35,110520,713],{"class":58},[35,110522,33572],{"class":359},[35,110524,110525,110528,110530,110532,110534],{"class":37,"line":10132},[35,110526,110527],{"class":359},"        pole_angular_velocity ",[35,110529,544],{"class":495},[35,110531,110358],{"class":359},[35,110533,568],{"class":58},[35,110535,33572],{"class":359},[35,110537,110538],{"class":37,"line":10137},[35,110539,141],{"emptyLinePlaceholder":140},[35,110541,110542,110545,110547,110550,110552,110554,110556,110558,110560],{"class":37,"line":10146},[35,110543,110544],{"class":359},"        action ",[35,110546,544],{"class":495},[35,110548,110549],{"class":58}," 2.0",[35,110551,6852],{"class":495},[35,110553,110142],{"class":359},[35,110555,975],{"class":495},[35,110557,62193],{"class":58},[35,110559,6852],{"class":495},[35,110561,110562],{"class":359}," pole_angular_velocity\n",[35,110564,110565,110567,110569,110571,110573,110575,110577,110579],{"class":37,"line":10151},[35,110566,110544],{"class":359},[35,110568,544],{"class":495},[35,110570,107769],{"class":359},[35,110572,1026],{"class":495},[35,110574,102725],{"class":58},[35,110576,12769],{"class":359},[35,110578,102725],{"class":58},[35,110580,505],{"class":359},[35,110582,110583],{"class":37,"line":10157},[35,110584,141],{"emptyLinePlaceholder":140},[35,110586,110587,110589,110591,110593,110595],{"class":37,"line":10178},[35,110588,106939],{"class":359},[35,110590,687],{"class":58},[35,110592,4777],{"class":359},[35,110594,544],{"class":495},[35,110596,107792],{"class":359},[35,110598,110599],{"class":37,"line":10184},[35,110600,101838],{"class":359},[35,110602,110603],{"class":37,"line":10198},[35,110604,141],{"emptyLinePlaceholder":140},[35,110606,110607,110610,110612],{"class":37,"line":10204},[35,110608,110609],{"class":359},"        reward ",[35,110611,544],{"class":495},[35,110613,110614],{"class":359}," compute_reward(get_observation(data))\n",[35,110616,110617,110620,110622],{"class":37,"line":10231},[35,110618,110619],{"class":359},"        total_reward ",[35,110621,9811],{"class":495},[35,110623,110624],{"class":359}," reward\n",[35,110626,110627],{"class":37,"line":10240},[35,110628,141],{"emptyLinePlaceholder":140},[35,110630,110631,110633,110635,110637,110639,110641,110643],{"class":37,"line":10246},[35,110632,2837],{"class":495},[35,110634,31942],{"class":359},[35,110636,823],{"class":495},[35,110638,6088],{"class":58},[35,110640,101881],{"class":495},[35,110642,4427],{"class":58},[35,110644,4073],{"class":359},[35,110646,110647,110649,110651,110654,110657,110660,110663,110665,110668,110671,110673,110675,110677,110679,110682,110684],{"class":37,"line":10254},[35,110648,34976],{"class":58},[35,110650,499],{"class":359},[35,110652,110653],{"class":306},"\"step:\"",[35,110655,110656],{"class":359},", step, ",[35,110658,110659],{"class":306},"\"obs:\"",[35,110661,110662],{"class":359},", np.round(obs, ",[35,110664,568],{"class":58},[35,110666,110667],{"class":359},"), ",[35,110669,110670],{"class":306},"\"action:\"",[35,110672,12769],{"class":359},[35,110674,32344],{"class":58},[35,110676,499],{"class":359},[35,110678,538],{"class":58},[35,110680,110681],{"class":359},"(action), ",[35,110683,568],{"class":58},[35,110685,30823],{"class":359},[35,110687,110688],{"class":37,"line":10259},[35,110689,141],{"emptyLinePlaceholder":140},[35,110691,110692,110694,110696,110699,110701,110703,110706,110708],{"class":37,"line":16938},[35,110693,31625],{"class":58},[35,110695,499],{"class":359},[35,110697,110698],{"class":306},"\"total_reward:\"",[35,110700,12769],{"class":359},[35,110702,32344],{"class":58},[35,110704,110705],{"class":359},"(total_reward, ",[35,110707,568],{"class":58},[35,110709,30823],{"class":359},[35,110711,110712,110714,110716,110719,110722,110724],{"class":37,"line":16944},[35,110713,31625],{"class":58},[35,110715,499],{"class":359},[35,110717,110718],{"class":306},"\"final obs:\"",[35,110720,110721],{"class":359},", np.round(get_observation(data), ",[35,110723,568],{"class":58},[35,110725,30823],{"class":359},[35,110727,110728],{"class":37,"line":16967},[35,110729,141],{"emptyLinePlaceholder":140},[35,110731,110732],{"class":37,"line":16973},[35,110733,141],{"emptyLinePlaceholder":140},[35,110735,110736,110738,110740,110742,110744],{"class":37,"line":16996},[35,110737,1892],{"class":495},[35,110739,31546],{"class":58},[35,110741,101881],{"class":495},[35,110743,101884],{"class":306},[35,110745,4073],{"class":359},[35,110747,110748],{"class":37,"line":17010},[35,110749,101891],{"class":359},[21,110751,103892],{},[25,110753,110755],{"className":24156,"code":110754,"language":24158,"meta":30,"style":30},"touch ch6_cartpole.py\n",[32,110756,110757],{"__ignoreMap":30},[35,110758,110759,110761],{"class":37,"line":38},[35,110760,113],{"class":48},[35,110762,110763],{"class":306}," ch6_cartpole.py\n",[21,110765,110766],{},"运行：",[25,110768,110770],{"className":24156,"code":110769,"language":24158,"meta":30,"style":30},"python ch6_cartpole.py\n",[32,110771,110772],{"__ignoreMap":30},[35,110773,110774,110776],{"class":37,"line":38},[35,110775,30706],{"class":48},[35,110777,110763],{"class":306},[465,110779,101894],{"id":101894},[21,110781,110782],{},"构造观测：",[25,110784,110786],{"className":30704,"code":110785,"language":30706,"meta":30,"style":30},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[32,110787,110788,110796],{"__ignoreMap":30},[35,110789,110790,110792,110794],{"class":37,"line":38},[35,110791,32273],{"class":495},[35,110793,110316],{"class":48},[35,110795,110319],{"class":359},[35,110797,110798,110800],{"class":37,"line":45},[35,110799,4424],{"class":495},[35,110801,110326],{"class":359},[21,110803,110804,110807,110808,110810,110811,110813],{},[32,110805,110806],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[32,110809,104352],{}," 2 维，",[32,110812,104682],{}," 2 维，所以 obs 是 4 维。",[21,110815,110816],{},"设置初始角度：",[25,110818,110820],{"className":30704,"code":110819,"language":30706,"meta":30,"style":30},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[32,110821,110822,110834],{"__ignoreMap":30},[35,110823,110824,110826,110828,110830,110832],{"class":37,"line":38},[35,110825,105021],{"class":359},[35,110827,713],{"class":58},[35,110829,4777],{"class":359},[35,110831,544],{"class":495},[35,110833,110462],{"class":58},[35,110835,110836],{"class":37,"line":45},[35,110837,104865],{"class":359},[21,110839,110840],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[21,110842,110843],{},"简单反馈控制：",[25,110845,110847],{"className":30704,"code":110846,"language":30706,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[32,110848,110849,110869],{"__ignoreMap":30},[35,110850,110851,110853,110855,110857,110859,110861,110863,110865,110867],{"class":37,"line":38},[35,110852,107764],{"class":359},[35,110854,544],{"class":495},[35,110856,110549],{"class":58},[35,110858,6852],{"class":495},[35,110860,110142],{"class":359},[35,110862,975],{"class":495},[35,110864,62193],{"class":58},[35,110866,6852],{"class":495},[35,110868,110562],{"class":359},[35,110870,110871,110873,110875,110877,110879,110881,110883,110885],{"class":37,"line":45},[35,110872,107764],{"class":359},[35,110874,544],{"class":495},[35,110876,107769],{"class":359},[35,110878,1026],{"class":495},[35,110880,102725],{"class":58},[35,110882,12769],{"class":359},[35,110884,102725],{"class":58},[35,110886,505],{"class":359},[21,110888,110889],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[21,110891,110892],{},"限制动作：",[25,110894,110896],{"className":30704,"code":110895,"language":30706,"meta":30,"style":30},"np.clip(action, -1.0, 1.0)\n",[32,110897,110898],{"__ignoreMap":30},[35,110899,110900,110903,110905,110907,110909,110911],{"class":37,"line":38},[35,110901,110902],{"class":359},"np.clip(action, ",[35,110904,1026],{"class":495},[35,110906,102725],{"class":58},[35,110908,12769],{"class":359},[35,110910,102725],{"class":58},[35,110912,505],{"class":359},[21,110914,110915,110916,110919],{},"因为 XML 里 ",[32,110917,110918],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[465,110921,102030],{"id":102030},[25,110923,110924],{"className":30704,"code":110785,"language":30706,"meta":30,"style":30},[32,110925,110926,110934],{"__ignoreMap":30},[35,110927,110928,110930,110932],{"class":37,"line":38},[35,110929,32273],{"class":495},[35,110931,110316],{"class":48},[35,110933,110319],{"class":359},[35,110935,110936,110938],{"class":37,"line":45},[35,110937,4424],{"class":495},[35,110939,110326],{"class":359},[21,110941,110942,110943,110946,110947,110950,110951,110954],{},"这段定义了一个函数，用来获取当前观测。",[32,110944,110945],{},"data.qpos.copy()"," 是位置数组副本，",[32,110948,110949],{},"data.qvel.copy()"," 是速度数组副本。",[32,110952,110953],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[21,110956,110957],{},"在本章模型里：",[25,110959,110962],{"className":110960,"code":110961,"language":5521,"meta":30},[5519],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[32,110963,110961],{"__ignoreMap":30},[21,110965,110966],{},"所以返回的 obs 是：",[25,110968,110971],{"className":110969,"code":110970,"language":5521,"meta":30},[5519],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[32,110972,110970],{"__ignoreMap":30},[25,110974,110976],{"className":30704,"code":110975,"language":30706,"meta":30,"style":30},"def compute_reward(obs: np.ndarray) -> float:\n",[32,110977,110978],{"__ignoreMap":30},[35,110979,110980,110982,110984,110986,110988],{"class":37,"line":38},[35,110981,32273],{"class":495},[35,110983,110341],{"class":48},[35,110985,110344],{"class":359},[35,110987,538],{"class":58},[35,110989,4073],{"class":359},[21,110991,110992,110993,110996],{},"这行定义奖励函数。输入是观测 ",[32,110994,110995],{},"obs","，输出是一个浮点数奖励。",[25,110998,111000],{"className":30704,"code":110999,"language":30706,"meta":30,"style":30},"cart_x = obs[0]\npole_angle = obs[1]\n",[32,111001,111002,111015],{"__ignoreMap":30},[35,111003,111004,111007,111009,111011,111013],{"class":37,"line":38},[35,111005,111006],{"class":359},"cart_x ",[35,111008,544],{"class":495},[35,111010,110358],{"class":359},[35,111012,687],{"class":58},[35,111014,33572],{"class":359},[35,111016,111017,111020,111022,111024,111026],{"class":37,"line":45},[35,111018,111019],{"class":359},"pole_angle ",[35,111021,544],{"class":495},[35,111023,110358],{"class":359},[35,111025,713],{"class":58},[35,111027,33572],{"class":359},[21,111029,111030,111031,111034,111035,111038],{},"数组索引从 0 开始。",[32,111032,111033],{},"obs[0]"," 是第一个元素，也就是小车位置。",[32,111036,111037],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[25,111040,111041],{"className":30704,"code":110110,"language":30706,"meta":30,"style":30},[32,111042,111043],{"__ignoreMap":30},[35,111044,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071],{"class":37,"line":38},[35,111046,17380],{"class":495},[35,111048,110119],{"class":58},[35,111050,499],{"class":359},[35,111052,102725],{"class":58},[35,111054,52597],{"class":495},[35,111056,110128],{"class":58},[35,111058,6852],{"class":495},[35,111060,110133],{"class":359},[35,111062,949],{"class":495},[35,111064,110133],{"class":359},[35,111066,1026],{"class":495},[35,111068,110142],{"class":359},[35,111070,949],{"class":495},[35,111072,110147],{"class":359},[21,111074,111075,111076,111079,111080,111083],{},"这行计算奖励。",[32,111077,111078],{},"cart_x * cart_x"," 是小车位置的平方，",[32,111081,111082],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[25,111085,111087],{"className":30704,"code":111086,"language":30706,"meta":30,"style":30},"data.qpos[1] = 0.1\n",[32,111088,111089],{"__ignoreMap":30},[35,111090,111091,111093,111095,111097,111099],{"class":37,"line":38},[35,111092,105021],{"class":359},[35,111094,713],{"class":58},[35,111096,4777],{"class":359},[35,111098,544],{"class":495},[35,111100,110462],{"class":58},[21,111102,111103,111104,111106,111107,111109],{},"手动设置杆子的初始角度。因为 ",[32,111105,105778],{}," 是小车位置，",[32,111108,105781],{}," 是杆子角度，所以这里改的是杆子。",[25,111111,111112],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},[32,111113,111114],{"__ignoreMap":30},[35,111115,111116],{"class":37,"line":38},[35,111117,104865],{"class":359},[21,111119,105824,111120,111122],{},[32,111121,104352],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[25,111124,111126],{"className":30704,"code":111125,"language":30706,"meta":30,"style":30},"total_reward = 0.0\n",[32,111127,111128],{"__ignoreMap":30},[35,111129,111130,111133,111135],{"class":37,"line":38},[35,111131,111132],{"class":359},"total_reward ",[35,111134,544],{"class":495},[35,111136,105083],{"class":58},[21,111138,111139],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[25,111141,111143],{"className":30704,"code":111142,"language":30706,"meta":30,"style":30},"for step in range(1000):\n",[32,111144,111145],{"__ignoreMap":30},[35,111146,111147,111149,111151,111153,111155,111157,111159],{"class":37,"line":38},[35,111148,3359],{"class":495},[35,111150,31942],{"class":359},[35,111152,26374],{"class":495},[35,111154,32769],{"class":58},[35,111156,499],{"class":359},[35,111158,6744],{"class":58},[35,111160,31112],{"class":359},[21,111162,111163,111164,111166],{},"循环 1000 步。",[32,111165,107456],{}," 是当前步数，从 0 到 999。",[25,111168,111170],{"className":30704,"code":111169,"language":30706,"meta":30,"style":30},"obs = get_observation(data)\n",[32,111171,111172],{"__ignoreMap":30},[35,111173,111174,111177,111179],{"class":37,"line":38},[35,111175,111176],{"class":359},"obs ",[35,111178,544],{"class":495},[35,111180,110509],{"class":359},[21,111182,111183,111184,28711],{},"读取当前状态，保存到 ",[32,111185,110995],{},[25,111187,111189],{"className":30704,"code":111188,"language":30706,"meta":30,"style":30},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[32,111190,111191,111203],{"__ignoreMap":30},[35,111192,111193,111195,111197,111199,111201],{"class":37,"line":38},[35,111194,111019],{"class":359},[35,111196,544],{"class":495},[35,111198,110358],{"class":359},[35,111200,713],{"class":58},[35,111202,33572],{"class":359},[35,111204,111205,111208,111210,111212,111214],{"class":37,"line":45},[35,111206,111207],{"class":359},"pole_angular_velocity ",[35,111209,544],{"class":495},[35,111211,110358],{"class":359},[35,111213,568],{"class":58},[35,111215,33572],{"class":359},[21,111217,111218,111219,111222,111223,28711],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[32,111220,111221],{},"obs[3]","？因为 obs 的顺序是 ",[32,111224,111225],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[25,111227,111229],{"className":30704,"code":111228,"language":30706,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[32,111230,111231],{"__ignoreMap":30},[35,111232,111233,111235,111237,111239,111241,111243,111245,111247,111249],{"class":37,"line":38},[35,111234,107764],{"class":359},[35,111236,544],{"class":495},[35,111238,110549],{"class":58},[35,111240,6852],{"class":495},[35,111242,110142],{"class":359},[35,111244,975],{"class":495},[35,111246,62193],{"class":58},[35,111248,6852],{"class":495},[35,111250,110562],{"class":359},[21,111252,111253,111254,101343,111256,111258],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[32,111255,105582],{},[32,111257,35655],{}," 是人为设置的系数，不是固定公式。",[25,111260,111262],{"className":30704,"code":111261,"language":30706,"meta":30,"style":30},"action = np.clip(action, -1.0, 1.0)\n",[32,111263,111264],{"__ignoreMap":30},[35,111265,111266,111268,111270,111272,111274,111276,111278,111280],{"class":37,"line":38},[35,111267,107764],{"class":359},[35,111269,544],{"class":495},[35,111271,107769],{"class":359},[35,111273,1026],{"class":495},[35,111275,102725],{"class":58},[35,111277,12769],{"class":359},[35,111279,102725],{"class":58},[35,111281,505],{"class":359},[21,111283,111284],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[25,111286,111287],{"className":30704,"code":110095,"language":30706,"meta":30,"style":30},[32,111288,111289],{"__ignoreMap":30},[35,111290,111291,111293,111295,111297,111299],{"class":37,"line":38},[35,111292,106193],{"class":359},[35,111294,687],{"class":58},[35,111296,4777],{"class":359},[35,111298,544],{"class":495},[35,111300,107792],{"class":359},[21,111302,111303],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[25,111305,111306],{"className":30704,"code":104827,"language":30706,"meta":30,"style":30},[32,111307,111308],{"__ignoreMap":30},[35,111309,111310],{"class":37,"line":38},[35,111311,104827],{"class":359},[21,111313,111314,111315,111317],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[32,111316,106448],{}," 计算小车和杆子的下一刻状态。",[25,111319,111321],{"className":30704,"code":111320,"language":30706,"meta":30,"style":30},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[32,111322,111323,111332],{"__ignoreMap":30},[35,111324,111325,111328,111330],{"class":37,"line":38},[35,111326,111327],{"class":359},"reward ",[35,111329,544],{"class":495},[35,111331,110614],{"class":359},[35,111333,111334,111336,111338],{"class":37,"line":45},[35,111335,111132],{"class":359},[35,111337,9811],{"class":495},[35,111339,110624],{"class":359},[21,111341,111342,111343,111345,111346,111349,111350,28711],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[32,111344,9811],{}," 是简写，",[32,111347,111348],{},"total_reward += reward"," 等价于 ",[32,111351,111352],{},"total_reward = total_reward + reward",[25,111354,111356],{"className":30704,"code":111355,"language":30706,"meta":30,"style":30},"if step % 100 == 0:\n",[32,111357,111358],{"__ignoreMap":30},[35,111359,111360,111362,111364,111366,111368,111370,111372],{"class":37,"line":38},[35,111361,1892],{"class":495},[35,111363,31942],{"class":359},[35,111365,823],{"class":495},[35,111367,6088],{"class":58},[35,111369,101881],{"class":495},[35,111371,4427],{"class":58},[35,111373,4073],{"class":359},[21,111375,111376,111378,111379,111382],{},[32,111377,823],{}," 是取余数。",[32,111380,111381],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[25,111384,111386],{"className":30704,"code":111385,"language":30706,"meta":30,"style":30},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[32,111387,111388],{"__ignoreMap":30},[35,111389,111390,111392,111394,111396,111398,111400,111402,111404,111406,111408,111410,111412,111414,111416,111418,111420],{"class":37,"line":38},[35,111391,30741],{"class":58},[35,111393,499],{"class":359},[35,111395,110653],{"class":306},[35,111397,110656],{"class":359},[35,111399,110659],{"class":306},[35,111401,110662],{"class":359},[35,111403,568],{"class":58},[35,111405,110667],{"class":359},[35,111407,110670],{"class":306},[35,111409,12769],{"class":359},[35,111411,32344],{"class":58},[35,111413,499],{"class":359},[35,111415,538],{"class":58},[35,111417,110681],{"class":359},[35,111419,568],{"class":58},[35,111421,30823],{"class":359},[21,111423,111424,111425,111428,111429,111432],{},"打印当前步数、观测和动作。",[32,111426,111427],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[32,111430,111431],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[438,111434,102638],{"id":102637},[21,111436,111437],{},"观测向量:",[25,111439,111442],{"className":111440,"code":111441,"language":5521,"meta":30},[5519],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,111443,111441],{"__ignoreMap":30},[21,111445,111446],{},"控制器是教学用的简单线性反馈，不保证最优。",[21,111448,111449],{},"每隔 100 步会打印一次：",[25,111451,111454],{"className":111452,"code":111453,"language":5521,"meta":30},[5519],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[32,111455,111453],{"__ignoreMap":30},[21,111457,111458],{},"重点观察：",[14,111460,111461,111467,111472],{},[17,111462,111463,111466],{},[32,111464,111465],{},"pole_angle"," 是否越来越大。",[17,111468,111469,111471],{},[32,111470,110048],{}," 是否跑得太远。",[17,111473,111474,111475,82864,111477,28711],{},"action 是否经常被 clip 到 ",[32,111476,104237],{},[32,111478,713],{},[21,111480,111481],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[438,111483,102670],{"id":102669},[14,111485,111486,111492,111495,111501,111511,111517,111520],{},[17,111487,111488,111489,28711],{},"把初始角度改为 ",[32,111490,111491],{},"data.qpos[1] = 0.3",[17,111493,111494],{},"重新运行，观察控制是否变差。",[17,111496,111497,111498,111500],{},"把 actuator ",[32,111499,107389],{}," 改小。",[17,111502,111503,111504,111507,111508,28711],{},"打印 ",[32,111505,111506],{},"model.nq, model.nv, model.nu","，应为 ",[32,111509,111510],{},"2 2 1",[17,111512,111513,111514,111516],{},"把 reward 里的 ",[32,111515,111082],{}," 系数改大，观察总奖励变化。",[17,111518,111519],{},"把控制器改成反号，观察杆子是否更容易倒。",[17,111521,111522],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[438,111524,102775],{"id":102774},[465,111526,111527],{"id":111527},"杆子方向和预期不一致",[21,111529,102718,111530,111532,111533,111535],{},[32,111531,106561],{}," 和 capsule 的 ",[32,111534,103498],{},"，必要时用 viewer 可视化确认。",[465,111537,111538],{"id":111538},"控制器越控越倒",[21,111540,111541],{},"说明反馈符号可能反了，尝试:",[25,111543,111545],{"className":30704,"code":111544,"language":30706,"meta":30,"style":30},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[32,111546,111547],{"__ignoreMap":30},[35,111548,111549,111551,111553,111555,111557,111559,111561,111563,111565,111567],{"class":37,"line":38},[35,111550,107764],{"class":359},[35,111552,544],{"class":495},[35,111554,52597],{"class":495},[35,111556,105582],{"class":58},[35,111558,6852],{"class":495},[35,111560,110142],{"class":359},[35,111562,1026],{"class":495},[35,111564,62193],{"class":58},[35,111566,6852],{"class":495},[35,111568,110562],{"class":359},[465,111570,111571],{"id":111571},"小车飞走",[21,111573,111574,111575,111577,111578,111581],{},"降低 ",[32,111576,107389],{}," 或缩小 ",[32,111579,111580],{},"action"," 的 clip 范围。",[465,111583,111585,111587],{"id":111584},"obs3-为什么是杆子角速度",[32,111586,111221],{}," 为什么是杆子角速度",[21,111589,111590],{},"因为这个模型里：",[25,111592,111595],{"className":111593,"code":111594,"language":5521,"meta":30},[5519],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[32,111596,111594],{"__ignoreMap":30},[21,111598,110069],{},[25,111600,111603],{"className":111601,"code":111602,"language":5521,"meta":30},[5519],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[32,111604,111602],{"__ignoreMap":30},[465,111606,111608],{"id":111607},"reward-变成负数是否错误","reward 变成负数是否错误",[21,111610,111611],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[438,111613,102929],{"id":102928},[21,111615,111616],{},"一个控制任务通常包含：",[14,111618,111619,111622,111630,111635,111638],{},[17,111620,111621],{},"模型：Cartpole 的 body、joint、actuator。",[17,111623,111624,111625,708,111627,111629],{},"观测：从 ",[32,111626,104352],{},[32,111628,104682],{}," 里取状态。",[17,111631,111632,111633,28711],{},"动作：写入 ",[32,111634,101401],{},[17,111636,111637],{},"奖励：根据任务目标打分。",[17,111639,111640],{},"循环：obs -> action -> step -> reward。",[21,111642,111643],{},"这就是后面 Gymnasium 环境的基本骨架。",[416,111645,104608],{},{"title":30,"searchDepth":45,"depth":45,"links":111647},[111648,111649,111650,111655,111659,111660,111661,111669],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":111651},[111652,111653,111654],{"id":110022,"depth":55,"text":110023},{"id":110087,"depth":55,"text":110088},{"id":110103,"depth":55,"text":110104},{"id":101577,"depth":45,"text":101578,"children":111656},[111657,111658],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":111662},[111663,111664,111665,111666,111668],{"id":111527,"depth":55,"text":111527},{"id":111538,"depth":55,"text":111538},{"id":111571,"depth":55,"text":111571},{"id":111584,"depth":55,"text":111667},"obs[3] 为什么是杆子角速度",{"id":111607,"depth":55,"text":111608},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109758,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111676,"title":111677,"body":111678,"description":30,"extension":422,"meta":113692,"navigation":140,"path":113693,"seo":113694,"stem":113695,"__hash__":113696},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111679,"toc":113668},[111680,111683,111685,111688,111690,111707,111710,111713,111719,111722,111724,111726,111750,111752,111766,111768,111809,111811,111829,111831,111834,111840,111843,111871,111875,111881,111906,111909,111940,111947,111950,111953,111959,111962,111968,111971,111977,111981,111984,112009,112012,112014,112774,112776,112788,112790,112801,112803,112806,112823,112826,112828,112839,112842,112844,112890,112893,112906,112909,112991,112994,112996,113012,113022,113035,113038,113077,113087,113098,113108,113121,113124,113153,113156,113166,113169,113175,113192,113203,113205,113211,113228,113239,113260,113263,113275,113278,113299,113302,113310,113318,113335,113338,113407,113414,113422,113425,113438,113445,113447,113450,113456,113459,113462,113468,113474,113476,113516,113518,113524,113533,113536,113538,113558,113561,113564,113570,113574,113576,113603,113606,113609,113636,113642,113645,113648,113650,113653,113656,113662,113665],[10,111681,111677],{"id":111682},"_7控制任务reacher-机械臂到达目标",[438,111684,100972],{"id":100971},[21,111686,111687],{},"本章搭建一个二维两关节 reacher 任务。",[21,111689,104653],{},[14,111691,111692,111695,111698,111701,111704],{},[17,111693,111694],{},"两个 hinge joint",[17,111696,111697],{},"两个 motor actuator",[17,111699,111700],{},"site 作为末端点和目标点",[17,111702,111703],{},"根据末端和目标距离设计 reward",[17,111705,111706],{},"构造机械臂任务的基本形式",[21,111708,111709],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[21,111711,111712],{},"Reacher 任务可以理解为：",[25,111714,111717],{"className":111715,"code":111716,"language":5521,"meta":30},[5519],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[32,111718,111716],{"__ignoreMap":30},[21,111720,111721],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[438,111723,101095],{"id":101094},[21,111725,101098],{},[25,111727,111728],{"className":24156,"code":104710,"language":24158,"meta":30,"style":30},[32,111729,111730],{"__ignoreMap":30},[35,111731,111732,111734,111736,111738,111740,111742,111744,111746,111748],{"class":37,"line":38},[35,111733,171],{"class":48},[35,111735,26645],{"class":306},[35,111737,318],{"class":306},[35,111739,26730],{"class":58},[35,111741,104725],{"class":306},[35,111743,101123],{"class":306},[35,111745,102823],{"class":306},[35,111747,101139],{"class":306},[35,111749,104734],{"class":306},[21,111751,103141],{},[25,111753,111754],{"className":24156,"code":101244,"language":24158,"meta":30,"style":30},[32,111755,111756],{"__ignoreMap":30},[35,111757,111758,111760,111762,111764],{"class":37,"line":38},[35,111759,24165],{"class":48},[35,111761,318],{"class":306},[35,111763,101255],{"class":306},[35,111765,101258],{"class":306},[21,111767,103158],{},[25,111769,111771],{"className":24156,"code":111770,"language":24158,"meta":30,"style":30},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[32,111772,111773,111790,111799],{"__ignoreMap":30},[35,111774,111775,111777,111779,111781,111784,111786,111788],{"class":37,"line":38},[35,111776,30656],{"class":48},[35,111778,29502],{"class":306},[35,111780,25447],{"class":58},[35,111782,111783],{"class":306}," mujoco-reacher",[35,111785,101300],{"class":306},[35,111787,101303],{"class":58},[35,111789,101306],{"class":58},[35,111791,111792,111794,111796],{"class":37,"line":45},[35,111793,30656],{"class":48},[35,111795,101313],{"class":306},[35,111797,111798],{"class":306}," mujoco-reacher\n",[35,111800,111801,111803,111805,111807],{"class":37,"line":55},[35,111802,24165],{"class":48},[35,111804,318],{"class":306},[35,111806,101255],{"class":306},[35,111808,101258],{"class":306},[21,111810,101329],{},[14,111812,111813,111816,111819],{},[17,111814,111815],{},"本章使用低维状态，不使用图像输入。",[17,111817,111818],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[17,111820,111821,111822,708,111824,708,111826,111828],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[32,111823,104352],{},[32,111825,104682],{},[32,111827,104002],{}," 的方法一致。",[438,111830,101370],{"id":101369},[21,111832,111833],{},"Reacher 任务核心:",[25,111835,111838],{"className":111836,"code":111837,"language":5521,"meta":30},[5519],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[32,111839,111837],{"__ignoreMap":30},[21,111841,111842],{},"读取 site 世界坐标:",[25,111844,111846],{"className":30704,"code":111845,"language":30706,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[32,111847,111848,111861],{"__ignoreMap":30},[35,111849,111850,111852,111854,111856,111859],{"class":37,"line":38},[35,111851,103956],{"class":359},[35,111853,544],{"class":495},[35,111855,103727],{"class":359},[35,111857,111858],{"class":306},"\"tip\"",[35,111860,505],{"class":359},[35,111862,111863,111866,111868],{"class":37,"line":45},[35,111864,111865],{"class":359},"tip_pos ",[35,111867,544],{"class":495},[35,111869,111870],{"class":359}," data.site_xpos[site_id]\n",[465,111872,111874],{"id":111873},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[21,111876,111877,111878,111880],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[32,111879,104352],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[25,111882,111884],{"className":30704,"code":111883,"language":30706,"meta":30,"style":30},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[32,111885,111886,111896],{"__ignoreMap":30},[35,111887,111888,111891,111893],{"class":37,"line":38},[35,111889,111890],{"class":359},"tip ",[35,111892,544],{"class":495},[35,111894,111895],{"class":359}," data.site_xpos[tip_site_id]\n",[35,111897,111898,111901,111903],{"class":37,"line":45},[35,111899,111900],{"class":359},"target ",[35,111902,544],{"class":495},[35,111904,111905],{"class":359}," data.site_xpos[target_site_id]\n",[21,111907,111908],{},"这样 reward 就很容易写：",[25,111910,111912],{"className":30704,"code":111911,"language":30706,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[32,111913,111914,111929],{"__ignoreMap":30},[35,111915,111916,111919,111921,111924,111926],{"class":37,"line":38},[35,111917,111918],{"class":359},"dist ",[35,111920,544],{"class":495},[35,111922,111923],{"class":359}," np.linalg.norm(tip ",[35,111925,1026],{"class":495},[35,111927,111928],{"class":359}," target)\n",[35,111930,111931,111933,111935,111937],{"class":37,"line":45},[35,111932,111327],{"class":359},[35,111934,544],{"class":495},[35,111936,52597],{"class":495},[35,111938,111939],{"class":359},"dist\n",[21,111941,111942,111943,111946],{},"距离越小，",[32,111944,111945],{},"-dist"," 越接近 0，奖励越高。",[465,111948,111949],{"id":111949},"两关节机械臂的状态",[21,111951,111952],{},"这个模型有两个 hinge joint：",[25,111954,111957],{"className":111955,"code":111956,"language":5521,"meta":30},[5519],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[32,111958,111956],{"__ignoreMap":30},[21,111960,111961],{},"再加上末端和目标位置：",[25,111963,111966],{"className":111964,"code":111965,"language":5521,"meta":30},[5519],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[32,111967,111965],{"__ignoreMap":30},[21,111969,111970],{},"总维度：",[25,111972,111975],{"className":111973,"code":111974,"language":5521,"meta":30},[5519],"2 + 2 + 3 + 3 = 10\n",[32,111976,111974],{"__ignoreMap":30},[465,111978,111980],{"id":111979},"为什么-gravity-是-0","为什么 gravity 是 0",[21,111982,111983],{},"本章把重力设为：",[25,111985,111987],{"className":53393,"code":111986,"language":53395,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[32,111988,111989],{"__ignoreMap":30},[35,111990,111991,111993,111995,111997,111999,112001,112003,112005,112007],{"class":37,"line":38},[35,111992,1404],{"class":359},[35,111994,69492],{"class":51626},[35,111996,101519],{"class":48},[35,111998,544],{"class":359},[35,112000,101524],{"class":306},[35,112002,101527],{"class":48},[35,112004,544],{"class":359},[35,112006,104093],{"class":306},[35,112008,101469],{"class":359},[21,112010,112011],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[438,112013,101578],{"id":101577},[25,112015,112017],{"className":30704,"code":112016,"language":30706,"meta":30,"style":30},"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",[32,112018,112019,112025,112035,112039,112043,112051,112056,112061,112065,112069,112074,112079,112083,112088,112093,112098,112102,112107,112112,112117,112122,112126,112130,112134,112138,112142,112147,112152,112156,112160,112164,112168,112172,112187,112196,112208,112231,112238,112242,112246,112256,112270,112284,112291,112295,112299,112313,112325,112337,112350,112365,112382,112386,112390,112402,112414,112422,112430,112434,112450,112455,112468,112481,112496,112500,112535,112567,112571,112575,112584,112588,112604,112614,112625,112641,112657,112673,112689,112693,112711,112731,112750,112754,112758,112770],{"__ignoreMap":30},[35,112020,112021,112023],{"class":37,"line":38},[35,112022,30718],{"class":495},[35,112024,101623],{"class":359},[35,112026,112027,112029,112031,112033],{"class":37,"line":45},[35,112028,30718],{"class":495},[35,112030,31706],{"class":359},[35,112032,31709],{"class":495},[35,112034,31712],{"class":359},[35,112036,112037],{"class":37,"line":55},[35,112038,141],{"emptyLinePlaceholder":140},[35,112040,112041],{"class":37,"line":65},[35,112042,141],{"emptyLinePlaceholder":140},[35,112044,112045,112047,112049],{"class":37,"line":74},[35,112046,101636],{"class":58},[35,112048,13898],{"class":495},[35,112050,101641],{"class":306},[35,112052,112053],{"class":37,"line":83},[35,112054,112055],{"class":306},"\u003Cmujoco model=\"two_link_reacher\">\n",[35,112057,112058],{"class":37,"line":92},[35,112059,112060],{"class":306},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[35,112062,112063],{"class":37,"line":101},[35,112064,141],{"emptyLinePlaceholder":140},[35,112066,112067],{"class":37,"line":110},[35,112068,101660],{"class":306},[35,112070,112071],{"class":37,"line":119},[35,112072,112073],{"class":306},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[35,112075,112076],{"class":37,"line":128},[35,112077,112078],{"class":306},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[35,112080,112081],{"class":37,"line":137},[35,112082,141],{"emptyLinePlaceholder":140},[35,112084,112085],{"class":37,"line":144},[35,112086,112087],{"class":306},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[35,112089,112090],{"class":37,"line":150},[35,112091,112092],{"class":306},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[35,112094,112095],{"class":37,"line":159},[35,112096,112097],{"class":306},"      \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",[35,112099,112100],{"class":37,"line":168},[35,112101,141],{"emptyLinePlaceholder":140},[35,112103,112104],{"class":37,"line":177},[35,112105,112106],{"class":306},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[35,112108,112109],{"class":37,"line":182},[35,112110,112111],{"class":306},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[35,112113,112114],{"class":37,"line":188},[35,112115,112116],{"class":306},"        \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",[35,112118,112119],{"class":37,"line":197},[35,112120,112121],{"class":306},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[35,112123,112124],{"class":37,"line":206},[35,112125,106760],{"class":306},[35,112127,112128],{"class":37,"line":215},[35,112129,101689],{"class":306},[35,112131,112132],{"class":37,"line":224},[35,112133,101694],{"class":306},[35,112135,112136],{"class":37,"line":233},[35,112137,141],{"emptyLinePlaceholder":140},[35,112139,112140],{"class":37,"line":238},[35,112141,106777],{"class":306},[35,112143,112144],{"class":37,"line":244},[35,112145,112146],{"class":306},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[35,112148,112149],{"class":37,"line":253},[35,112150,112151],{"class":306},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[35,112153,112154],{"class":37,"line":262},[35,112155,106787],{"class":306},[35,112157,112158],{"class":37,"line":271},[35,112159,101699],{"class":306},[35,112161,112162],{"class":37,"line":280},[35,112163,96023],{"class":306},[35,112165,112166],{"class":37,"line":289},[35,112167,141],{"emptyLinePlaceholder":140},[35,112169,112170],{"class":37,"line":294},[35,112171,141],{"emptyLinePlaceholder":140},[35,112173,112174,112176,112179,112182,112184],{"class":37,"line":300},[35,112175,32273],{"class":495},[35,112177,112178],{"class":48}," site_position",[35,112180,112181],{"class":359},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[35,112183,1664],{"class":58},[35,112185,112186],{"class":359},") -> np.ndarray:\n",[35,112188,112189,112191,112193],{"class":37,"line":313},[35,112190,103722],{"class":359},[35,112192,544],{"class":495},[35,112194,112195],{"class":359}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[35,112197,112198,112200,112202,112204,112206],{"class":37,"line":324},[35,112199,3435],{"class":495},[35,112201,103771],{"class":359},[35,112203,1404],{"class":495},[35,112205,4427],{"class":58},[35,112207,4073],{"class":359},[35,112209,112210,112212,112214,112216,112218,112221,112223,112225,112227,112229],{"class":37,"line":2955},[35,112211,103754],{"class":495},[35,112213,103757],{"class":58},[35,112215,499],{"class":359},[35,112217,550],{"class":495},[35,112219,112220],{"class":306},"\"site not found: ",[35,112222,1390],{"class":58},[35,112224,80135],{"class":359},[35,112226,1440],{"class":58},[35,112228,747],{"class":306},[35,112230,505],{"class":359},[35,112232,112233,112235],{"class":37,"line":8282},[35,112234,4424],{"class":495},[35,112236,112237],{"class":359}," data.site_xpos[site_id].copy()\n",[35,112239,112240],{"class":37,"line":8306},[35,112241,141],{"emptyLinePlaceholder":140},[35,112243,112244],{"class":37,"line":8311},[35,112245,141],{"emptyLinePlaceholder":140},[35,112247,112248,112250,112253],{"class":37,"line":8317},[35,112249,32273],{"class":495},[35,112251,112252],{"class":48}," get_obs",[35,112254,112255],{"class":359},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[35,112257,112258,112261,112263,112266,112268],{"class":37,"line":8344},[35,112259,112260],{"class":359},"    tip ",[35,112262,544],{"class":495},[35,112264,112265],{"class":359}," site_position(model, data, ",[35,112267,111858],{"class":306},[35,112269,505],{"class":359},[35,112271,112272,112275,112277,112279,112282],{"class":37,"line":8349},[35,112273,112274],{"class":359},"    target ",[35,112276,544],{"class":495},[35,112278,112265],{"class":359},[35,112280,112281],{"class":306},"\"target\"",[35,112283,505],{"class":359},[35,112285,112286,112288],{"class":37,"line":8355},[35,112287,4424],{"class":495},[35,112289,112290],{"class":359}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[35,112292,112293],{"class":37,"line":8367},[35,112294,141],{"emptyLinePlaceholder":140},[35,112296,112297],{"class":37,"line":8379},[35,112298,141],{"emptyLinePlaceholder":140},[35,112300,112301,112303,112306,112309,112311],{"class":37,"line":8391},[35,112302,32273],{"class":495},[35,112304,112305],{"class":48}," reward",[35,112307,112308],{"class":359},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[35,112310,538],{"class":58},[35,112312,4073],{"class":359},[35,112314,112315,112317,112319,112321,112323],{"class":37,"line":10050},[35,112316,112260],{"class":359},[35,112318,544],{"class":495},[35,112320,112265],{"class":359},[35,112322,111858],{"class":306},[35,112324,505],{"class":359},[35,112326,112327,112329,112331,112333,112335],{"class":37,"line":10075},[35,112328,112274],{"class":359},[35,112330,544],{"class":495},[35,112332,112265],{"class":359},[35,112334,112281],{"class":306},[35,112336,505],{"class":359},[35,112338,112339,112342,112344,112346,112348],{"class":37,"line":10098},[35,112340,112341],{"class":359},"    dist ",[35,112343,544],{"class":495},[35,112345,111923],{"class":359},[35,112347,1026],{"class":495},[35,112349,111928],{"class":359},[35,112351,112352,112355,112357,112360,112362],{"class":37,"line":10122},[35,112353,112354],{"class":359},"    control_cost ",[35,112356,544],{"class":495},[35,112358,112359],{"class":58}," 0.01",[35,112361,6852],{"class":495},[35,112363,112364],{"class":359}," np.sum(np.square(data.ctrl))\n",[35,112366,112367,112369,112371,112373,112375,112377,112379],{"class":37,"line":10127},[35,112368,4424],{"class":495},[35,112370,110119],{"class":58},[35,112372,499],{"class":359},[35,112374,1026],{"class":495},[35,112376,111918],{"class":359},[35,112378,1026],{"class":495},[35,112380,112381],{"class":359}," control_cost)\n",[35,112383,112384],{"class":37,"line":10132},[35,112385,141],{"emptyLinePlaceholder":140},[35,112387,112388],{"class":37,"line":10137},[35,112389,141],{"emptyLinePlaceholder":140},[35,112391,112392,112394,112396,112398,112400],{"class":37,"line":10146},[35,112393,32273],{"class":495},[35,112395,2314],{"class":48},[35,112397,101720],{"class":359},[35,112399,96011],{"class":58},[35,112401,4073],{"class":359},[35,112403,112404,112406,112408,112410,112412],{"class":37,"line":10151},[35,112405,101729],{"class":359},[35,112407,544],{"class":495},[35,112409,101734],{"class":359},[35,112411,101636],{"class":58},[35,112413,505],{"class":359},[35,112415,112416,112418,112420],{"class":37,"line":10157},[35,112417,101743],{"class":359},[35,112419,544],{"class":495},[35,112421,101748],{"class":359},[35,112423,112424,112426,112428],{"class":37,"line":10178},[35,112425,110475],{"class":359},[35,112427,544],{"class":495},[35,112429,105083],{"class":58},[35,112431,112432],{"class":37,"line":10184},[35,112433,141],{"emptyLinePlaceholder":140},[35,112435,112436,112438,112440,112442,112444,112446,112448],{"class":37,"line":10198},[35,112437,3535],{"class":495},[35,112439,31942],{"class":359},[35,112441,26374],{"class":495},[35,112443,32769],{"class":58},[35,112445,499],{"class":359},[35,112447,65400],{"class":58},[35,112449,31112],{"class":359},[35,112451,112452],{"class":37,"line":10204},[35,112453,112454],{"class":359},"        mujoco.mj_forward(model, data)\n",[35,112456,112457,112460,112462,112464,112466],{"class":37,"line":10231},[35,112458,112459],{"class":359},"        tip ",[35,112461,544],{"class":495},[35,112463,112265],{"class":359},[35,112465,111858],{"class":306},[35,112467,505],{"class":359},[35,112469,112470,112473,112475,112477,112479],{"class":37,"line":10240},[35,112471,112472],{"class":359},"        target ",[35,112474,544],{"class":495},[35,112476,112265],{"class":359},[35,112478,112281],{"class":306},[35,112480,505],{"class":359},[35,112482,112483,112486,112488,112491,112493],{"class":37,"line":10246},[35,112484,112485],{"class":359},"        error ",[35,112487,544],{"class":495},[35,112489,112490],{"class":359}," target ",[35,112492,1026],{"class":495},[35,112494,112495],{"class":359}," tip\n",[35,112497,112498],{"class":37,"line":10254},[35,112499,141],{"emptyLinePlaceholder":140},[35,112501,112502,112504,112506,112508,112510,112513,112515,112517,112520,112522,112525,112527,112529,112531,112533],{"class":37,"line":10259},[35,112503,106939],{"class":359},[35,112505,687],{"class":58},[35,112507,4777],{"class":359},[35,112509,544],{"class":495},[35,112511,112512],{"class":359}," np.clip(",[35,112514,105582],{"class":58},[35,112516,6852],{"class":495},[35,112518,112519],{"class":359}," error[",[35,112521,574],{"class":58},[35,112523,112524],{"class":359},"], ",[35,112526,1026],{"class":495},[35,112528,102725],{"class":58},[35,112530,12769],{"class":359},[35,112532,102725],{"class":58},[35,112534,505],{"class":359},[35,112536,112537,112539,112541,112543,112545,112547,112549,112551,112553,112555,112557,112559,112561,112563,112565],{"class":37,"line":16938},[35,112538,106939],{"class":359},[35,112540,713],{"class":58},[35,112542,4777],{"class":359},[35,112544,544],{"class":495},[35,112546,112512],{"class":359},[35,112548,105582],{"class":58},[35,112550,6852],{"class":495},[35,112552,112519],{"class":359},[35,112554,687],{"class":58},[35,112556,112524],{"class":359},[35,112558,1026],{"class":495},[35,112560,102725],{"class":58},[35,112562,12769],{"class":359},[35,112564,102725],{"class":58},[35,112566,505],{"class":359},[35,112568,112569],{"class":37,"line":16944},[35,112570,141],{"emptyLinePlaceholder":140},[35,112572,112573],{"class":37,"line":16967},[35,112574,101838],{"class":359},[35,112576,112577,112579,112581],{"class":37,"line":16973},[35,112578,110619],{"class":359},[35,112580,9811],{"class":495},[35,112582,112583],{"class":359}," reward(model, data)\n",[35,112585,112586],{"class":37,"line":16996},[35,112587,141],{"emptyLinePlaceholder":140},[35,112589,112590,112592,112594,112596,112598,112600,112602],{"class":37,"line":17010},[35,112591,2837],{"class":495},[35,112593,31942],{"class":359},[35,112595,823],{"class":495},[35,112597,6088],{"class":58},[35,112599,101881],{"class":495},[35,112601,4427],{"class":58},[35,112603,4073],{"class":359},[35,112605,112606,112609,112611],{"class":37,"line":17030},[35,112607,112608],{"class":359},"            obs ",[35,112610,544],{"class":495},[35,112612,112613],{"class":359}," get_obs(model, data)\n",[35,112615,112616,112618,112620,112622],{"class":37,"line":17036},[35,112617,34976],{"class":58},[35,112619,499],{"class":359},[35,112621,110653],{"class":306},[35,112623,112624],{"class":359},", step)\n",[35,112626,112627,112629,112631,112634,112637,112639],{"class":37,"line":17047},[35,112628,34976],{"class":58},[35,112630,499],{"class":359},[35,112632,112633],{"class":306},"\"  tip:\"",[35,112635,112636],{"class":359},", np.round(tip, ",[35,112638,568],{"class":58},[35,112640,30823],{"class":359},[35,112642,112643,112645,112647,112650,112653,112655],{"class":37,"line":17070},[35,112644,34976],{"class":58},[35,112646,499],{"class":359},[35,112648,112649],{"class":306},"\"  target:\"",[35,112651,112652],{"class":359},", np.round(target, ",[35,112654,568],{"class":58},[35,112656,30823],{"class":359},[35,112658,112659,112661,112663,112666,112669,112671],{"class":37,"line":17092},[35,112660,34976],{"class":58},[35,112662,499],{"class":359},[35,112664,112665],{"class":306},"\"  ctrl:\"",[35,112667,112668],{"class":359},", np.round(data.ctrl.copy(), ",[35,112670,568],{"class":58},[35,112672,30823],{"class":359},[35,112674,112675,112677,112679,112682,112685,112687],{"class":37,"line":17097},[35,112676,34976],{"class":58},[35,112678,499],{"class":359},[35,112680,112681],{"class":306},"\"  obs_dim:\"",[35,112683,112684],{"class":359},", obs.shape[",[35,112686,687],{"class":58},[35,112688,4991],{"class":359},[35,112690,112691],{"class":37,"line":17103},[35,112692,141],{"emptyLinePlaceholder":140},[35,112694,112695,112697,112699,112701,112703,112705,112707,112709],{"class":37,"line":17117},[35,112696,31625],{"class":58},[35,112698,499],{"class":359},[35,112700,110698],{"class":306},[35,112702,12769],{"class":359},[35,112704,32344],{"class":58},[35,112706,110705],{"class":359},[35,112708,568],{"class":58},[35,112710,30823],{"class":359},[35,112712,112713,112715,112717,112720,112723,112725,112727,112729],{"class":37,"line":17130},[35,112714,31625],{"class":58},[35,112716,499],{"class":359},[35,112718,112719],{"class":306},"\"final tip:\"",[35,112721,112722],{"class":359},", np.round(site_position(model, data, ",[35,112724,111858],{"class":306},[35,112726,110667],{"class":359},[35,112728,568],{"class":58},[35,112730,30823],{"class":359},[35,112732,112733,112735,112737,112740,112742,112744,112746,112748],{"class":37,"line":17135},[35,112734,31625],{"class":58},[35,112736,499],{"class":359},[35,112738,112739],{"class":306},"\"target:\"",[35,112741,112722],{"class":359},[35,112743,112281],{"class":306},[35,112745,110667],{"class":359},[35,112747,568],{"class":58},[35,112749,30823],{"class":359},[35,112751,112752],{"class":37,"line":17149},[35,112753,141],{"emptyLinePlaceholder":140},[35,112755,112756],{"class":37,"line":17154},[35,112757,141],{"emptyLinePlaceholder":140},[35,112759,112760,112762,112764,112766,112768],{"class":37,"line":17160},[35,112761,1892],{"class":495},[35,112763,31546],{"class":58},[35,112765,101881],{"class":495},[35,112767,101884],{"class":306},[35,112769,4073],{"class":359},[35,112771,112772],{"class":37,"line":17165},[35,112773,101891],{"class":359},[21,112775,103892],{},[25,112777,112779],{"className":24156,"code":112778,"language":24158,"meta":30,"style":30},"touch ch7_reacher.py\n",[32,112780,112781],{"__ignoreMap":30},[35,112782,112783,112785],{"class":37,"line":38},[35,112784,113],{"class":48},[35,112786,112787],{"class":306}," ch7_reacher.py\n",[21,112789,110766],{},[25,112791,112793],{"className":24156,"code":112792,"language":24158,"meta":30,"style":30},"python ch7_reacher.py\n",[32,112794,112795],{"__ignoreMap":30},[35,112796,112797,112799],{"class":37,"line":38},[35,112798,30706],{"class":48},[35,112800,112787],{"class":306},[465,112802,101894],{"id":101894},[21,112804,112805],{},"读取 site 坐标：",[25,112807,112809],{"className":30704,"code":112808,"language":30706,"meta":30,"style":30},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[32,112810,112811],{"__ignoreMap":30},[35,112812,112813,112815,112817,112819,112821],{"class":37,"line":38},[35,112814,32273],{"class":495},[35,112816,112178],{"class":48},[35,112818,112181],{"class":359},[35,112820,1664],{"class":58},[35,112822,112186],{"class":359},[21,112824,112825],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[21,112827,110782],{},[25,112829,112831],{"className":30704,"code":112830,"language":30706,"meta":30,"style":30},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[32,112832,112833],{"__ignoreMap":30},[35,112834,112835,112837],{"class":37,"line":38},[35,112836,17380],{"class":495},[35,112838,112290],{"class":359},[21,112840,112841],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[21,112843,110107],{},[25,112845,112847],{"className":30704,"code":112846,"language":30706,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[32,112848,112849,112861,112874],{"__ignoreMap":30},[35,112850,112851,112853,112855,112857,112859],{"class":37,"line":38},[35,112852,111918],{"class":359},[35,112854,544],{"class":495},[35,112856,111923],{"class":359},[35,112858,1026],{"class":495},[35,112860,111928],{"class":359},[35,112862,112863,112866,112868,112870,112872],{"class":37,"line":45},[35,112864,112865],{"class":359},"control_cost ",[35,112867,544],{"class":495},[35,112869,112359],{"class":58},[35,112871,6852],{"class":495},[35,112873,112364],{"class":359},[35,112875,112876,112878,112880,112882,112884,112886,112888],{"class":37,"line":55},[35,112877,17380],{"class":495},[35,112879,110119],{"class":58},[35,112881,499],{"class":359},[35,112883,1026],{"class":495},[35,112885,111918],{"class":359},[35,112887,1026],{"class":495},[35,112889,112381],{"class":359},[21,112891,112892],{},"奖励由两部分组成：",[14,112894,112895,112900],{},[17,112896,112897,112899],{},[32,112898,111945],{},"：末端离目标越远，奖励越低。",[17,112901,112902,112905],{},[32,112903,112904],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[21,112907,112908],{},"简单控制器：",[25,112910,112912],{"className":30704,"code":112911,"language":30706,"meta":30,"style":30},"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",[32,112913,112914,112927,112959],{"__ignoreMap":30},[35,112915,112916,112919,112921,112923,112925],{"class":37,"line":38},[35,112917,112918],{"class":359},"error ",[35,112920,544],{"class":495},[35,112922,112490],{"class":359},[35,112924,1026],{"class":495},[35,112926,112495],{"class":359},[35,112928,112929,112931,112933,112935,112937,112939,112941,112943,112945,112947,112949,112951,112953,112955,112957],{"class":37,"line":45},[35,112930,106193],{"class":359},[35,112932,687],{"class":58},[35,112934,4777],{"class":359},[35,112936,544],{"class":495},[35,112938,112512],{"class":359},[35,112940,105582],{"class":58},[35,112942,6852],{"class":495},[35,112944,112519],{"class":359},[35,112946,574],{"class":58},[35,112948,112524],{"class":359},[35,112950,1026],{"class":495},[35,112952,102725],{"class":58},[35,112954,12769],{"class":359},[35,112956,102725],{"class":58},[35,112958,505],{"class":359},[35,112960,112961,112963,112965,112967,112969,112971,112973,112975,112977,112979,112981,112983,112985,112987,112989],{"class":37,"line":55},[35,112962,106193],{"class":359},[35,112964,713],{"class":58},[35,112966,4777],{"class":359},[35,112968,544],{"class":495},[35,112970,112512],{"class":359},[35,112972,105582],{"class":58},[35,112974,6852],{"class":495},[35,112976,112519],{"class":359},[35,112978,687],{"class":58},[35,112980,112524],{"class":359},[35,112982,1026],{"class":495},[35,112984,102725],{"class":58},[35,112986,12769],{"class":359},[35,112988,102725],{"class":58},[35,112990,505],{"class":359},[21,112992,112993],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[465,112995,102030],{"id":102030},[25,112997,112998],{"className":30704,"code":112808,"language":30706,"meta":30,"style":30},[32,112999,113000],{"__ignoreMap":30},[35,113001,113002,113004,113006,113008,113010],{"class":37,"line":38},[35,113003,32273],{"class":495},[35,113005,112178],{"class":48},[35,113007,112181],{"class":359},[35,113009,1664],{"class":58},[35,113011,112186],{"class":359},[21,113013,113014,113015,113017,113018,82864,113020,28711],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[32,113016,80135],{}," 是 site 的名字，比如 ",[32,113019,111858],{},[32,113021,112281],{},[25,113023,113025],{"className":30704,"code":113024,"language":30706,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[32,113026,113027],{"__ignoreMap":30},[35,113028,113029,113031,113033],{"class":37,"line":38},[35,113030,103956],{"class":359},[35,113032,544],{"class":495},[35,113034,112195],{"class":359},[21,113036,113037],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[25,113039,113041],{"className":30704,"code":113040,"language":30706,"meta":30,"style":30},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[32,113042,113043,113055],{"__ignoreMap":30},[35,113044,113045,113047,113049,113051,113053],{"class":37,"line":38},[35,113046,1892],{"class":495},[35,113048,103771],{"class":359},[35,113050,1404],{"class":495},[35,113052,4427],{"class":58},[35,113054,4073],{"class":359},[35,113056,113057,113059,113061,113063,113065,113067,113069,113071,113073,113075],{"class":37,"line":45},[35,113058,104217],{"class":495},[35,113060,103757],{"class":58},[35,113062,499],{"class":359},[35,113064,550],{"class":495},[35,113066,112220],{"class":306},[35,113068,1390],{"class":58},[35,113070,80135],{"class":359},[35,113072,1440],{"class":58},[35,113074,747],{"class":306},[35,113076,505],{"class":359},[21,113078,113079,113080,113083,113084,113086],{},"如果 site 没找到，就主动报错。",[32,113081,113082],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[32,113085,80135],{}," 的值放进字符串里。",[25,113088,113090],{"className":30704,"code":113089,"language":30706,"meta":30,"style":30},"return data.site_xpos[site_id].copy()\n",[32,113091,113092],{"__ignoreMap":30},[35,113093,113094,113096],{"class":37,"line":38},[35,113095,17380],{"class":495},[35,113097,112237],{"class":359},[21,113099,113100,113101,113103,113104,113107],{},"返回这个 site 的世界坐标。",[32,113102,104002],{}," 里的每一行都是一个 site 的 ",[32,113105,113106],{},"(x, y, z)"," 坐标。",[25,113109,113111],{"className":30704,"code":113110,"language":30706,"meta":30,"style":30},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[32,113112,113113],{"__ignoreMap":30},[35,113114,113115,113117,113119],{"class":37,"line":38},[35,113116,32273],{"class":495},[35,113118,112252],{"class":48},[35,113120,112255],{"class":359},[21,113122,113123],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[25,113125,113127],{"className":30704,"code":113126,"language":30706,"meta":30,"style":30},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[32,113128,113129,113141],{"__ignoreMap":30},[35,113130,113131,113133,113135,113137,113139],{"class":37,"line":38},[35,113132,111890],{"class":359},[35,113134,544],{"class":495},[35,113136,112265],{"class":359},[35,113138,111858],{"class":306},[35,113140,505],{"class":359},[35,113142,113143,113145,113147,113149,113151],{"class":37,"line":45},[35,113144,111900],{"class":359},[35,113146,544],{"class":495},[35,113148,112265],{"class":359},[35,113150,112281],{"class":306},[35,113152,505],{"class":359},[21,113154,113155],{},"分别读取末端点和目标点的世界坐标。",[25,113157,113158],{"className":30704,"code":112830,"language":30706,"meta":30,"style":30},[32,113159,113160],{"__ignoreMap":30},[35,113161,113162,113164],{"class":37,"line":38},[35,113163,17380],{"class":495},[35,113165,112290],{"class":359},[21,113167,113168],{},"把四部分拼成一个观测数组：",[25,113170,113173],{"className":113171,"code":113172,"language":5521,"meta":30},[5519],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[32,113174,113172],{"__ignoreMap":30},[25,113176,113178],{"className":30704,"code":113177,"language":30706,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\n",[32,113179,113180],{"__ignoreMap":30},[35,113181,113182,113184,113186,113188,113190],{"class":37,"line":38},[35,113183,111918],{"class":359},[35,113185,544],{"class":495},[35,113187,111923],{"class":359},[35,113189,1026],{"class":495},[35,113191,111928],{"class":359},[21,113193,113194,113195,113198,113199,113202],{},"计算 tip 到 target 的距离。",[32,113196,113197],{},"tip - target"," 得到一个三维向量，",[32,113200,113201],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[21,113204,14967],{},[25,113206,113209],{"className":113207,"code":113208,"language":5521,"meta":30},[5519],"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",[32,113210,113208],{"__ignoreMap":30},[25,113212,113214],{"className":30704,"code":113213,"language":30706,"meta":30,"style":30},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[32,113215,113216],{"__ignoreMap":30},[35,113217,113218,113220,113222,113224,113226],{"class":37,"line":38},[35,113219,112865],{"class":359},[35,113221,544],{"class":495},[35,113223,112359],{"class":58},[35,113225,6852],{"class":495},[35,113227,112364],{"class":359},[21,113229,113230,113231,113234,113235,113238],{},"计算动作惩罚。",[32,113232,113233],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[32,113236,113237],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[25,113240,113242],{"className":30704,"code":113241,"language":30706,"meta":30,"style":30},"return float(-dist - control_cost)\n",[32,113243,113244],{"__ignoreMap":30},[35,113245,113246,113248,113250,113252,113254,113256,113258],{"class":37,"line":38},[35,113247,17380],{"class":495},[35,113249,110119],{"class":58},[35,113251,499],{"class":359},[35,113253,1026],{"class":495},[35,113255,111918],{"class":359},[35,113257,1026],{"class":495},[35,113259,112381],{"class":359},[21,113261,113262],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[25,113264,113265],{"className":30704,"code":111125,"language":30706,"meta":30,"style":30},[32,113266,113267],{"__ignoreMap":30},[35,113268,113269,113271,113273],{"class":37,"line":38},[35,113270,111132],{"class":359},[35,113272,544],{"class":495},[35,113274,105083],{"class":58},[21,113276,113277],{},"累计奖励变量，记录整个运行过程的总分。",[25,113279,113281],{"className":30704,"code":113280,"language":30706,"meta":30,"style":30},"for step in range(500):\n",[32,113282,113283],{"__ignoreMap":30},[35,113284,113285,113287,113289,113291,113293,113295,113297],{"class":37,"line":38},[35,113286,3359],{"class":495},[35,113288,31942],{"class":359},[35,113290,26374],{"class":495},[35,113292,32769],{"class":58},[35,113294,499],{"class":359},[35,113296,65400],{"class":58},[35,113298,31112],{"class":359},[21,113300,113301],{},"运行 500 个控制步。",[25,113303,113304],{"className":30704,"code":104865,"language":30706,"meta":30,"style":30},[32,113305,113306],{"__ignoreMap":30},[35,113307,113308],{"class":37,"line":38},[35,113309,104865],{"class":359},[21,113311,113312,113313,101343,113315,113317],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[32,113314,103553],{},[32,113316,103556],{}," 是当前状态下的坐标。",[25,113319,113321],{"className":30704,"code":113320,"language":30706,"meta":30,"style":30},"error = target - tip\n",[32,113322,113323],{"__ignoreMap":30},[35,113324,113325,113327,113329,113331,113333],{"class":37,"line":38},[35,113326,112918],{"class":359},[35,113328,544],{"class":495},[35,113330,112490],{"class":359},[35,113332,1026],{"class":495},[35,113334,112495],{"class":359},[21,113336,113337],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[25,113339,113341],{"className":30704,"code":113340,"language":30706,"meta":30,"style":30},"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",[32,113342,113343,113375],{"__ignoreMap":30},[35,113344,113345,113347,113349,113351,113353,113355,113357,113359,113361,113363,113365,113367,113369,113371,113373],{"class":37,"line":38},[35,113346,106193],{"class":359},[35,113348,687],{"class":58},[35,113350,4777],{"class":359},[35,113352,544],{"class":495},[35,113354,112512],{"class":359},[35,113356,105582],{"class":58},[35,113358,6852],{"class":495},[35,113360,112519],{"class":359},[35,113362,574],{"class":58},[35,113364,112524],{"class":359},[35,113366,1026],{"class":495},[35,113368,102725],{"class":58},[35,113370,12769],{"class":359},[35,113372,102725],{"class":58},[35,113374,505],{"class":359},[35,113376,113377,113379,113381,113383,113385,113387,113389,113391,113393,113395,113397,113399,113401,113403,113405],{"class":37,"line":45},[35,113378,106193],{"class":359},[35,113380,713],{"class":58},[35,113382,4777],{"class":359},[35,113384,544],{"class":495},[35,113386,112512],{"class":359},[35,113388,105582],{"class":58},[35,113390,6852],{"class":495},[35,113392,112519],{"class":359},[35,113394,687],{"class":58},[35,113396,112524],{"class":359},[35,113398,1026],{"class":495},[35,113400,102725],{"class":58},[35,113402,12769],{"class":359},[35,113404,102725],{"class":58},[35,113406,505],{"class":359},[21,113408,113409,113410,113413],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[32,113411,113412],{},"error -> ctrl -> step"," 的流程。",[25,113415,113416],{"className":30704,"code":104827,"language":30706,"meta":30,"style":30},[32,113417,113418],{"__ignoreMap":30},[35,113419,113420],{"class":37,"line":38},[35,113421,104827],{"class":359},[21,113423,113424],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[25,113426,113428],{"className":30704,"code":113427,"language":30706,"meta":30,"style":30},"obs = get_obs(model, data)\n",[32,113429,113430],{"__ignoreMap":30},[35,113431,113432,113434,113436],{"class":37,"line":38},[35,113433,111176],{"class":359},[35,113435,544],{"class":495},[35,113437,112613],{"class":359},[21,113439,113440,113441,113444],{},"读取最新观测。后面打印 ",[32,113442,113443],{},"obs.shape[0]","，用来确认观测维度是 10。",[438,113446,102638],{"id":102637},[21,113448,113449],{},"观测维度为:",[25,113451,113454],{"className":113452,"code":113453,"language":5521,"meta":30},[5519],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[32,113455,113453],{"__ignoreMap":30},[21,113457,113458],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[21,113460,113461],{},"程序每 100 步打印：",[25,113463,113466],{"className":113464,"code":113465,"language":5521,"meta":30},[5519],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[32,113467,113465],{"__ignoreMap":30},[21,113469,113470,113471,113473],{},"如果控制有效，你应该看到最终 ",[32,113472,103553],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[438,113475,102670],{"id":102669},[14,113477,113478,113481,113484,113490,113496,113503,113513],{},[17,113479,113480],{},"修改目标点位置。",[17,113482,113483],{},"重新运行，观察最终 tip 是否变化。",[17,113485,113486,113487,113489],{},"把 gravity 改成 ",[32,113488,102911],{},"，观察控制是否变差。",[17,113491,111503,113492,111507,113494,28711],{},[32,113493,102480],{},[32,113495,574],{},[17,113497,102733,113498,102736,113500,113502],{},[32,113499,110918],{},[32,113501,107629],{},"，观察机械臂是否更难移动。",[17,113504,102733,113505,82855,113507,102736,113509,113512],{},[32,113506,103556],{},[32,113508,104468],{},[32,113510,113511],{},"0.2 0 0.6","，观察 reward 和 final tip。",[17,113514,113515],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[438,113517,102775],{"id":102774},[465,113519,113521],{"id":113520},"site-not-found",[32,113522,113523],{},"site not found",[21,113525,113526,113527,101343,113530,28711],{},"检查 XML 中是否有 ",[32,113528,113529],{},"site name=\"tip\"",[32,113531,113532],{},"site name=\"target\"",[465,113534,113535],{"id":113535},"机械臂完全不动",[21,113537,102845],{},[14,113539,113540,113545,113548,113553],{},[17,113541,113542,113544],{},[32,113543,102480],{}," 是否为 2",[17,113546,113547],{},"actuator 是否引用正确 joint",[17,113549,113550,113552],{},[32,113551,101401],{}," 是否被赋值",[17,113554,113555,113556],{},"是否执行了 ",[32,113557,101010],{},[465,113559,113560],{"id":113560},"控制效果不好",[21,113562,113563],{},"正常。本章重点不是控制器最优，而是任务结构:",[25,113565,113568],{"className":113566,"code":113567,"language":5521,"meta":30},[5519],"obs → action → mj_step → reward → next_obs\n",[32,113569,113567],{"__ignoreMap":30},[465,113571,113573],{"id":113572},"tip-坐标不变化","tip 坐标不变化",[21,113575,102897],{},[14,113577,113578,113583,113591,113600],{},[17,113579,113580,113581,28711],{},"是否每步调用了 ",[32,113582,101010],{},[17,113584,113585,113586,101343,113588,28711],{},"是否写入了 ",[32,113587,106448],{},[32,113589,113590],{},"data.ctrl[1]",[17,113592,113593,113594,708,113597,28711],{},"actuator 是否正确引用 ",[32,113595,113596],{},"joint1",[32,113598,113599],{},"joint2",[17,113601,113602],{},"控制输入是否太小。",[465,113604,113605],{"id":113605},"目标点不会动",[21,113607,113608],{},"本章的 target 是固定 site：",[25,113610,113612],{"className":53393,"code":113611,"language":53395,"meta":30,"style":30},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[32,113613,113614],{"__ignoreMap":30},[35,113615,113616,113618,113620,113622,113624,113626,113628,113630,113633],{"class":37,"line":38},[35,113617,1404],{"class":359},[35,113619,103532],{"class":51626},[35,113621,15254],{"class":48},[35,113623,544],{"class":359},[35,113625,112281],{"class":306},[35,113627,101431],{"class":48},[35,113629,544],{"class":359},[35,113631,113632],{"class":306},"\"0.5 0 0.4\"",[35,113634,113635],{"class":359}," ...\u002F>\n",[21,113637,113638,113639,113641],{},"它直接挂在 ",[32,113640,102163],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[465,113643,113644],{"id":113644},"机械臂不像真实机械臂",[21,113646,113647],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[438,113649,102929],{"id":102928},[21,113651,113652],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[21,113654,113655],{},"核心公式：",[25,113657,113660],{"className":113658,"code":113659,"language":5521,"meta":30},[5519],"distance = ||tip - target||\nreward = -distance - action_cost\n",[32,113661,113659],{"__ignoreMap":30},[21,113663,113664],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[416,113666,113667],{},"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":30,"searchDepth":45,"depth":45,"links":113669},[113670,113671,113672,113677,113681,113682,113683,113691],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":113673},[113674,113675,113676],{"id":111873,"depth":55,"text":111874},{"id":111949,"depth":55,"text":111949},{"id":111979,"depth":55,"text":111980},{"id":101577,"depth":45,"text":101578,"children":113678},[113679,113680],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":113684},[113685,113686,113687,113688,113689,113690],{"id":113520,"depth":55,"text":113523},{"id":113535,"depth":55,"text":113535},{"id":113560,"depth":55,"text":113560},{"id":113572,"depth":55,"text":113573},{"id":113605,"depth":55,"text":113605},{"id":113644,"depth":55,"text":113644},{"id":102928,"depth":45,"text":102929},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111677,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113698,"title":113699,"body":113700,"description":30,"extension":422,"meta":117162,"navigation":140,"path":117163,"seo":117164,"stem":117165,"__hash__":117166},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113701,"toc":117133},[113702,113705,113707,113710,113713,113738,113741,113747,113750,113756,113758,113760,113784,113786,113804,113806,113849,113851,113878,113880,113883,113935,113938,113944,113953,113956,113994,113997,114036,114039,114047,114054,114057,114063,114065,114119,114126,114171,114174,114178,114194,114204,114206,115467,115469,115481,115483,115494,115496,115499,115520,115523,115526,115559,115565,115568,115601,115604,115607,115648,115653,115667,115670,115683,115688,115711,115713,115728,115738,115753,115760,115780,115795,115813,115816,115833,115841,115857,115863,115895,115908,115940,115950,115985,115999,116045,116059,116101,116112,116125,116131,116164,116167,116194,116204,116244,116254,116271,116278,116296,116299,116340,116353,116368,116371,116394,116397,116409,116412,116431,116436,116457,116460,116475,116478,116512,116524,116539,116542,116567,116570,116589,116592,116624,116627,116651,116657,116687,116694,116707,116710,116712,116714,116720,116723,116726,116738,116741,116743,116797,116799,116803,116809,116818,116821,116828,116830,116853,116856,116860,116862,116880,116886,116888,116921,116924,116930,116934,116937,116957,116962,116966,116973,116993,116998,117002,117005,117025,117028,117114,117118,117121,117127,117130],[10,113703,113699],{"id":113704},"_8gymnasium-风格强化学习接口基础",[438,113706,100972],{"id":100971},[21,113708,113709],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[21,113711,113712],{},"你将实现:",[25,113714,113716],{"className":30704,"code":113715,"language":30706,"meta":30,"style":30},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[32,113717,113718,113728],{"__ignoreMap":30},[35,113719,113720,113723,113725],{"class":37,"line":38},[35,113721,113722],{"class":359},"obs, info ",[35,113724,544],{"class":495},[35,113726,113727],{"class":359}," env.reset()\n",[35,113729,113730,113733,113735],{"class":37,"line":45},[35,113731,113732],{"class":359},"obs, reward, terminated, truncated, info ",[35,113734,544],{"class":495},[35,113736,113737],{"class":359}," env.step(action)\n",[21,113739,113740],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[21,113742,113743,113744,113746],{},"前面章节的代码都是“脚本式”的：在 ",[32,113745,102617],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[21,113748,113749],{},"可以先记住 Gymnasium 环境的核心交互：",[25,113751,113754],{"className":113752,"code":113753,"language":5521,"meta":30},[5519],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[32,113755,113753],{"__ignoreMap":30},[438,113757,101095],{"id":101094},[21,113759,101098],{},[25,113761,113762],{"className":24156,"code":104710,"language":24158,"meta":30,"style":30},[32,113763,113764],{"__ignoreMap":30},[35,113765,113766,113768,113770,113772,113774,113776,113778,113780,113782],{"class":37,"line":38},[35,113767,171],{"class":48},[35,113769,26645],{"class":306},[35,113771,318],{"class":306},[35,113773,26730],{"class":58},[35,113775,104725],{"class":306},[35,113777,101123],{"class":306},[35,113779,102823],{"class":306},[35,113781,101139],{"class":306},[35,113783,104734],{"class":306},[21,113785,103141],{},[25,113787,113789],{"className":24156,"code":113788,"language":24158,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[32,113790,113791],{"__ignoreMap":30},[35,113792,113793,113795,113797,113799,113801],{"class":37,"line":38},[35,113794,24165],{"class":48},[35,113796,318],{"class":306},[35,113798,101255],{"class":306},[35,113800,108033],{"class":306},[35,113802,113803],{"class":306}," gymnasium\n",[21,113805,103158],{},[25,113807,113809],{"className":24156,"code":113808,"language":24158,"meta":30,"style":30},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[32,113810,113811,113828,113837],{"__ignoreMap":30},[35,113812,113813,113815,113817,113819,113822,113824,113826],{"class":37,"line":38},[35,113814,30656],{"class":48},[35,113816,29502],{"class":306},[35,113818,25447],{"class":58},[35,113820,113821],{"class":306}," mujoco-gym-api",[35,113823,101300],{"class":306},[35,113825,101303],{"class":58},[35,113827,101306],{"class":58},[35,113829,113830,113832,113834],{"class":37,"line":45},[35,113831,30656],{"class":48},[35,113833,101313],{"class":306},[35,113835,113836],{"class":306}," mujoco-gym-api\n",[35,113838,113839,113841,113843,113845,113847],{"class":37,"line":55},[35,113840,24165],{"class":48},[35,113842,318],{"class":306},[35,113844,101255],{"class":306},[35,113846,108033],{"class":306},[35,113848,113803],{"class":306},[21,113850,101329],{},[14,113852,113853,113863,113866,113872],{},[17,113854,113855,113856,113859,113860,28711],{},"本章使用 ",[32,113857,113858],{},"gymnasium","，不是旧版 ",[32,113861,113862],{},"gym",[17,113864,113865],{},"Gymnasium API 与旧 Gym API 有差异。",[17,113867,113868,113869,28711],{},"旧 Gym 常见返回值是 4 个: ",[32,113870,113871],{},"obs, reward, done, info",[17,113873,113874,113875,28711],{},"Gymnasium 返回值是 5 个: ",[32,113876,113877],{},"obs, reward, terminated, truncated, info",[438,113879,101370],{"id":101369},[21,113881,113882],{},"强化学习环境接口包含:",[633,113884,113885,113894],{},[636,113886,113887],{},[639,113888,113889,113892],{},[642,113890,113891],{"align":24070},"方法",[642,113893,103018],{"align":24070},[680,113895,113896,113906,113916,113926],{},[639,113897,113898,113903],{},[685,113899,113900],{"align":24070},[32,113901,113902],{},"reset()",[685,113904,113905],{"align":24070},"重置环境",[639,113907,113908,113913],{},[685,113909,113910],{"align":24070},[32,113911,113912],{},"step(action)",[685,113914,113915],{"align":24070},"执行动作",[639,113917,113918,113923],{},[685,113919,113920],{"align":24070},[32,113921,113922],{},"observation_space",[685,113924,113925],{"align":24070},"观测空间",[639,113927,113928,113933],{},[685,113929,113930],{"align":24070},[32,113931,113932],{},"action_space",[685,113934,23988],{"align":24070},[21,113936,113937],{},"一个最小环境需要完成:",[25,113939,113942],{"className":113940,"code":113941,"language":5521,"meta":30},[5519],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[32,113943,113941],{"__ignoreMap":30},[465,113945,113947,101343,113950,104960],{"id":113946},"terminated-和-truncated-的区别",[32,113948,113949],{},"terminated",[32,113951,113952],{},"truncated",[21,113954,113955],{},"Gymnasium 把“结束”拆成两个概念：",[633,113957,113958,113968],{},[636,113959,113960],{},[639,113961,113962,113964,113966],{},[642,113963,104896],{"align":24070},[642,113965,101025],{"align":24070},[642,113967,21521],{"align":24070},[680,113969,113970,113982],{},[639,113971,113972,113976,113979],{},[685,113973,113974],{"align":24070},[32,113975,113949],{},[685,113977,113978],{"align":24070},"任务自然结束",[685,113980,113981],{"align":24070},"机械臂到达目标、机器人摔倒",[639,113983,113984,113988,113991],{},[685,113985,113986],{"align":24070},[32,113987,113952],{},[685,113989,113990],{"align":24070},"因外部限制截断",[685,113992,113993],{"align":24070},"达到最大步数、时间限制",[21,113995,113996],{},"本章中：",[25,113998,114000],{"className":30704,"code":113999,"language":30706,"meta":30,"style":30},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[32,114001,114002,114017],{"__ignoreMap":30},[35,114003,114004,114007,114009,114012,114014],{"class":37,"line":38},[35,114005,114006],{"class":359},"terminated ",[35,114008,544],{"class":495},[35,114010,114011],{"class":359}," dist ",[35,114013,1404],{"class":495},[35,114015,114016],{"class":58}," 0.05\n",[35,114018,114019,114022,114024,114026,114029,114031,114033],{"class":37,"line":45},[35,114020,114021],{"class":359},"truncated ",[35,114023,544],{"class":495},[35,114025,39199],{"class":58},[35,114027,114028],{"class":359},".steps ",[35,114030,2060],{"class":495},[35,114032,39199],{"class":58},[35,114034,114035],{"class":359},".max_steps\n",[21,114037,114038],{},"也就是：",[14,114040,114041,114044],{},[17,114042,114043],{},"末端距离目标小于 0.05，任务成功结束。",[17,114045,114046],{},"步数超过上限，episode 被截断。",[465,114048,114050,101343,114052],{"id":114049},"observation_space-和-action_space",[32,114051,113922],{},[32,114053,113932],{},[21,114055,114056],{},"这两个对象告诉算法：",[25,114058,114061],{"className":114059,"code":114060,"language":5521,"meta":30},[5519],"观测长什么样\n动作允许多大\n",[32,114062,114060],{"__ignoreMap":30},[21,114064,14967],{},[25,114066,114068],{"className":30704,"code":114067,"language":30706,"meta":30,"style":30},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[32,114069,114070],{"__ignoreMap":30},[35,114071,114072,114074,114077,114079,114082,114085,114088,114090,114092,114095,114097,114099,114101,114103,114105,114107,114109,114112,114114,114116],{"class":37,"line":38},[35,114073,31149],{"class":58},[35,114075,114076],{"class":359},".action_space ",[35,114078,544],{"class":495},[35,114080,114081],{"class":359}," spaces.Box(",[35,114083,114084],{"class":5550},"low",[35,114086,114087],{"class":495},"=-",[35,114089,102725],{"class":58},[35,114091,12769],{"class":359},[35,114093,114094],{"class":5550},"high",[35,114096,544],{"class":495},[35,114098,102725],{"class":58},[35,114100,12769],{"class":359},[35,114102,96288],{"class":5550},[35,114104,544],{"class":495},[35,114106,499],{"class":359},[35,114108,574],{"class":58},[35,114110,114111],{"class":359},",), ",[35,114113,93825],{"class":5550},[35,114115,544],{"class":495},[35,114117,114118],{"class":359},"np.float32)\n",[21,114120,114121,114122,114125],{},"表示动作是 2 维数组，每个值都在 ",[32,114123,114124],{},"[-1, 1]"," 范围内。",[25,114127,114129],{"className":30704,"code":114128,"language":30706,"meta":30,"style":30},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[32,114130,114131],{"__ignoreMap":30},[35,114132,114133,114135,114138,114140,114142,114144,114146,114149,114151,114153,114155,114157,114159,114161,114163,114165,114167,114169],{"class":37,"line":38},[35,114134,31149],{"class":58},[35,114136,114137],{"class":359},".observation_space ",[35,114139,544],{"class":495},[35,114141,114081],{"class":359},[35,114143,114084],{"class":5550},[35,114145,114087],{"class":495},[35,114147,114148],{"class":359},"np.inf, ",[35,114150,114094],{"class":5550},[35,114152,544],{"class":495},[35,114154,114148],{"class":359},[35,114156,96288],{"class":5550},[35,114158,544],{"class":495},[35,114160,499],{"class":359},[35,114162,940],{"class":58},[35,114164,114111],{"class":359},[35,114166,93825],{"class":5550},[35,114168,544],{"class":495},[35,114170,114118],{"class":359},[21,114172,114173],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[465,114175,114177],{"id":114176},"frame_skip-是什么","frame_skip 是什么",[25,114179,114181],{"className":30704,"code":114180,"language":30706,"meta":30,"style":30},"self.frame_skip = 5\n",[32,114182,114183],{"__ignoreMap":30},[35,114184,114185,114187,114190,114192],{"class":37,"line":38},[35,114186,31149],{"class":58},[35,114188,114189],{"class":359},".frame_skip ",[35,114191,544],{"class":495},[35,114193,54753],{"class":58},[21,114195,114196,114197,114200,114201,114203],{},"表示外部调用一次 ",[32,114198,114199],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[32,114202,101540],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[438,114205,101578],{"id":101577},[25,114207,114209],{"className":30704,"code":114208,"language":30706,"meta":30,"style":30},"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",[32,114210,114211,114223,114229,114239,114250,114254,114258,114266,114271,114275,114279,114283,114287,114291,114295,114299,114304,114308,114312,114316,114321,114325,114329,114333,114337,114341,114345,114349,114353,114357,114361,114365,114369,114373,114391,114406,114410,114423,114433,114448,114465,114469,114490,114509,114534,114548,114552,114562,114574,114584,114588,114630,114668,114672,114682,114698,114713,114732,114739,114743,114756,114771,114786,114799,114818,114834,114838,114879,114894,114909,114913,114952,114963,114976,114980,114990,114999,115003,115013,115028,115046,115050,115061,115078,115091,115095,115105,115109,115120,115131,115135,115149,115163,115179,115183,115196,115213,115228,115235,115239,115243,115255,115265,115283,115295,115307,115311,115319,115335,115344,115353,115361,115403,115416,115421,115425,115443,115447,115451,115463],{"__ignoreMap":30},[35,114212,114213,114215,114218,114220],{"class":37,"line":38},[35,114214,30718],{"class":495},[35,114216,114217],{"class":359}," gymnasium ",[35,114219,31709],{"class":495},[35,114221,114222],{"class":359}," gym\n",[35,114224,114225,114227],{"class":37,"line":45},[35,114226,30718],{"class":495},[35,114228,101623],{"class":359},[35,114230,114231,114233,114235,114237],{"class":37,"line":55},[35,114232,30718],{"class":495},[35,114234,31706],{"class":359},[35,114236,31709],{"class":495},[35,114238,31712],{"class":359},[35,114240,114241,114243,114245,114247],{"class":37,"line":65},[35,114242,31063],{"class":495},[35,114244,114217],{"class":359},[35,114246,30718],{"class":495},[35,114248,114249],{"class":359}," spaces\n",[35,114251,114252],{"class":37,"line":74},[35,114253,141],{"emptyLinePlaceholder":140},[35,114255,114256],{"class":37,"line":83},[35,114257,141],{"emptyLinePlaceholder":140},[35,114259,114260,114262,114264],{"class":37,"line":92},[35,114261,101636],{"class":58},[35,114263,13898],{"class":495},[35,114265,101641],{"class":306},[35,114267,114268],{"class":37,"line":101},[35,114269,114270],{"class":306},"\u003Cmujoco model=\"gym_reacher\">\n",[35,114272,114273],{"class":37,"line":110},[35,114274,112060],{"class":306},[35,114276,114277],{"class":37,"line":119},[35,114278,141],{"emptyLinePlaceholder":140},[35,114280,114281],{"class":37,"line":128},[35,114282,101660],{"class":306},[35,114284,114285],{"class":37,"line":137},[35,114286,112078],{"class":306},[35,114288,114289],{"class":37,"line":144},[35,114290,141],{"emptyLinePlaceholder":140},[35,114292,114293],{"class":37,"line":150},[35,114294,112087],{"class":306},[35,114296,114297],{"class":37,"line":159},[35,114298,112092],{"class":306},[35,114300,114301],{"class":37,"line":168},[35,114302,114303],{"class":306},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[35,114305,114306],{"class":37,"line":177},[35,114307,141],{"emptyLinePlaceholder":140},[35,114309,114310],{"class":37,"line":182},[35,114311,112106],{"class":306},[35,114313,114314],{"class":37,"line":188},[35,114315,112111],{"class":306},[35,114317,114318],{"class":37,"line":197},[35,114319,114320],{"class":306},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[35,114322,114323],{"class":37,"line":206},[35,114324,112121],{"class":306},[35,114326,114327],{"class":37,"line":215},[35,114328,106760],{"class":306},[35,114330,114331],{"class":37,"line":224},[35,114332,101689],{"class":306},[35,114334,114335],{"class":37,"line":233},[35,114336,101694],{"class":306},[35,114338,114339],{"class":37,"line":238},[35,114340,141],{"emptyLinePlaceholder":140},[35,114342,114343],{"class":37,"line":244},[35,114344,106777],{"class":306},[35,114346,114347],{"class":37,"line":253},[35,114348,112146],{"class":306},[35,114350,114351],{"class":37,"line":262},[35,114352,112151],{"class":306},[35,114354,114355],{"class":37,"line":271},[35,114356,106787],{"class":306},[35,114358,114359],{"class":37,"line":280},[35,114360,101699],{"class":306},[35,114362,114363],{"class":37,"line":289},[35,114364,96023],{"class":306},[35,114366,114367],{"class":37,"line":294},[35,114368,141],{"emptyLinePlaceholder":140},[35,114370,114371],{"class":37,"line":300},[35,114372,141],{"emptyLinePlaceholder":140},[35,114374,114375,114377,114380,114382,114384,114386,114389],{"class":37,"line":313},[35,114376,15028],{"class":495},[35,114378,114379],{"class":48}," ReacherEnv",[35,114381,499],{"class":359},[35,114383,113862],{"class":48},[35,114385,1052],{"class":359},[35,114387,114388],{"class":48},"Env",[35,114390,31112],{"class":359},[35,114392,114393,114396,114398,114400,114403],{"class":37,"line":324},[35,114394,114395],{"class":359},"    metadata ",[35,114397,544],{"class":495},[35,114399,4782],{"class":359},[35,114401,114402],{"class":306},"\"render_modes\"",[35,114404,114405],{"class":359},": []}\n",[35,114407,114408],{"class":37,"line":2955},[35,114409,141],{"emptyLinePlaceholder":140},[35,114411,114412,114414,114416,114419,114421],{"class":37,"line":8282},[35,114413,31127],{"class":495},[35,114415,31130],{"class":58},[35,114417,114418],{"class":359},"(self) -> ",[35,114420,96011],{"class":58},[35,114422,4073],{"class":359},[35,114424,114425,114427,114429,114431],{"class":37,"line":8306},[35,114426,31143],{"class":58},[35,114428,17595],{"class":359},[35,114430,31155],{"class":58},[35,114432,2317],{"class":359},[35,114434,114435,114437,114440,114442,114444,114446],{"class":37,"line":8311},[35,114436,31171],{"class":58},[35,114438,114439],{"class":359},".model ",[35,114441,544],{"class":495},[35,114443,101734],{"class":359},[35,114445,101636],{"class":58},[35,114447,505],{"class":359},[35,114449,114450,114452,114455,114457,114460,114462],{"class":37,"line":8317},[35,114451,31171],{"class":58},[35,114453,114454],{"class":359},".data ",[35,114456,544],{"class":495},[35,114458,114459],{"class":359}," mujoco.MjData(",[35,114461,31149],{"class":58},[35,114463,114464],{"class":359},".model)\n",[35,114466,114467],{"class":37,"line":8344},[35,114468,141],{"emptyLinePlaceholder":140},[35,114470,114471,114473,114476,114478,114481,114483,114486,114488],{"class":37,"line":8349},[35,114472,31171],{"class":58},[35,114474,114475],{"class":359},".tip_site_id ",[35,114477,544],{"class":495},[35,114479,114480],{"class":359}," mujoco.mj_name2id(",[35,114482,31149],{"class":58},[35,114484,114485],{"class":359},".model, mujoco.mjtObj.mjOBJ_SITE, ",[35,114487,111858],{"class":306},[35,114489,505],{"class":359},[35,114491,114492,114494,114497,114499,114501,114503,114505,114507],{"class":37,"line":8355},[35,114493,31171],{"class":58},[35,114495,114496],{"class":359},".target_site_id ",[35,114498,544],{"class":495},[35,114500,114480],{"class":359},[35,114502,31149],{"class":58},[35,114504,114485],{"class":359},[35,114506,112281],{"class":306},[35,114508,505],{"class":359},[35,114510,114511,114513,114515,114517,114519,114521,114524,114526,114528,114530,114532],{"class":37,"line":8367},[35,114512,2837],{"class":495},[35,114514,39199],{"class":58},[35,114516,114475],{"class":359},[35,114518,1404],{"class":495},[35,114520,4427],{"class":58},[35,114522,114523],{"class":495}," or",[35,114525,39199],{"class":58},[35,114527,114496],{"class":359},[35,114529,1404],{"class":495},[35,114531,4427],{"class":58},[35,114533,4073],{"class":359},[35,114535,114536,114539,114541,114543,114546],{"class":37,"line":8379},[35,114537,114538],{"class":495},"            raise",[35,114540,103757],{"class":58},[35,114542,499],{"class":359},[35,114544,114545],{"class":306},"\"required sites not found\"",[35,114547,505],{"class":359},[35,114549,114550],{"class":37,"line":8391},[35,114551,141],{"emptyLinePlaceholder":140},[35,114553,114554,114556,114558,114560],{"class":37,"line":10050},[35,114555,31171],{"class":58},[35,114557,114189],{"class":359},[35,114559,544],{"class":495},[35,114561,54753],{"class":58},[35,114563,114564,114566,114569,114571],{"class":37,"line":10075},[35,114565,31171],{"class":58},[35,114567,114568],{"class":359},".max_steps ",[35,114570,544],{"class":495},[35,114572,114573],{"class":58}," 200\n",[35,114575,114576,114578,114580,114582],{"class":37,"line":10098},[35,114577,31171],{"class":58},[35,114579,114028],{"class":359},[35,114581,544],{"class":495},[35,114583,47659],{"class":58},[35,114585,114586],{"class":37,"line":10122},[35,114587,141],{"emptyLinePlaceholder":140},[35,114589,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608,114610,114612,114614,114616,114618,114620,114622,114624,114626,114628],{"class":37,"line":10127},[35,114591,31171],{"class":58},[35,114593,114076],{"class":359},[35,114595,544],{"class":495},[35,114597,114081],{"class":359},[35,114599,114084],{"class":5550},[35,114601,114087],{"class":495},[35,114603,102725],{"class":58},[35,114605,12769],{"class":359},[35,114607,114094],{"class":5550},[35,114609,544],{"class":495},[35,114611,102725],{"class":58},[35,114613,12769],{"class":359},[35,114615,96288],{"class":5550},[35,114617,544],{"class":495},[35,114619,499],{"class":359},[35,114621,574],{"class":58},[35,114623,114111],{"class":359},[35,114625,93825],{"class":5550},[35,114627,544],{"class":495},[35,114629,114118],{"class":359},[35,114631,114632,114634,114636,114638,114640,114642,114644,114646,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666],{"class":37,"line":10132},[35,114633,31171],{"class":58},[35,114635,114137],{"class":359},[35,114637,544],{"class":495},[35,114639,114081],{"class":359},[35,114641,114084],{"class":5550},[35,114643,114087],{"class":495},[35,114645,114148],{"class":359},[35,114647,114094],{"class":5550},[35,114649,544],{"class":495},[35,114651,114148],{"class":359},[35,114653,96288],{"class":5550},[35,114655,544],{"class":495},[35,114657,499],{"class":359},[35,114659,940],{"class":58},[35,114661,114111],{"class":359},[35,114663,93825],{"class":5550},[35,114665,544],{"class":495},[35,114667,114118],{"class":359},[35,114669,114670],{"class":37,"line":10137},[35,114671,141],{"emptyLinePlaceholder":140},[35,114673,114674,114676,114679],{"class":37,"line":10146},[35,114675,31127],{"class":495},[35,114677,114678],{"class":48}," _get_obs",[35,114680,114681],{"class":359},"(self) -> np.ndarray:\n",[35,114683,114684,114686,114688,114690,114693,114695],{"class":37,"line":10151},[35,114685,112459],{"class":359},[35,114687,544],{"class":495},[35,114689,39199],{"class":58},[35,114691,114692],{"class":359},".data.site_xpos[",[35,114694,31149],{"class":58},[35,114696,114697],{"class":359},".tip_site_id].copy()\n",[35,114699,114700,114702,114704,114706,114708,114710],{"class":37,"line":10157},[35,114701,112472],{"class":359},[35,114703,544],{"class":495},[35,114705,39199],{"class":58},[35,114707,114692],{"class":359},[35,114709,31149],{"class":58},[35,114711,114712],{"class":359},".target_site_id].copy()\n",[35,114714,114715,114717,114719,114722,114724,114727,114729],{"class":37,"line":10178},[35,114716,110504],{"class":359},[35,114718,544],{"class":495},[35,114720,114721],{"class":359}," np.concatenate([",[35,114723,31149],{"class":58},[35,114725,114726],{"class":359},".data.qpos.copy(), ",[35,114728,31149],{"class":58},[35,114730,114731],{"class":359},".data.qvel.copy(), tip, target])\n",[35,114733,114734,114736],{"class":37,"line":10184},[35,114735,15086],{"class":495},[35,114737,114738],{"class":359}," obs.astype(np.float32)\n",[35,114740,114741],{"class":37,"line":10198},[35,114742,141],{"emptyLinePlaceholder":140},[35,114744,114745,114747,114750,114752,114754],{"class":37,"line":10204},[35,114746,31127],{"class":495},[35,114748,114749],{"class":48}," _get_reward",[35,114751,114418],{"class":359},[35,114753,538],{"class":58},[35,114755,4073],{"class":359},[35,114757,114758,114760,114762,114764,114766,114768],{"class":37,"line":10231},[35,114759,112459],{"class":359},[35,114761,544],{"class":495},[35,114763,39199],{"class":58},[35,114765,114692],{"class":359},[35,114767,31149],{"class":58},[35,114769,114770],{"class":359},".tip_site_id]\n",[35,114772,114773,114775,114777,114779,114781,114783],{"class":37,"line":10240},[35,114774,112472],{"class":359},[35,114776,544],{"class":495},[35,114778,39199],{"class":58},[35,114780,114692],{"class":359},[35,114782,31149],{"class":58},[35,114784,114785],{"class":359},".target_site_id]\n",[35,114787,114788,114791,114793,114795,114797],{"class":37,"line":10246},[35,114789,114790],{"class":359},"        dist ",[35,114792,544],{"class":495},[35,114794,111923],{"class":359},[35,114796,1026],{"class":495},[35,114798,111928],{"class":359},[35,114800,114801,114804,114806,114808,114810,114813,114815],{"class":37,"line":10254},[35,114802,114803],{"class":359},"        control_cost ",[35,114805,544],{"class":495},[35,114807,112359],{"class":58},[35,114809,6852],{"class":495},[35,114811,114812],{"class":359}," np.sum(np.square(",[35,114814,31149],{"class":58},[35,114816,114817],{"class":359},".data.ctrl))\n",[35,114819,114820,114822,114824,114826,114828,114830,114832],{"class":37,"line":10259},[35,114821,15086],{"class":495},[35,114823,110119],{"class":58},[35,114825,499],{"class":359},[35,114827,1026],{"class":495},[35,114829,111918],{"class":359},[35,114831,1026],{"class":495},[35,114833,112381],{"class":359},[35,114835,114836],{"class":37,"line":16938},[35,114837,141],{"emptyLinePlaceholder":140},[35,114839,114840,114842,114845,114848,114850,114853,114855,114857,114859,114861,114863,114866,114869,114871,114873,114875,114877],{"class":37,"line":16944},[35,114841,31127],{"class":495},[35,114843,114844],{"class":48}," reset",[35,114846,114847],{"class":359},"(self, ",[35,114849,949],{"class":495},[35,114851,114852],{"class":359},", seed: ",[35,114854,502],{"class":58},[35,114856,25441],{"class":495},[35,114858,39259],{"class":58},[35,114860,13898],{"class":495},[35,114862,39259],{"class":58},[35,114864,114865],{"class":359},", options: ",[35,114867,114868],{"class":58},"dict",[35,114870,25441],{"class":495},[35,114872,39259],{"class":58},[35,114874,13898],{"class":495},[35,114876,39259],{"class":58},[35,114878,31112],{"class":359},[35,114880,114881,114883,114886,114889,114891],{"class":37,"line":16967},[35,114882,31143],{"class":58},[35,114884,114885],{"class":359},"().reset(",[35,114887,114888],{"class":5550},"seed",[35,114890,544],{"class":495},[35,114892,114893],{"class":359},"seed)\n",[35,114895,114896,114899,114901,114904,114906],{"class":37,"line":16973},[35,114897,114898],{"class":359},"        mujoco.mj_resetData(",[35,114900,31149],{"class":58},[35,114902,114903],{"class":359},".model, ",[35,114905,31149],{"class":58},[35,114907,114908],{"class":359},".data)\n",[35,114910,114911],{"class":37,"line":16996},[35,114912,141],{"emptyLinePlaceholder":140},[35,114914,114915,114917,114920,114922,114924,114927,114929,114931,114933,114935,114937,114939,114941,114943,114945,114947,114949],{"class":37,"line":17010},[35,114916,31171],{"class":58},[35,114918,114919],{"class":359},".data.qpos[:] ",[35,114921,544],{"class":495},[35,114923,39199],{"class":58},[35,114925,114926],{"class":359},".np_random.uniform(",[35,114928,114084],{"class":5550},[35,114930,114087],{"class":495},[35,114932,86535],{"class":58},[35,114934,12769],{"class":359},[35,114936,114094],{"class":5550},[35,114938,544],{"class":495},[35,114940,86535],{"class":58},[35,114942,12769],{"class":359},[35,114944,31822],{"class":5550},[35,114946,544],{"class":495},[35,114948,31149],{"class":58},[35,114950,114951],{"class":359},".model.nq)\n",[35,114953,114954,114956,114959,114961],{"class":37,"line":17030},[35,114955,31171],{"class":58},[35,114957,114958],{"class":359},".data.qvel[:] ",[35,114960,544],{"class":495},[35,114962,105083],{"class":58},[35,114964,114965,114968,114970,114972,114974],{"class":37,"line":17036},[35,114966,114967],{"class":359},"        mujoco.mj_forward(",[35,114969,31149],{"class":58},[35,114971,114903],{"class":359},[35,114973,31149],{"class":58},[35,114975,114908],{"class":359},[35,114977,114978],{"class":37,"line":17047},[35,114979,141],{"emptyLinePlaceholder":140},[35,114981,114982,114984,114986,114988],{"class":37,"line":17070},[35,114983,31171],{"class":58},[35,114985,114028],{"class":359},[35,114987,544],{"class":495},[35,114989,47659],{"class":58},[35,114991,114992,114994,114996],{"class":37,"line":17092},[35,114993,15086],{"class":495},[35,114995,39199],{"class":58},[35,114997,114998],{"class":359},"._get_obs(), {}\n",[35,115000,115001],{"class":37,"line":17097},[35,115002,141],{"emptyLinePlaceholder":140},[35,115004,115005,115007,115010],{"class":37,"line":17103},[35,115006,31127],{"class":495},[35,115008,115009],{"class":48}," step",[35,115011,115012],{"class":359},"(self, action):\n",[35,115014,115015,115017,115019,115022,115024,115026],{"class":37,"line":17117},[35,115016,110544],{"class":359},[35,115018,544],{"class":495},[35,115020,115021],{"class":359}," np.asarray(action, ",[35,115023,93825],{"class":5550},[35,115025,544],{"class":495},[35,115027,114118],{"class":359},[35,115029,115030,115032,115034,115036,115038,115041,115043],{"class":37,"line":17130},[35,115031,110544],{"class":359},[35,115033,544],{"class":495},[35,115035,107769],{"class":359},[35,115037,31149],{"class":58},[35,115039,115040],{"class":359},".action_space.low, ",[35,115042,31149],{"class":58},[35,115044,115045],{"class":359},".action_space.high)\n",[35,115047,115048],{"class":37,"line":17135},[35,115049,141],{"emptyLinePlaceholder":140},[35,115051,115052,115054,115057,115059],{"class":37,"line":17149},[35,115053,31171],{"class":58},[35,115055,115056],{"class":359},".data.ctrl[:] ",[35,115058,544],{"class":495},[35,115060,107792],{"class":359},[35,115062,115063,115065,115067,115069,115071,115073,115075],{"class":37,"line":17154},[35,115064,3737],{"class":495},[35,115066,101823],{"class":359},[35,115068,26374],{"class":495},[35,115070,32769],{"class":58},[35,115072,499],{"class":359},[35,115074,31149],{"class":58},[35,115076,115077],{"class":359},".frame_skip):\n",[35,115079,115080,115083,115085,115087,115089],{"class":37,"line":17160},[35,115081,115082],{"class":359},"            mujoco.mj_step(",[35,115084,31149],{"class":58},[35,115086,114903],{"class":359},[35,115088,31149],{"class":58},[35,115090,114908],{"class":359},[35,115092,115093],{"class":37,"line":17165},[35,115094,141],{"emptyLinePlaceholder":140},[35,115096,115097,115099,115101,115103],{"class":37,"line":17179},[35,115098,31171],{"class":58},[35,115100,114028],{"class":359},[35,115102,9811],{"class":495},[35,115104,56025],{"class":58},[35,115106,115107],{"class":37,"line":17184},[35,115108,141],{"emptyLinePlaceholder":140},[35,115110,115111,115113,115115,115117],{"class":37,"line":17189},[35,115112,110504],{"class":359},[35,115114,544],{"class":495},[35,115116,39199],{"class":58},[35,115118,115119],{"class":359},"._get_obs()\n",[35,115121,115122,115124,115126,115128],{"class":37,"line":17203},[35,115123,110609],{"class":359},[35,115125,544],{"class":495},[35,115127,39199],{"class":58},[35,115129,115130],{"class":359},"._get_reward()\n",[35,115132,115133],{"class":37,"line":17215},[35,115134,141],{"emptyLinePlaceholder":140},[35,115136,115137,115139,115141,115143,115145,115147],{"class":37,"line":17220},[35,115138,112459],{"class":359},[35,115140,544],{"class":495},[35,115142,39199],{"class":58},[35,115144,114692],{"class":359},[35,115146,31149],{"class":58},[35,115148,114770],{"class":359},[35,115150,115151,115153,115155,115157,115159,115161],{"class":37,"line":17233},[35,115152,112472],{"class":359},[35,115154,544],{"class":495},[35,115156,39199],{"class":58},[35,115158,114692],{"class":359},[35,115160,31149],{"class":58},[35,115162,114785],{"class":359},[35,115164,115165,115167,115169,115171,115174,115176],{"class":37,"line":17238},[35,115166,114790],{"class":359},[35,115168,544],{"class":495},[35,115170,110119],{"class":58},[35,115172,115173],{"class":359},"(np.linalg.norm(tip ",[35,115175,1026],{"class":495},[35,115177,115178],{"class":359}," target))\n",[35,115180,115181],{"class":37,"line":17243},[35,115182,141],{"emptyLinePlaceholder":140},[35,115184,115185,115188,115190,115192,115194],{"class":37,"line":17248},[35,115186,115187],{"class":359},"        terminated ",[35,115189,544],{"class":495},[35,115191,114011],{"class":359},[35,115193,1404],{"class":495},[35,115195,114016],{"class":58},[35,115197,115198,115201,115203,115205,115207,115209,115211],{"class":37,"line":17261},[35,115199,115200],{"class":359},"        truncated ",[35,115202,544],{"class":495},[35,115204,39199],{"class":58},[35,115206,114028],{"class":359},[35,115208,2060],{"class":495},[35,115210,39199],{"class":58},[35,115212,114035],{"class":359},[35,115214,115215,115218,115220,115222,115225],{"class":37,"line":17266},[35,115216,115217],{"class":359},"        info ",[35,115219,544],{"class":495},[35,115221,4782],{"class":359},[35,115223,115224],{"class":306},"\"distance\"",[35,115226,115227],{"class":359},": dist}\n",[35,115229,115230,115232],{"class":37,"line":32959},[35,115231,15086],{"class":495},[35,115233,115234],{"class":359}," obs, reward, terminated, truncated, info\n",[35,115236,115237],{"class":37,"line":32965},[35,115238,141],{"emptyLinePlaceholder":140},[35,115240,115241],{"class":37,"line":32971},[35,115242,141],{"emptyLinePlaceholder":140},[35,115244,115245,115247,115249,115251,115253],{"class":37,"line":32977},[35,115246,32273],{"class":495},[35,115248,2314],{"class":48},[35,115250,101720],{"class":359},[35,115252,96011],{"class":58},[35,115254,4073],{"class":359},[35,115256,115257,115260,115262],{"class":37,"line":32983},[35,115258,115259],{"class":359},"    env ",[35,115261,544],{"class":495},[35,115263,115264],{"class":359}," ReacherEnv()\n",[35,115266,115267,115270,115272,115275,115277,115279,115281],{"class":37,"line":32994},[35,115268,115269],{"class":359},"    obs, info ",[35,115271,544],{"class":495},[35,115273,115274],{"class":359}," env.reset(",[35,115276,114888],{"class":5550},[35,115278,544],{"class":495},[35,115280,687],{"class":58},[35,115282,505],{"class":359},[35,115284,115285,115287,115289,115292],{"class":37,"line":33000},[35,115286,31625],{"class":58},[35,115288,499],{"class":359},[35,115290,115291],{"class":306},"\"initial obs shape:\"",[35,115293,115294],{"class":359},", obs.shape)\n",[35,115296,115297,115299,115301,115304],{"class":37,"line":33020},[35,115298,31625],{"class":58},[35,115300,499],{"class":359},[35,115302,115303],{"class":306},"\"initial info:\"",[35,115305,115306],{"class":359},", info)\n",[35,115308,115309],{"class":37,"line":33026},[35,115310,141],{"emptyLinePlaceholder":140},[35,115312,115313,115315,115317],{"class":37,"line":33037},[35,115314,110475],{"class":359},[35,115316,544],{"class":495},[35,115318,105083],{"class":58},[35,115320,115321,115323,115325,115327,115329,115331,115333],{"class":37,"line":33043},[35,115322,3535],{"class":495},[35,115324,31942],{"class":359},[35,115326,26374],{"class":495},[35,115328,32769],{"class":58},[35,115330,499],{"class":359},[35,115332,1194],{"class":58},[35,115334,31112],{"class":359},[35,115336,115337,115339,115341],{"class":37,"line":33049},[35,115338,110544],{"class":359},[35,115340,544],{"class":495},[35,115342,115343],{"class":359}," env.action_space.sample()\n",[35,115345,115346,115349,115351],{"class":37,"line":33055},[35,115347,115348],{"class":359},"        obs, reward, terminated, truncated, info ",[35,115350,544],{"class":495},[35,115352,113737],{"class":359},[35,115354,115355,115357,115359],{"class":37,"line":33061},[35,115356,110619],{"class":359},[35,115358,9811],{"class":495},[35,115360,110624],{"class":359},[35,115362,115363,115365,115367,115369,115371,115374,115376,115378,115381,115383,115385,115388,115390,115392,115395,115397,115399,115401],{"class":37,"line":33067},[35,115364,32777],{"class":58},[35,115366,499],{"class":359},[35,115368,110653],{"class":306},[35,115370,110656],{"class":359},[35,115372,115373],{"class":306},"\"reward:\"",[35,115375,12769],{"class":359},[35,115377,32344],{"class":58},[35,115379,115380],{"class":359},"(reward, ",[35,115382,568],{"class":58},[35,115384,110667],{"class":359},[35,115386,115387],{"class":306},"\"distance:\"",[35,115389,12769],{"class":359},[35,115391,32344],{"class":58},[35,115393,115394],{"class":359},"(info[",[35,115396,115224],{"class":306},[35,115398,112524],{"class":359},[35,115400,568],{"class":58},[35,115402,30823],{"class":359},[35,115404,115405,115407,115410,115413],{"class":37,"line":33073},[35,115406,2837],{"class":495},[35,115408,115409],{"class":359}," terminated ",[35,115411,115412],{"class":495},"or",[35,115414,115415],{"class":359}," truncated:\n",[35,115417,115418],{"class":37,"line":33079},[35,115419,115420],{"class":495},"            break\n",[35,115422,115423],{"class":37,"line":33099},[35,115424,141],{"emptyLinePlaceholder":140},[35,115426,115427,115429,115431,115433,115435,115437,115439,115441],{"class":37,"line":33105},[35,115428,31625],{"class":58},[35,115430,499],{"class":359},[35,115432,110698],{"class":306},[35,115434,12769],{"class":359},[35,115436,32344],{"class":58},[35,115438,110705],{"class":359},[35,115440,568],{"class":58},[35,115442,30823],{"class":359},[35,115444,115445],{"class":37,"line":33121},[35,115446,141],{"emptyLinePlaceholder":140},[35,115448,115449],{"class":37,"line":33127},[35,115450,141],{"emptyLinePlaceholder":140},[35,115452,115453,115455,115457,115459,115461],{"class":37,"line":33141},[35,115454,1892],{"class":495},[35,115456,31546],{"class":58},[35,115458,101881],{"class":495},[35,115460,101884],{"class":306},[35,115462,4073],{"class":359},[35,115464,115465],{"class":37,"line":33147},[35,115466,101891],{"class":359},[21,115468,103892],{},[25,115470,115472],{"className":24156,"code":115471,"language":24158,"meta":30,"style":30},"touch ch8_gym_env.py\n",[32,115473,115474],{"__ignoreMap":30},[35,115475,115476,115478],{"class":37,"line":38},[35,115477,113],{"class":48},[35,115479,115480],{"class":306}," ch8_gym_env.py\n",[21,115482,110766],{},[25,115484,115486],{"className":24156,"code":115485,"language":24158,"meta":30,"style":30},"python ch8_gym_env.py\n",[32,115487,115488],{"__ignoreMap":30},[35,115489,115490,115492],{"class":37,"line":38},[35,115491,30706],{"class":48},[35,115493,115480],{"class":306},[465,115495,101894],{"id":101894},[21,115497,115498],{},"继承 Gymnasium 环境：",[25,115500,115502],{"className":30704,"code":115501,"language":30706,"meta":30,"style":30},"class ReacherEnv(gym.Env):\n",[32,115503,115504],{"__ignoreMap":30},[35,115505,115506,115508,115510,115512,115514,115516,115518],{"class":37,"line":38},[35,115507,15028],{"class":495},[35,115509,114379],{"class":48},[35,115511,499],{"class":359},[35,115513,113862],{"class":48},[35,115515,1052],{"class":359},[35,115517,114388],{"class":48},[35,115519,31112],{"class":359},[21,115521,115522],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[21,115524,115525],{},"初始化模型：",[25,115527,115529],{"className":30704,"code":115528,"language":30706,"meta":30,"style":30},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[32,115530,115531,115545],{"__ignoreMap":30},[35,115532,115533,115535,115537,115539,115541,115543],{"class":37,"line":38},[35,115534,31149],{"class":58},[35,115536,114439],{"class":359},[35,115538,544],{"class":495},[35,115540,101734],{"class":359},[35,115542,101636],{"class":58},[35,115544,505],{"class":359},[35,115546,115547,115549,115551,115553,115555,115557],{"class":37,"line":45},[35,115548,31149],{"class":58},[35,115550,114454],{"class":359},[35,115552,544],{"class":495},[35,115554,114459],{"class":359},[35,115556,31149],{"class":58},[35,115558,114464],{"class":359},[21,115560,115561,115562,115564],{},"这和前面章节一样，只是现在放到了类的 ",[32,115563,31155],{}," 里。",[21,115566,115567],{},"缓存 site ID：",[25,115569,115571],{"className":30704,"code":115570,"language":30706,"meta":30,"style":30},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[32,115572,115573,115587],{"__ignoreMap":30},[35,115574,115575,115577,115579,115581,115583,115585],{"class":37,"line":38},[35,115576,31149],{"class":58},[35,115578,114475],{"class":359},[35,115580,544],{"class":495},[35,115582,114480],{"class":359},[35,115584,89879],{"class":58},[35,115586,505],{"class":359},[35,115588,115589,115591,115593,115595,115597,115599],{"class":37,"line":45},[35,115590,31149],{"class":58},[35,115592,114496],{"class":359},[35,115594,544],{"class":495},[35,115596,114480],{"class":359},[35,115598,89879],{"class":58},[35,115600,505],{"class":359},[21,115602,115603],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[21,115605,115606],{},"reset：",[25,115608,115610],{"className":30704,"code":115609,"language":30706,"meta":30,"style":30},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[32,115611,115612],{"__ignoreMap":30},[35,115613,115614,115616,115618,115620,115622,115624,115626,115628,115630,115632,115634,115636,115638,115640,115642,115644,115646],{"class":37,"line":38},[35,115615,32273],{"class":495},[35,115617,114844],{"class":48},[35,115619,114847],{"class":359},[35,115621,949],{"class":495},[35,115623,114852],{"class":359},[35,115625,502],{"class":58},[35,115627,25441],{"class":495},[35,115629,39259],{"class":58},[35,115631,13898],{"class":495},[35,115633,39259],{"class":58},[35,115635,114865],{"class":359},[35,115637,114868],{"class":58},[35,115639,25441],{"class":495},[35,115641,39259],{"class":58},[35,115643,13898],{"class":495},[35,115645,39259],{"class":58},[35,115647,31112],{"class":359},[21,115649,115650,115652],{},[32,115651,70382],{}," 做四件事：",[14,115654,115655,115658,115661,115664],{},[17,115656,115657],{},"设置随机种子。",[17,115659,115660],{},"重置 MuJoCo data。",[17,115662,115663],{},"随机初始化关节角。",[17,115665,115666],{},"返回初始观测和 info。",[21,115668,115669],{},"step：",[25,115671,115673],{"className":30704,"code":115672,"language":30706,"meta":30,"style":30},"def step(self, action):\n",[32,115674,115675],{"__ignoreMap":30},[35,115676,115677,115679,115681],{"class":37,"line":38},[35,115678,32273],{"class":495},[35,115680,115009],{"class":48},[35,115682,115012],{"class":359},[21,115684,115685,115687],{},[32,115686,107456],{}," 做六件事：",[14,115689,115690,115693,115699,115702,115705,115708],{},[17,115691,115692],{},"检查并裁剪 action。",[17,115694,115695,115696,28711],{},"写入 ",[32,115697,115698],{},"self.data.ctrl",[17,115700,115701],{},"连续推进若干个 MuJoCo 物理步。",[17,115703,115704],{},"计算新观测。",[17,115706,115707],{},"计算奖励和结束条件。",[17,115709,115710],{},"返回 Gymnasium 标准五元组。",[465,115712,102030],{"id":102030},[25,115714,115716],{"className":30704,"code":115715,"language":30706,"meta":30,"style":30},"import gymnasium as gym\n",[32,115717,115718],{"__ignoreMap":30},[35,115719,115720,115722,115724,115726],{"class":37,"line":38},[35,115721,30718],{"class":495},[35,115723,114217],{"class":359},[35,115725,31709],{"class":495},[35,115727,114222],{"class":359},[21,115729,115730,115731,115733,115734,115737],{},"导入 Gymnasium，并起别名 ",[32,115732,113862],{},"。后面写 ",[32,115735,115736],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[25,115739,115741],{"className":30704,"code":115740,"language":30706,"meta":30,"style":30},"from gymnasium import spaces\n",[32,115742,115743],{"__ignoreMap":30},[35,115744,115745,115747,115749,115751],{"class":37,"line":38},[35,115746,31063],{"class":495},[35,115748,114217],{"class":359},[35,115750,30718],{"class":495},[35,115752,114249],{"class":359},[21,115754,115755,115756,115759],{},"导入空间定义工具。",[32,115757,115758],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[25,115761,115762],{"className":30704,"code":115501,"language":30706,"meta":30,"style":30},[32,115763,115764],{"__ignoreMap":30},[35,115765,115766,115768,115770,115772,115774,115776,115778],{"class":37,"line":38},[35,115767,15028],{"class":495},[35,115769,114379],{"class":48},[35,115771,499],{"class":359},[35,115773,113862],{"class":48},[35,115775,1052],{"class":359},[35,115777,114388],{"class":48},[35,115779,31112],{"class":359},[21,115781,115782,115783,115786,115787,115789,115790,101343,115792,115794],{},"定义一个类，名字叫 ",[32,115784,115785],{},"ReacherEnv","。括号里的 ",[32,115788,115736],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[32,115791,70382],{},[32,115793,107456],{}," 这两个核心方法。",[25,115796,115798],{"className":30704,"code":115797,"language":30706,"meta":30,"style":30},"metadata = {\"render_modes\": []}\n",[32,115799,115800],{"__ignoreMap":30},[35,115801,115802,115805,115807,115809,115811],{"class":37,"line":38},[35,115803,115804],{"class":359},"metadata ",[35,115806,544],{"class":495},[35,115808,4782],{"class":359},[35,115810,114402],{"class":306},[35,115812,114405],{"class":359},[21,115814,115815],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[25,115817,115819],{"className":30704,"code":115818,"language":30706,"meta":30,"style":30},"def __init__(self) -> None:\n",[32,115820,115821],{"__ignoreMap":30},[35,115822,115823,115825,115827,115829,115831],{"class":37,"line":38},[35,115824,32273],{"class":495},[35,115826,31130],{"class":58},[35,115828,114418],{"class":359},[35,115830,96011],{"class":58},[35,115832,4073],{"class":359},[21,115834,115835,115837,115838,28711],{},[32,115836,31155],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[32,115839,115840],{},"env = ReacherEnv()",[25,115842,115844],{"className":30704,"code":115843,"language":30706,"meta":30,"style":30},"super().__init__()\n",[32,115845,115846],{"__ignoreMap":30},[35,115847,115848,115851,115853,115855],{"class":37,"line":38},[35,115849,115850],{"class":58},"super",[35,115852,17595],{"class":359},[35,115854,31155],{"class":58},[35,115856,2317],{"class":359},[21,115858,115859,115860,115862],{},"调用父类 ",[32,115861,115736],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[25,115864,115865],{"className":30704,"code":115528,"language":30706,"meta":30,"style":30},[32,115866,115867,115881],{"__ignoreMap":30},[35,115868,115869,115871,115873,115875,115877,115879],{"class":37,"line":38},[35,115870,31149],{"class":58},[35,115872,114439],{"class":359},[35,115874,544],{"class":495},[35,115876,101734],{"class":359},[35,115878,101636],{"class":58},[35,115880,505],{"class":359},[35,115882,115883,115885,115887,115889,115891,115893],{"class":37,"line":45},[35,115884,31149],{"class":58},[35,115886,114454],{"class":359},[35,115888,544],{"class":495},[35,115890,114459],{"class":359},[35,115892,31149],{"class":58},[35,115894,114464],{"class":359},[21,115896,115897,115898,115900,115901,101343,115904,115907],{},"把 MuJoCo 模型和状态保存到 ",[32,115899,31149],{}," 上。",[32,115902,115903],{},"self.model",[32,115905,115906],{},"self.data"," 表示这个环境对象自己的模型和状态。",[25,115909,115910],{"className":30704,"code":115570,"language":30706,"meta":30,"style":30},[32,115911,115912,115926],{"__ignoreMap":30},[35,115913,115914,115916,115918,115920,115922,115924],{"class":37,"line":38},[35,115915,31149],{"class":58},[35,115917,114475],{"class":359},[35,115919,544],{"class":495},[35,115921,114480],{"class":359},[35,115923,89879],{"class":58},[35,115925,505],{"class":359},[35,115927,115928,115930,115932,115934,115936,115938],{"class":37,"line":45},[35,115929,31149],{"class":58},[35,115931,114496],{"class":359},[35,115933,544],{"class":495},[35,115935,114480],{"class":359},[35,115937,89879],{"class":58},[35,115939,505],{"class":359},[21,115941,115942,115943,101343,115946,115949],{},"提前查好 tip 和 target 的 site ID。这样 ",[32,115944,115945],{},"_get_obs",[32,115947,115948],{},"_get_reward"," 里就不用每次按名字查找。",[25,115951,115953],{"className":30704,"code":115952,"language":30706,"meta":30,"style":30},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[32,115954,115955,115965,115975],{"__ignoreMap":30},[35,115956,115957,115959,115961,115963],{"class":37,"line":38},[35,115958,31149],{"class":58},[35,115960,114189],{"class":359},[35,115962,544],{"class":495},[35,115964,54753],{"class":58},[35,115966,115967,115969,115971,115973],{"class":37,"line":45},[35,115968,31149],{"class":58},[35,115970,114568],{"class":359},[35,115972,544],{"class":495},[35,115974,114573],{"class":58},[35,115976,115977,115979,115981,115983],{"class":37,"line":55},[35,115978,31149],{"class":58},[35,115980,114028],{"class":359},[35,115982,544],{"class":495},[35,115984,47659],{"class":58},[21,115986,115987,115990,115991,115994,115995,115998],{},[32,115988,115989],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[32,115992,115993],{},"max_steps"," 是一个 episode 最多运行多少步。",[32,115996,115997],{},"steps"," 记录当前 episode 已经走了多少步。",[25,116000,116001],{"className":30704,"code":114067,"language":30706,"meta":30,"style":30},[32,116002,116003],{"__ignoreMap":30},[35,116004,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043],{"class":37,"line":38},[35,116006,31149],{"class":58},[35,116008,114076],{"class":359},[35,116010,544],{"class":495},[35,116012,114081],{"class":359},[35,116014,114084],{"class":5550},[35,116016,114087],{"class":495},[35,116018,102725],{"class":58},[35,116020,12769],{"class":359},[35,116022,114094],{"class":5550},[35,116024,544],{"class":495},[35,116026,102725],{"class":58},[35,116028,12769],{"class":359},[35,116030,96288],{"class":5550},[35,116032,544],{"class":495},[35,116034,499],{"class":359},[35,116036,574],{"class":58},[35,116038,114111],{"class":359},[35,116040,93825],{"class":5550},[35,116042,544],{"class":495},[35,116044,114118],{"class":359},[21,116046,116047,116048,116051,116052,101343,116055,116058],{},"定义动作空间。",[32,116049,116050],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[32,116053,116054],{},"low=-1.0",[32,116056,116057],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[25,116060,116061],{"className":30704,"code":114128,"language":30706,"meta":30,"style":30},[32,116062,116063],{"__ignoreMap":30},[35,116064,116065,116067,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099],{"class":37,"line":38},[35,116066,31149],{"class":58},[35,116068,114137],{"class":359},[35,116070,544],{"class":495},[35,116072,114081],{"class":359},[35,116074,114084],{"class":5550},[35,116076,114087],{"class":495},[35,116078,114148],{"class":359},[35,116080,114094],{"class":5550},[35,116082,544],{"class":495},[35,116084,114148],{"class":359},[35,116086,96288],{"class":5550},[35,116088,544],{"class":495},[35,116090,499],{"class":359},[35,116092,940],{"class":58},[35,116094,114111],{"class":359},[35,116096,93825],{"class":5550},[35,116098,544],{"class":495},[35,116100,114118],{"class":359},[21,116102,116103,116104,116107,116108,116111],{},"定义观测空间。",[32,116105,116106],{},"shape=(10,)"," 表示观测是 10 个数。",[32,116109,116110],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[25,116113,116115],{"className":30704,"code":116114,"language":30706,"meta":30,"style":30},"def _get_obs(self) -> np.ndarray:\n",[32,116116,116117],{"__ignoreMap":30},[35,116118,116119,116121,116123],{"class":37,"line":38},[35,116120,32273],{"class":495},[35,116122,114678],{"class":48},[35,116124,114681],{"class":359},[21,116126,116127,116128,116130],{},"定义内部函数，用来生成观测。函数名前面的 ",[32,116129,1486],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[25,116132,116134],{"className":30704,"code":116133,"language":30706,"meta":30,"style":30},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[32,116135,116136,116150],{"__ignoreMap":30},[35,116137,116138,116140,116142,116144,116146,116148],{"class":37,"line":38},[35,116139,111890],{"class":359},[35,116141,544],{"class":495},[35,116143,39199],{"class":58},[35,116145,114692],{"class":359},[35,116147,31149],{"class":58},[35,116149,114697],{"class":359},[35,116151,116152,116154,116156,116158,116160,116162],{"class":37,"line":45},[35,116153,111900],{"class":359},[35,116155,544],{"class":495},[35,116157,39199],{"class":58},[35,116159,114692],{"class":359},[35,116161,31149],{"class":58},[35,116163,114712],{"class":359},[21,116165,116166],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[25,116168,116170],{"className":30704,"code":116169,"language":30706,"meta":30,"style":30},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[32,116171,116172,116188],{"__ignoreMap":30},[35,116173,116174,116176,116178,116180,116182,116184,116186],{"class":37,"line":38},[35,116175,111176],{"class":359},[35,116177,544],{"class":495},[35,116179,114721],{"class":359},[35,116181,31149],{"class":58},[35,116183,114726],{"class":359},[35,116185,31149],{"class":58},[35,116187,114731],{"class":359},[35,116189,116190,116192],{"class":37,"line":45},[35,116191,17380],{"class":495},[35,116193,114738],{"class":359},[21,116195,116196,116197,116200,116201,116203],{},"拼接观测，并转换成 ",[32,116198,116199],{},"float32","。很多强化学习库默认使用 ",[32,116202,116199],{},"，所以这里主动转换。",[25,116205,116206],{"className":30704,"code":115609,"language":30706,"meta":30,"style":30},[32,116207,116208],{"__ignoreMap":30},[35,116209,116210,116212,116214,116216,116218,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242],{"class":37,"line":38},[35,116211,32273],{"class":495},[35,116213,114844],{"class":48},[35,116215,114847],{"class":359},[35,116217,949],{"class":495},[35,116219,114852],{"class":359},[35,116221,502],{"class":58},[35,116223,25441],{"class":495},[35,116225,39259],{"class":58},[35,116227,13898],{"class":495},[35,116229,39259],{"class":58},[35,116231,114865],{"class":359},[35,116233,114868],{"class":58},[35,116235,25441],{"class":495},[35,116237,39259],{"class":58},[35,116239,13898],{"class":495},[35,116241,39259],{"class":58},[35,116243,31112],{"class":359},[21,116245,116246,116247,116249,116250,116253],{},"定义 reset。",[32,116248,114888],{}," 用来控制随机数，保证实验可以复现。",[32,116251,116252],{},"options"," 用来接收额外配置，本章暂时不用。",[25,116255,116257],{"className":30704,"code":116256,"language":30706,"meta":30,"style":30},"super().reset(seed=seed)\n",[32,116258,116259],{"__ignoreMap":30},[35,116260,116261,116263,116265,116267,116269],{"class":37,"line":38},[35,116262,115850],{"class":58},[35,116264,114885],{"class":359},[35,116266,114888],{"class":5550},[35,116268,544],{"class":495},[35,116270,114893],{"class":359},[21,116272,116273,116274,116277],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[32,116275,116276],{},"self.np_random"," 生成可复现的随机数。",[25,116279,116281],{"className":30704,"code":116280,"language":30706,"meta":30,"style":30},"mujoco.mj_resetData(self.model, self.data)\n",[32,116282,116283],{"__ignoreMap":30},[35,116284,116285,116288,116290,116292,116294],{"class":37,"line":38},[35,116286,116287],{"class":359},"mujoco.mj_resetData(",[35,116289,31149],{"class":58},[35,116291,114903],{"class":359},[35,116293,31149],{"class":58},[35,116295,114908],{"class":359},[21,116297,116298],{},"把 MuJoCo 状态重置到默认状态。",[25,116300,116302],{"className":30704,"code":116301,"language":30706,"meta":30,"style":30},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[32,116303,116304],{"__ignoreMap":30},[35,116305,116306,116308,116310,116312,116314,116316,116318,116320,116322,116324,116326,116328,116330,116332,116334,116336,116338],{"class":37,"line":38},[35,116307,31149],{"class":58},[35,116309,114919],{"class":359},[35,116311,544],{"class":495},[35,116313,39199],{"class":58},[35,116315,114926],{"class":359},[35,116317,114084],{"class":5550},[35,116319,114087],{"class":495},[35,116321,86535],{"class":58},[35,116323,12769],{"class":359},[35,116325,114094],{"class":5550},[35,116327,544],{"class":495},[35,116329,86535],{"class":58},[35,116331,12769],{"class":359},[35,116333,31822],{"class":5550},[35,116335,544],{"class":495},[35,116337,31149],{"class":58},[35,116339,114951],{"class":359},[21,116341,115663,116342,116345,116346,116349,116350,116352],{},[32,116343,116344],{},"[:]"," 表示修改整个数组。",[32,116347,116348],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[32,116351,102472],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[25,116354,116356],{"className":30704,"code":116355,"language":30706,"meta":30,"style":30},"self.data.qvel[:] = 0.0\n",[32,116357,116358],{"__ignoreMap":30},[35,116359,116360,116362,116364,116366],{"class":37,"line":38},[35,116361,31149],{"class":58},[35,116363,114958],{"class":359},[35,116365,544],{"class":495},[35,116367,105083],{"class":58},[21,116369,116370],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[25,116372,116374],{"className":30704,"code":116373,"language":30706,"meta":30,"style":30},"self.steps = 0\nreturn self._get_obs(), {}\n",[32,116375,116376,116386],{"__ignoreMap":30},[35,116377,116378,116380,116382,116384],{"class":37,"line":38},[35,116379,31149],{"class":58},[35,116381,114028],{"class":359},[35,116383,544],{"class":495},[35,116385,47659],{"class":58},[35,116387,116388,116390,116392],{"class":37,"line":45},[35,116389,17380],{"class":495},[35,116391,39199],{"class":58},[35,116393,114998],{"class":359},[21,116395,116396],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[25,116398,116399],{"className":30704,"code":115672,"language":30706,"meta":30,"style":30},[32,116400,116401],{"__ignoreMap":30},[35,116402,116403,116405,116407],{"class":37,"line":38},[35,116404,32273],{"class":495},[35,116406,115009],{"class":48},[35,116408,115012],{"class":359},[21,116410,116411],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[25,116413,116415],{"className":30704,"code":116414,"language":30706,"meta":30,"style":30},"action = np.asarray(action, dtype=np.float32)\n",[32,116416,116417],{"__ignoreMap":30},[35,116418,116419,116421,116423,116425,116427,116429],{"class":37,"line":38},[35,116420,107764],{"class":359},[35,116422,544],{"class":495},[35,116424,115021],{"class":359},[35,116426,93825],{"class":5550},[35,116428,544],{"class":495},[35,116430,114118],{"class":359},[21,116432,116433,116434,28711],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[32,116435,116199],{},[25,116437,116439],{"className":30704,"code":116438,"language":30706,"meta":30,"style":30},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[32,116440,116441],{"__ignoreMap":30},[35,116442,116443,116445,116447,116449,116451,116453,116455],{"class":37,"line":38},[35,116444,107764],{"class":359},[35,116446,544],{"class":495},[35,116448,107769],{"class":359},[35,116450,31149],{"class":58},[35,116452,115040],{"class":359},[35,116454,31149],{"class":58},[35,116456,115045],{"class":359},[21,116458,116459],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[25,116461,116463],{"className":30704,"code":116462,"language":30706,"meta":30,"style":30},"self.data.ctrl[:] = action\n",[32,116464,116465],{"__ignoreMap":30},[35,116466,116467,116469,116471,116473],{"class":37,"line":38},[35,116468,31149],{"class":58},[35,116470,115056],{"class":359},[35,116472,544],{"class":495},[35,116474,107792],{"class":359},[21,116476,116477],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[25,116479,116481],{"className":30704,"code":116480,"language":30706,"meta":30,"style":30},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[32,116482,116483,116499],{"__ignoreMap":30},[35,116484,116485,116487,116489,116491,116493,116495,116497],{"class":37,"line":38},[35,116486,3359],{"class":495},[35,116488,101823],{"class":359},[35,116490,26374],{"class":495},[35,116492,32769],{"class":58},[35,116494,499],{"class":359},[35,116496,31149],{"class":58},[35,116498,115077],{"class":359},[35,116500,116501,116504,116506,116508,116510],{"class":37,"line":45},[35,116502,116503],{"class":359},"    mujoco.mj_step(",[35,116505,31149],{"class":58},[35,116507,114903],{"class":359},[35,116509,31149],{"class":58},[35,116511,114908],{"class":359},[21,116513,116514,116515,116518,116519,116521,116522,28711],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[32,116516,116517],{},"frame_skip=5","，所以外部调用一次 ",[32,116520,114199],{},"，内部实际执行 5 次 ",[32,116523,101540],{},[25,116525,116527],{"className":30704,"code":116526,"language":30706,"meta":30,"style":30},"self.steps += 1\n",[32,116528,116529],{"__ignoreMap":30},[35,116530,116531,116533,116535,116537],{"class":37,"line":38},[35,116532,31149],{"class":58},[35,116534,114028],{"class":359},[35,116536,9811],{"class":495},[35,116538,56025],{"class":58},[21,116540,116541],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[25,116543,116545],{"className":30704,"code":116544,"language":30706,"meta":30,"style":30},"obs = self._get_obs()\nreward = self._get_reward()\n",[32,116546,116547,116557],{"__ignoreMap":30},[35,116548,116549,116551,116553,116555],{"class":37,"line":38},[35,116550,111176],{"class":359},[35,116552,544],{"class":495},[35,116554,39199],{"class":58},[35,116556,115119],{"class":359},[35,116558,116559,116561,116563,116565],{"class":37,"line":45},[35,116560,111327],{"class":359},[35,116562,544],{"class":495},[35,116564,39199],{"class":58},[35,116566,115130],{"class":359},[21,116568,116569],{},"计算新的观测和奖励。",[25,116571,116573],{"className":30704,"code":116572,"language":30706,"meta":30,"style":30},"dist = float(np.linalg.norm(tip - target))\n",[32,116574,116575],{"__ignoreMap":30},[35,116576,116577,116579,116581,116583,116585,116587],{"class":37,"line":38},[35,116578,111918],{"class":359},[35,116580,544],{"class":495},[35,116582,110119],{"class":58},[35,116584,115173],{"class":359},[35,116586,1026],{"class":495},[35,116588,115178],{"class":359},[21,116590,116591],{},"计算末端到目标的距离，并转换成 Python float。",[25,116593,116594],{"className":30704,"code":113999,"language":30706,"meta":30,"style":30},[32,116595,116596,116608],{"__ignoreMap":30},[35,116597,116598,116600,116602,116604,116606],{"class":37,"line":38},[35,116599,114006],{"class":359},[35,116601,544],{"class":495},[35,116603,114011],{"class":359},[35,116605,1404],{"class":495},[35,116607,114016],{"class":58},[35,116609,116610,116612,116614,116616,116618,116620,116622],{"class":37,"line":45},[35,116611,114021],{"class":359},[35,116613,544],{"class":495},[35,116615,39199],{"class":58},[35,116617,114028],{"class":359},[35,116619,2060],{"class":495},[35,116621,39199],{"class":58},[35,116623,114035],{"class":359},[21,116625,116626],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[25,116628,116630],{"className":30704,"code":116629,"language":30706,"meta":30,"style":30},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[32,116631,116632,116645],{"__ignoreMap":30},[35,116633,116634,116637,116639,116641,116643],{"class":37,"line":38},[35,116635,116636],{"class":359},"info ",[35,116638,544],{"class":495},[35,116640,4782],{"class":359},[35,116642,115224],{"class":306},[35,116644,115227],{"class":359},[35,116646,116647,116649],{"class":37,"line":45},[35,116648,17380],{"class":495},[35,116650,115234],{"class":359},[21,116652,116653,116656],{},[32,116654,116655],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[25,116658,116660],{"className":30704,"code":116659,"language":30706,"meta":30,"style":30},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[32,116661,116662,116671],{"__ignoreMap":30},[35,116663,116664,116667,116669],{"class":37,"line":38},[35,116665,116666],{"class":359},"env ",[35,116668,544],{"class":495},[35,116670,115264],{"class":359},[35,116672,116673,116675,116677,116679,116681,116683,116685],{"class":37,"line":45},[35,116674,113722],{"class":359},[35,116676,544],{"class":495},[35,116678,115274],{"class":359},[35,116680,114888],{"class":5550},[35,116682,544],{"class":495},[35,116684,687],{"class":58},[35,116686,505],{"class":359},[21,116688,116689,116690,116693],{},"创建环境并重置。",[32,116691,116692],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[25,116695,116697],{"className":30704,"code":116696,"language":30706,"meta":30,"style":30},"action = env.action_space.sample()\n",[32,116698,116699],{"__ignoreMap":30},[35,116700,116701,116703,116705],{"class":37,"line":38},[35,116702,107764],{"class":359},[35,116704,544],{"class":495},[35,116706,115343],{"class":359},[21,116708,116709],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[438,116711,102638],{"id":102637},[21,116713,105806],{},[25,116715,116718],{"className":116716,"code":116717,"language":5521,"meta":30},[5519],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[32,116719,116717],{"__ignoreMap":30},[21,116721,116722],{},"这个环境已经具备强化学习环境的基本结构。",[21,116724,116725],{},"主函数里使用随机动作：",[25,116727,116728],{"className":30704,"code":116696,"language":30706,"meta":30,"style":30},[32,116729,116730],{"__ignoreMap":30},[35,116731,116732,116734,116736],{"class":37,"line":38},[35,116733,107764],{"class":359},[35,116735,544],{"class":495},[35,116737,115343],{"class":359},[21,116739,116740],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[438,116742,102670],{"id":102669},[14,116744,116745,116748,116754,116763,116772,116781,116787],{},[17,116746,116747],{},"运行程序。",[17,116749,116750,116751,28711],{},"确认 ",[32,116752,116753],{},"obs.shape == (10,)",[17,116755,111503,116756,116759,116760,28711],{},[32,116757,116758],{},"env.action_space","，应类似 ",[32,116761,116762],{},"Box(-1.0, 1.0, (2,), float32)",[17,116764,105907,116765,116768,116769,28711],{},[32,116766,116767],{},"self.max_steps = 10","，确认环境会更快 ",[32,116770,116771],{},"truncated=True",[17,116773,102733,116774,102736,116777,116780],{},[32,116775,116776],{},"terminated = dist \u003C 0.05",[32,116778,116779],{},"dist \u003C 0.2","，观察是否更容易结束。",[17,116782,102733,116783,116786],{},[32,116784,116785],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[17,116788,116789,116790,116792,116793,116796],{},"在 ",[32,116791,116655],{}," 里加入 ",[32,116794,116795],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[438,116798,102775],{"id":102774},[465,116800,116802],{"id":116801},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[21,116804,116805,116806,116808],{},"Gymnasium 的 ",[32,116807,107456],{}," 返回 5 个值:",[25,116810,116812],{"className":30704,"code":116811,"language":30706,"meta":30,"style":30},"obs, reward, terminated, truncated, info\n",[32,116813,116814],{"__ignoreMap":30},[35,116815,116816],{"class":37,"line":38},[35,116817,116811],{"class":359},[21,116819,116820],{},"不是旧 Gym 的 4 个值。",[465,116822,116824,116827],{"id":116823},"datactrl-action-维度错误",[32,116825,116826],{},"data.ctrl[:] = action"," 维度错误",[21,116829,102845],{},[25,116831,116833],{"className":30704,"code":116832,"language":30706,"meta":30,"style":30},"print(self.model.nu)\nprint(action.shape)\n",[32,116834,116835,116846],{"__ignoreMap":30},[35,116836,116837,116839,116841,116843],{"class":37,"line":38},[35,116838,30741],{"class":58},[35,116840,499],{"class":359},[35,116842,31149],{"class":58},[35,116844,116845],{"class":359},".model.nu)\n",[35,116847,116848,116850],{"class":37,"line":45},[35,116849,30741],{"class":58},[35,116851,116852],{"class":359},"(action.shape)\n",[21,116854,116855],{},"两者必须匹配。",[465,116857,116859],{"id":116858},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[21,116861,102784],{},[25,116863,116865],{"className":30704,"code":116864,"language":30706,"meta":30,"style":30},"mujoco.mj_forward(self.model, self.data)\n",[32,116866,116867],{"__ignoreMap":30},[35,116868,116869,116872,116874,116876,116878],{"class":37,"line":38},[35,116870,116871],{"class":359},"mujoco.mj_forward(",[35,116873,31149],{"class":58},[35,116875,114903],{"class":359},[35,116877,31149],{"class":58},[35,116879,114908],{"class":359},[465,116881,116883,116885],{"id":116882},"observation_space-维度和-obs-不一致",[32,116884,113922],{}," 维度和 obs 不一致",[21,116887,102897],{},[25,116889,116891],{"className":30704,"code":116890,"language":30706,"meta":30,"style":30},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[32,116892,116893,116903,116910],{"__ignoreMap":30},[35,116894,116895,116897,116899,116901],{"class":37,"line":38},[35,116896,111176],{"class":359},[35,116898,544],{"class":495},[35,116900,39199],{"class":58},[35,116902,115119],{"class":359},[35,116904,116905,116907],{"class":37,"line":45},[35,116906,30741],{"class":58},[35,116908,116909],{"class":359},"(obs.shape)\n",[35,116911,116912,116914,116916,116918],{"class":37,"line":55},[35,116913,30741],{"class":58},[35,116915,499],{"class":359},[35,116917,31149],{"class":58},[35,116919,116920],{"class":359},".observation_space.shape)\n",[21,116922,116923],{},"两者必须一致。本章观测是：",[25,116925,116928],{"className":116926,"code":116927,"language":5521,"meta":30},[5519],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[32,116929,116927],{"__ignoreMap":30},[465,116931,116933],{"id":116932},"action-超过范围","action 超过范围",[21,116935,116936],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[25,116938,116939],{"className":30704,"code":116438,"language":30706,"meta":30,"style":30},[32,116940,116941],{"__ignoreMap":30},[35,116942,116943,116945,116947,116949,116951,116953,116955],{"class":37,"line":38},[35,116944,107764],{"class":359},[35,116946,544],{"class":495},[35,116948,107769],{"class":359},[35,116950,31149],{"class":58},[35,116952,115040],{"class":359},[35,116954,31149],{"class":58},[35,116956,115045],{"class":359},[21,116958,116959,116960,28711],{},"这能避免无效动作直接写入 ",[32,116961,101401],{},[465,116963,116965],{"id":116964},"忘记返回-info","忘记返回 info",[21,116967,116805,116968,101343,116970,116972],{},[32,116969,70382],{},[32,116971,107456],{}," 都会返回 info：",[25,116974,116975],{"className":30704,"code":113715,"language":30706,"meta":30,"style":30},[32,116976,116977,116985],{"__ignoreMap":30},[35,116978,116979,116981,116983],{"class":37,"line":38},[35,116980,113722],{"class":359},[35,116982,544],{"class":495},[35,116984,113727],{"class":359},[35,116986,116987,116989,116991],{"class":37,"line":45},[35,116988,113732],{"class":359},[35,116990,544],{"class":495},[35,116992,113737],{"class":359},[21,116994,116995,116996,28711],{},"即使暂时没有额外信息，也返回 ",[32,116997,32785],{},[438,116999,117001],{"id":117000},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[21,117003,117004],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[14,117006,117007,117010,117013,117016,117019,117022],{},[17,117008,117009],{},"更稳定的 reward。",[17,117011,117012],{},"合理的 episode 长度。",[17,117014,117015],{},"可重复的随机目标采样。",[17,117017,117018],{},"render 接口。",[17,117020,117021],{},"环境注册代码。",[17,117023,117024],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[21,117026,117027],{},"如果只是自己写训练循环，最小形式是：",[25,117029,117031],{"className":30704,"code":117030,"language":30706,"meta":30,"style":30},"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",[32,117032,117033,117041,117057,117061,117077,117086,117095,117105],{"__ignoreMap":30},[35,117034,117035,117037,117039],{"class":37,"line":38},[35,117036,116666],{"class":359},[35,117038,544],{"class":495},[35,117040,115264],{"class":359},[35,117042,117043,117045,117047,117049,117051,117053,117055],{"class":37,"line":45},[35,117044,113722],{"class":359},[35,117046,544],{"class":495},[35,117048,115274],{"class":359},[35,117050,114888],{"class":5550},[35,117052,544],{"class":495},[35,117054,687],{"class":58},[35,117056,505],{"class":359},[35,117058,117059],{"class":37,"line":55},[35,117060,141],{"emptyLinePlaceholder":140},[35,117062,117063,117065,117067,117069,117071,117073,117075],{"class":37,"line":65},[35,117064,3359],{"class":495},[35,117066,101823],{"class":359},[35,117068,26374],{"class":495},[35,117070,32769],{"class":58},[35,117072,499],{"class":359},[35,117074,6744],{"class":58},[35,117076,31112],{"class":359},[35,117078,117079,117082,117084],{"class":37,"line":74},[35,117080,117081],{"class":359},"    action ",[35,117083,544],{"class":495},[35,117085,115343],{"class":359},[35,117087,117088,117091,117093],{"class":37,"line":83},[35,117089,117090],{"class":359},"    obs, reward, terminated, truncated, info ",[35,117092,544],{"class":495},[35,117094,113737],{"class":359},[35,117096,117097,117099,117101,117103],{"class":37,"line":92},[35,117098,3435],{"class":495},[35,117100,115409],{"class":359},[35,117102,115412],{"class":495},[35,117104,115415],{"class":359},[35,117106,117107,117110,117112],{"class":37,"line":101},[35,117108,117109],{"class":359},"        obs, info ",[35,117111,544],{"class":495},[35,117113,113727],{"class":359},[438,117115,117117],{"id":117116},"_9本章小结","9.本章小结",[21,117119,117120],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[25,117122,117125],{"className":117123,"code":117124,"language":5521,"meta":30},[5519],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[32,117126,117124],{"__ignoreMap":30},[21,117128,117129],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[416,117131,117132],{},"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":30,"searchDepth":45,"depth":45,"links":117134},[117135,117136,117137,117144,117148,117149,117150,117160,117161],{"id":100971,"depth":45,"text":100972},{"id":101094,"depth":45,"text":101095},{"id":101369,"depth":45,"text":101370,"children":117138},[117139,117141,117143],{"id":113946,"depth":55,"text":117140},"terminated 和 truncated 的区别",{"id":114049,"depth":55,"text":117142},"observation_space 和 action_space",{"id":114176,"depth":55,"text":114177},{"id":101577,"depth":45,"text":101578,"children":117145},[117146,117147],{"id":101894,"depth":55,"text":101894},{"id":102030,"depth":55,"text":102030},{"id":102637,"depth":45,"text":102638},{"id":102669,"depth":45,"text":102670},{"id":102774,"depth":45,"text":102775,"children":117151},[117152,117153,117155,117156,117158,117159],{"id":116801,"depth":55,"text":116802},{"id":116823,"depth":55,"text":117154},"data.ctrl[:] = action 维度错误",{"id":116858,"depth":55,"text":116859},{"id":116882,"depth":55,"text":117157},"observation_space 维度和 obs 不一致",{"id":116932,"depth":55,"text":116933},{"id":116964,"depth":55,"text":116965},{"id":117000,"depth":45,"text":117001},{"id":117116,"depth":45,"text":117117},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113699,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117168,"title":117169,"body":117170,"description":117593,"extension":422,"meta":117594,"navigation":140,"path":117595,"seo":117596,"stem":117597,"__hash__":117598},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117171,"toc":117583},[117172,117176,117179,117182,117202,117208,117214,117224,117227,117230,117250,117253,117257,117260,117266,117269,117283,117286,117289,117363,117366,117372,117375,117398,117401,117451,117454,117460,117463,117466,117469,117488,117491,117497,117500,117503,117506,117526,117529,117532,117535,117580],[10,117173,117175],{"id":117174},"mujoco-学习","MuJoCo 学习",[21,117177,117178],{},"初版",[21,117180,117181],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[14,117183,117184,117187,117190,117199],{},[17,117185,117186],{},"MuJoCo 模型文件在描述什么。",[17,117188,117189],{},"Python 代码怎样读取和推进仿真。",[17,117191,117192,708,117194,708,117196,117198],{},[32,117193,104352],{},[32,117195,104682],{},[32,117197,104685],{}," 这些数组为什么重要。",[17,117200,117201],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[21,117203,117204,117205,117207],{},"默认环境为 Fedora 44、Python >= 3.10、",[32,117206,101352],{}," 官方 Python bindings。",[21,117209,117210,117211,117213],{},"注意：本文禁止使用 ",[32,117212,101337],{},"。所有示例均使用：",[25,117215,117216],{"className":30704,"code":101900,"language":30706,"meta":30,"style":30},[32,117217,117218],{"__ignoreMap":30},[35,117219,117220,117222],{"class":37,"line":38},[35,117221,30718],{"class":495},[35,117223,101623],{"class":359},[438,117225,117226],{"id":117226},"适合谁阅读",[21,117228,117229],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[14,117231,117232,117235,117238,117241],{},[17,117233,117234],{},"没学过 MuJoCo，只会一点 Python。",[17,117236,117237],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[17,117239,117240],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[17,117242,117243,117244,117246,117247,117249],{},"以前接触过 ",[32,117245,101337],{},"，现在想迁移到官方 ",[32,117248,101346],{}," Python bindings。",[21,117251,117252],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[438,117254,117256],{"id":117255},"mujoco-到底是什么","MuJoCo 到底是什么",[21,117258,117259],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[25,117261,117264],{"className":117262,"code":117263,"language":5521,"meta":30},[5519],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[32,117265,117263],{"__ignoreMap":30},[21,117267,117268],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[14,117270,117271,117274,117277,117280],{},[17,117272,117273],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[17,117275,117276],{},"快速测试控制算法，不必一开始就上真实机器人。",[17,117278,117279],{},"生成强化学习环境。",[17,117281,117282],{},"采集状态、动作、图像、奖励等训练数据。",[438,117284,117285],{"id":117285},"学习前的心智模型",[21,117287,117288],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[633,117290,117291,117303],{},[636,117292,117293],{},[639,117294,117295,117298,117301],{},[642,117296,117297],{"align":24070},"部分",[642,117299,117300],{"align":24070},"负责什么",[642,117302,21521],{"align":24070},[680,117304,117305,117316,117328,117340,117352],{},[639,117306,117307,117310,117313],{},[685,117308,117309],{"align":24070},"MJCF XML",[685,117311,117312],{"align":24070},"定义世界和机器人结构",[685,117314,117315],{"align":24070},"地面、盒子、关节、电机、摄像头",[639,117317,117318,117322,117325],{},[685,117319,117320],{"align":24070},[32,117321,101034],{},[685,117323,117324],{"align":24070},"编译后的静态模型",[685,117326,117327],{"align":24070},"有几个关节、有几个电机、时间步长是多少",[639,117329,117330,117334,117337],{},[685,117331,117332],{"align":24070},[32,117333,101044],{},[685,117335,117336],{"align":24070},"运行中的动态状态",[685,117338,117339],{"align":24070},"当前时间、位置、速度、电机输入",[639,117341,117342,117346,117349],{},[685,117343,117344],{"align":24070},[32,117345,101540],{},[685,117347,117348],{"align":24070},"推进一步物理仿真",[685,117350,117351],{"align":24070},"根据重力、力、碰撞更新状态",[639,117353,117354,117357,117360],{},[685,117355,117356],{"align":24070},"Viewer \u002F Renderer",[685,117358,117359],{"align":24070},"把仿真显示出来",[685,117361,117362],{"align":24070},"打开窗口或保存图片",[21,117364,117365],{},"一句话总结：",[25,117367,117370],{"className":117368,"code":117369,"language":5521,"meta":30},[5519],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[32,117371,117369],{"__ignoreMap":30},[21,117373,117374],{},"参考来源：",[1501,117376,117377,117384,117391],{},[17,117378,117379,117380],{},"MuJoCo Python 官方文档：",[734,117381,117382],{"href":117382,"rel":117383},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24198],[17,117385,117386,117387],{},"MuJoCo XML Reference：",[734,117388,117389],{"href":117389,"rel":117390},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24198],[17,117392,117393,117394],{},"MuJoCo Overview：",[734,117395,117396],{"href":117396,"rel":117397},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24198],[438,117399,117400],{"id":117400},"章节目录",[14,117402,117403,117409,117415,117421,117427,117433,117439,117445],{},[17,117404,117405],{},[734,117406,117408],{"href":117407},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[17,117410,117411],{},[734,117412,117414],{"href":117413},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[17,117416,117417],{},[734,117418,117420],{"href":117419},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[17,117422,117423],{},[734,117424,117426],{"href":117425},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[17,117428,117429],{},[734,117430,117432],{"href":117431},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[17,117434,117435],{},[734,117436,117438],{"href":117437},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[17,117440,117441],{},[734,117442,117444],{"href":117443},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[17,117446,117447],{},[734,117448,117450],{"href":117449},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[438,117452,117453],{"id":117453},"推荐学习路线",[25,117455,117458],{"className":117456,"code":117457,"language":5521,"meta":30},[5519],"环境安装\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",[32,117459,117457],{"__ignoreMap":30},[21,117461,117462],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[438,117464,117465],{"id":117465},"建议的目录结构",[21,117467,117468],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[25,117470,117472],{"className":24156,"code":117471,"language":24158,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[32,117473,117474,117482],{"__ignoreMap":30},[35,117475,117476,117478,117480],{"class":37,"line":38},[35,117477,77],{"class":48},[35,117479,29542],{"class":58},[35,117481,101595],{"class":306},[35,117483,117484,117486],{"class":37,"line":45},[35,117485,59],{"class":58},[35,117487,101595],{"class":306},[21,117489,117490],{},"每一章的代码都单独保存：",[25,117492,117495],{"className":117493,"code":117494,"language":5521,"meta":30},[5519],"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",[32,117496,117494],{"__ignoreMap":30},[21,117498,117499],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[438,117501,117502],{"id":117502},"学习方法",[21,117504,117505],{},"每章建议按这个顺序操作：",[14,117507,117508,117511,117514,117517,117520,117523],{},[17,117509,117510],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[17,117512,117513],{},"复制最小可运行代码，保存成指定文件。",[17,117515,117516],{},"运行代码，确认没有报错。",[17,117518,117519],{},"对照“运行结果说明”理解输出。",[17,117521,117522],{},"做“验证步骤”，主动改一两个参数。",[17,117524,117525],{},"遇到报错先看“常见错误与解决方案”。",[21,117527,117528],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[438,117530,117531],{"id":117531},"全局排错顺序",[21,117533,117534],{},"遇到问题时，按下面顺序查：",[14,117536,117537,117543,117549,117554,117557,117560,117567,117577],{},[17,117538,117539,117540],{},"Python 环境是否激活：",[32,117541,117542],{},"which python",[17,117544,117545,117546],{},"MuJoCo 是否能导入：",[32,117547,117548],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[17,117550,117551,117552],{},"是否误装了 ",[32,117553,101337],{},[17,117555,117556],{},"XML 标签是否闭合、属性是否拼写正确",[17,117558,117559],{},"actuator 引用的 joint 名字是否存在",[17,117561,117562,117564,117565],{},[32,117563,101401],{}," 的长度是否等于 ",[32,117566,102480],{},[17,117568,105907,117569,82864,117571,117573,117574],{},[32,117570,104352],{},[32,117572,104682],{}," 后是否调用了 ",[32,117575,117576],{},"mujoco.mj_forward",[17,117578,117579],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[416,117581,117582],{},"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":30,"searchDepth":45,"depth":45,"links":117584},[117585,117586,117587,117588,117589,117590,117591,117592],{"id":117226,"depth":45,"text":117226},{"id":117255,"depth":45,"text":117256},{"id":117285,"depth":45,"text":117285},{"id":117400,"depth":45,"text":117400},{"id":117453,"depth":45,"text":117453},{"id":117465,"depth":45,"text":117465},{"id":117502,"depth":45,"text":117502},{"id":117531,"depth":45,"text":117531},"仿真搭建。",{"category":23712},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117169,"description":117593},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117600,"title":117601,"body":117602,"description":421,"extension":422,"meta":118053,"navigation":140,"path":118054,"seo":118055,"stem":118056,"__hash__":118057},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117603,"toc":118051},[117604,117607,117610,117616,118048],[10,117605,117601],{"id":117606},"_1-最常用的基本操作更新",[21,117608,117609],{},"装linux系统教程：",[21,117611,117612],{},[734,117613,117614],{"href":117614,"rel":117615},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24198],[25,117617,117619],{"className":27,"code":117618,"language":29,"meta":30,"style":30},"#更新相关的知识\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",[32,117620,117621,117626,117631,117640,117645,117654,117659,117678,117683,117693,117698,117707,117712,117740,117745,117764,117769,117788,117792,117797,117813,117817,117822,117852,117856,117861,117877,117881,117886,117901,117905,117910,117926,117930,117935,117947,117959,117963,117968,117985,117989,117994,118012,118016,118021,118030,118034,118039],{"__ignoreMap":30},[35,117622,117623],{"class":37,"line":38},[35,117624,117625],{"class":41},"#更新相关的知识\n",[35,117627,117628],{"class":37,"line":45},[35,117629,117630],{"class":41},"# 更新软件包列表（从服务器获取最新软件信息）\n",[35,117632,117633,117635,117638],{"class":37,"line":55},[35,117634,171],{"class":48},[35,117636,117637],{"class":306}," apt",[35,117639,26572],{"class":306},[35,117641,117642],{"class":37,"line":65},[35,117643,117644],{"class":41},"# 升级所有可更新的软件包（不删除旧包）\n",[35,117646,117647,117649,117651],{"class":37,"line":74},[35,117648,171],{"class":48},[35,117650,117637],{"class":306},[35,117652,117653],{"class":306}," upgrade\n",[35,117655,117656],{"class":37,"line":83},[35,117657,117658],{"class":41},"#更新和升级软件包\n",[35,117660,117661,117663,117665,117667,117669,117671,117673,117676],{"class":37,"line":92},[35,117662,171],{"class":48},[35,117664,117637],{"class":306},[35,117666,307],{"class":306},[35,117668,26520],{"class":359},[35,117670,171],{"class":48},[35,117672,117637],{"class":306},[35,117674,117675],{"class":306}," upgrade",[35,117677,101306],{"class":58},[35,117679,117680],{"class":37,"line":101},[35,117681,117682],{"class":41},"#列出可更新的软件包及版本信息\n",[35,117684,117685,117687,117690],{"class":37,"line":110},[35,117686,303],{"class":48},[35,117688,117689],{"class":306}," list",[35,117691,117692],{"class":58}," --upgradable\n",[35,117694,117695],{"class":37,"line":119},[35,117696,117697],{"class":41},"#彻底升级（处理依赖关系，可能删除旧包）\n",[35,117699,117700,117702,117704],{"class":37,"line":128},[35,117701,171],{"class":48},[35,117703,117637],{"class":306},[35,117705,117706],{"class":306}," full-upgrade\n",[35,117708,117709],{"class":37,"line":137},[35,117710,117711],{"class":41},"#设置指定版本\n",[35,117713,117714,117716,117718,117720,117722,117725,117727,117729,117731,117733,117736,117738],{"class":37,"line":144},[35,117715,171],{"class":48},[35,117717,117637],{"class":306},[35,117719,318],{"class":306},[35,117721,29228],{"class":495},[35,117723,117724],{"class":306},"package_nam",[35,117726,571],{"class":359},[35,117728,1454],{"class":495},[35,117730,544],{"class":306},[35,117732,1404],{"class":495},[35,117734,117735],{"class":306},"version_numbe",[35,117737,1164],{"class":359},[35,117739,51633],{"class":495},[35,117741,117742],{"class":37,"line":150},[35,117743,117744],{"class":41},"#只安装软件包不升级\n",[35,117746,117747,117749,117751,117753,117755,117757,117759,117761],{"class":37,"line":159},[35,117748,171],{"class":48},[35,117750,117637],{"class":306},[35,117752,318],{"class":306},[35,117754,29228],{"class":495},[35,117756,117724],{"class":306},[35,117758,571],{"class":359},[35,117760,1454],{"class":495},[35,117762,117763],{"class":58}," --no-upgrade\n",[35,117765,117766],{"class":37,"line":168},[35,117767,117768],{"class":41},"#只升级，不存在就不安装\n",[35,117770,117771,117773,117775,117777,117779,117781,117783,117785],{"class":37,"line":177},[35,117772,171],{"class":48},[35,117774,117637],{"class":306},[35,117776,318],{"class":306},[35,117778,29228],{"class":495},[35,117780,117724],{"class":306},[35,117782,571],{"class":359},[35,117784,1454],{"class":495},[35,117786,117787],{"class":58}," --only-upgrade\n",[35,117789,117790],{"class":37,"line":182},[35,117791,141],{"emptyLinePlaceholder":140},[35,117793,117794],{"class":37,"line":188},[35,117795,117796],{"class":41},"#安装指定的软件命令\n",[35,117798,117799,117801,117803,117805,117807,117809,117811],{"class":37,"line":197},[35,117800,171],{"class":48},[35,117802,117637],{"class":306},[35,117804,318],{"class":306},[35,117806,29228],{"class":495},[35,117808,117724],{"class":306},[35,117810,571],{"class":359},[35,117812,51633],{"class":495},[35,117814,117815],{"class":37,"line":206},[35,117816,141],{"emptyLinePlaceholder":140},[35,117818,117819],{"class":37,"line":215},[35,117820,117821],{"class":41},"#安装多个软件包\n",[35,117823,117824,117826,117828,117830,117832,117835,117838,117840,117842,117845,117847,117849],{"class":37,"line":224},[35,117825,171],{"class":48},[35,117827,117637],{"class":306},[35,117829,318],{"class":306},[35,117831,29228],{"class":495},[35,117833,117834],{"class":306},"package_",[35,117836,117837],{"class":495},"1>",[35,117839,29228],{"class":495},[35,117841,117834],{"class":306},[35,117843,117844],{"class":495},"2>",[35,117846,29228],{"class":495},[35,117848,117834],{"class":306},[35,117850,117851],{"class":495},"3>\n",[35,117853,117854],{"class":37,"line":233},[35,117855,141],{"emptyLinePlaceholder":140},[35,117857,117858],{"class":37,"line":238},[35,117859,117860],{"class":41},"#更新指定的软件命令\n",[35,117862,117863,117865,117867,117869,117871,117873,117875],{"class":37,"line":244},[35,117864,171],{"class":48},[35,117866,117637],{"class":306},[35,117868,307],{"class":306},[35,117870,29228],{"class":495},[35,117872,117724],{"class":306},[35,117874,571],{"class":359},[35,117876,51633],{"class":495},[35,117878,117879],{"class":37,"line":253},[35,117880,141],{"emptyLinePlaceholder":140},[35,117882,117883],{"class":37,"line":262},[35,117884,117885],{"class":41},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[35,117887,117888,117890,117893,117895,117897,117899],{"class":37,"line":271},[35,117889,303],{"class":48},[35,117891,117892],{"class":306}," show",[35,117894,29228],{"class":495},[35,117896,117724],{"class":306},[35,117898,571],{"class":359},[35,117900,51633],{"class":495},[35,117902,117903],{"class":37,"line":280},[35,117904,141],{"emptyLinePlaceholder":140},[35,117906,117907],{"class":37,"line":289},[35,117908,117909],{"class":41},"#删除软件包命令\n",[35,117911,117912,117914,117916,117918,117920,117922,117924],{"class":37,"line":294},[35,117913,171],{"class":48},[35,117915,117637],{"class":306},[35,117917,329],{"class":306},[35,117919,29228],{"class":495},[35,117921,117724],{"class":306},[35,117923,571],{"class":359},[35,117925,51633],{"class":495},[35,117927,117928],{"class":37,"line":300},[35,117929,141],{"emptyLinePlaceholder":140},[35,117931,117932],{"class":37,"line":313},[35,117933,117934],{"class":41},"# 清理旧版本和缓存（释放磁盘空间）\n",[35,117936,117937,117939,117941,117944],{"class":37,"line":324},[35,117938,171],{"class":48},[35,117940,117637],{"class":306},[35,117942,117943],{"class":306}," autoremove",[35,117945,117946],{"class":41},"  # 删除不再需要的依赖和库文件\n",[35,117948,117949,117951,117953,117956],{"class":37,"line":2955},[35,117950,171],{"class":48},[35,117952,117637],{"class":306},[35,117954,117955],{"class":306}," clean",[35,117957,117958],{"class":41},"       # 清理下载的缓存包\n",[35,117960,117961],{"class":37,"line":8282},[35,117962,141],{"emptyLinePlaceholder":140},[35,117964,117965],{"class":37,"line":8306},[35,117966,117967],{"class":41},"#移除软件包及配置文件\n",[35,117969,117970,117972,117974,117977,117979,117981,117983],{"class":37,"line":8311},[35,117971,171],{"class":48},[35,117973,117637],{"class":306},[35,117975,117976],{"class":306}," purge",[35,117978,29228],{"class":495},[35,117980,117724],{"class":306},[35,117982,571],{"class":359},[35,117984,51633],{"class":495},[35,117986,117987],{"class":37,"line":8317},[35,117988,141],{"emptyLinePlaceholder":140},[35,117990,117991],{"class":37,"line":8344},[35,117992,117993],{"class":41},"#查找软件包命令\n",[35,117995,117996,117998,118000,118003,118005,118008,118010],{"class":37,"line":8349},[35,117997,171],{"class":48},[35,117999,117637],{"class":306},[35,118001,118002],{"class":306}," search",[35,118004,29228],{"class":495},[35,118006,118007],{"class":306},"keywor",[35,118009,810],{"class":359},[35,118011,51633],{"class":495},[35,118013,118014],{"class":37,"line":8355},[35,118015,141],{"emptyLinePlaceholder":140},[35,118017,118018],{"class":37,"line":8367},[35,118019,118020],{"class":41},"#列出所有已安装的包\n",[35,118022,118023,118025,118027],{"class":37,"line":8379},[35,118024,303],{"class":48},[35,118026,117689],{"class":306},[35,118028,118029],{"class":58}," --installed\n",[35,118031,118032],{"class":37,"line":8391},[35,118033,141],{"emptyLinePlaceholder":140},[35,118035,118036],{"class":37,"line":10050},[35,118037,118038],{"class":41},"#列出所有已安装的包的版本信息\n",[35,118040,118041,118043,118045],{"class":37,"line":10075},[35,118042,303],{"class":48},[35,118044,117689],{"class":306},[35,118046,118047],{"class":58}," --all-versions\n",[416,118049,118050],{},"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":30,"searchDepth":45,"depth":45,"links":118052},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117601,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118059,"title":118060,"body":118061,"description":421,"extension":422,"meta":118802,"navigation":140,"path":118803,"seo":118804,"stem":118805,"__hash__":118806},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118062,"toc":118789},[118063,118066,118070,118073,118079,118083,118087,118093,118098,118103,118108,118113,118118,118121,118124,118127,118130,118134,118137,118142,118145,118150,118153,118158,118165,118168,118171,118174,118177,118180,118191,118195,118199,118204,118209,118213,118218,118222,118227,118231,118235,118240,118243,118288,118293,118297,118301,118306,118312,118317,118327,118332,118342,118347,118352,118379,118383,118386,118391,118394,118419,118423,118428,118431,118436,118441,118461,118466,118469,118484,118488,118541,118544,118549,118553,118556,118571,118574,118577,118582,118586,118590,118593,118597,118601,118604,118609,118614,118618,118625,118633,118636,118643,118648,118653,118656,118661,118668,118673,118680,118684,118686,118691,118695,118698,118701,118706,118709,118714,118717,118722,118727,118732,118736,118741,118745,118786],[10,118064,118060],{"id":118065},"_2-linux装机教程",[438,118067,118069],{"id":118068},"_21-实体机","2.1 实体机",[21,118071,118072],{},"使用清华源：（Ubuntu24.04）",[21,118074,118075],{},[734,118076,118077],{"href":118077,"rel":118078},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24198],[438,118080,118082],{"id":118081},"_22-普通虚拟机","2.2 普通虚拟机",[465,118084,118086],{"id":118085},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[21,118088,118089],{},[734,118090,118091],{"href":118091,"rel":118092},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24198],[21,118094,118095],{},[1823,118096],{"alt":30,"src":118097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[21,118099,118100],{},[1823,118101],{"alt":30,"src":118102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[21,118104,118105],{},[1823,118106],{"alt":30,"src":118107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[21,118109,118110],{},[1823,118111],{"alt":30,"src":118112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[21,118114,118115],{},[1823,118116],{"alt":30,"src":118117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[21,118119,118120],{},"内存4G（4096MB）；",[21,118122,118123],{},"CPU给4个核；",[21,118125,118126],{},"硬盘动态分配60G；",[21,118128,118129],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[465,118131,118133],{"id":118132},"_222-安装ubuntu","2.2.2 安装Ubuntu",[21,118135,118136],{},"按照1.1的步骤下载Ubuntu",[21,118138,118139],{},[1823,118140],{"alt":30,"src":118141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[21,118143,118144],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[21,118146,118147],{},[1823,118148],{"alt":30,"src":118149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[21,118151,118152],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[21,118154,118155],{},[1823,118156],{"alt":30,"src":118157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[21,118159,118160,118161,118164],{},"选择“正常安装”(找不到都用Alt+F7)， ",[645,118162,118163],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[21,118166,118167],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[21,118169,118170],{},"将改动写入磁盘吗 继续",[21,118172,118173],{},"选择东八区（shanghai，大致在地图上点一下），继续",[21,118175,118176],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[21,118178,118179],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[21,118181,118182,118183,118186,118187,118190],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[645,118184,118185],{},"除了"," 选不发送系统信息与不升级之外， ",[645,118188,118189],{},"其它"," 都跳过或前进）",[465,118192,118194],{"id":118193},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22332,118196,118198],{"id":118197},"_2231-全屏","2.2.3.1 全屏",[21,118200,118201],{},[1823,118202],{"alt":30,"src":118203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[21,118205,118206],{},[1823,118207],{"alt":30,"src":118208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22332,118210,118212],{"id":118211},"_2232-文件交换","2.2.3.2 文件交换",[21,118214,118215],{},[1823,118216],{"alt":30,"src":118217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22332,118219,118221],{"id":118220},"_2233-新建文本文档","2.2.3.3 新建文本文档",[21,118223,118224],{},[1823,118225],{"alt":30,"src":118226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[438,118228,118230],{"id":118229},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[465,118232,118234],{"id":118233},"_231-简介与优缺点","2.3.1 简介与优缺点",[14,118236,118237],{},[17,118238,118239],{},"什么情况下推荐？",[21,118241,118242],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[14,118244,118245],{"start":45},[17,118246,118247,118248],{},"优缺点：",[14,118249,118250,118280],{},[17,118251,118252,118253],{},"优点：",[14,118254,118255,118258,118265,118268,118271,118274,118277],{},[17,118256,118257],{},"WSL2是最好的Linux发行版;(bushi)",[17,118259,118260,118261,118264],{},"性能损耗极低。且比在Windows上跑深度性能 ",[645,118262,118263],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[17,118266,118267],{},"非常方便调用USB设备，可以USB直通;",[17,118269,118270],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[17,118272,118273],{},"非常方便Win与WSL2互相传文件等协同操作;",[17,118275,118276],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[17,118278,118279],{},"非常方便使用Windows的VScode远程开发;",[17,118281,118282,118283],{},"缺点：",[14,118284,118285],{},[17,118286,118287],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[21,118289,118290],{},[1823,118291],{"alt":30,"src":118292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[465,118294,118296],{"id":118295},"_232-安装教程","2.3.2 安装教程",[22332,118298,118300],{"id":118299},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[14,118302,118303],{},[17,118304,118305],{},"方法一(图形界面)",[21,118307,118308,118309,24950],{},"用Win+R输入",[32,118310,118311],{},"appwiz.cpl",[21,118313,118314],{},[1823,118315],{"alt":30,"src":118316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[21,118318,118319,118320,118323,118324,26803],{},"点击OK进入 ",[645,118321,118322],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[645,118325,118326],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[21,118328,118329],{},[1823,118330],{"alt":30,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[21,118333,118334,118335,101343,118338,118341],{},"选择 ",[645,118336,118337],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[645,118339,118340],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[21,118343,118344],{},[1823,118345],{"alt":30,"src":118346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[14,118348,118349],{"start":45},[17,118350,118351],{},"方法二(命令行)",[25,118353,118357],{"className":118354,"code":118355,"language":118356,"meta":30,"style":30},"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",[32,118358,118359,118364,118369,118374],{"__ignoreMap":30},[35,118360,118361],{"class":37,"line":38},[35,118362,118363],{},"# 开启 Linux 子系统\n",[35,118365,118366],{"class":37,"line":45},[35,118367,118368],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[35,118370,118371],{"class":37,"line":55},[35,118372,118373],{},"# 开启虚拟机平台\n",[35,118375,118376],{"class":37,"line":65},[35,118377,118378],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22332,118380,118382],{"id":118381},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[21,118384,118385],{},"用管理员权限打开powershell",[21,118387,118388],{},[1823,118389],{"alt":30,"src":118390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[21,118392,118393],{},"升级WSL并设置默认版本为WSL2",[25,118395,118397],{"className":118354,"code":118396,"language":118356,"meta":30,"style":30},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[32,118398,118399,118404,118409,118414],{"__ignoreMap":30},[35,118400,118401],{"class":37,"line":38},[35,118402,118403],{},"# 更新 wsl\n",[35,118405,118406],{"class":37,"line":45},[35,118407,118408],{},"wsl --update\n",[35,118410,118411],{"class":37,"line":55},[35,118412,118413],{},"# 将 wsl 版本设置为 wsl2\n",[35,118415,118416],{"class":37,"line":65},[35,118417,118418],{},"wsl --set-default-version 2\n",[22332,118420,118422],{"id":118421},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[14,118424,118425],{},[17,118426,118427],{},"方式一(商店下载)",[21,118429,118430],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[21,118432,118433],{},[1823,118434],{"alt":30,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[14,118437,118438],{"start":45},[17,118439,118440],{},"方式二(命令行安装)",[25,118442,118444],{"className":118354,"code":118443,"language":118356,"meta":30,"style":30},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[32,118445,118446,118451,118456],{"__ignoreMap":30},[35,118447,118448],{"class":37,"line":38},[35,118449,118450],{},"# 列出可安装的 Linux 版本\n",[35,118452,118453],{"class":37,"line":45},[35,118454,118455],{},"#（需要科学手段）\n",[35,118457,118458],{"class":37,"line":55},[35,118459,118460],{},"wsl --list --online\n",[21,118462,118463],{},[1823,118464],{"alt":30,"src":118465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[21,118467,118468],{},"选择对应发行版并安装",[25,118470,118472],{"className":118354,"code":118471,"language":118356,"meta":30,"style":30},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[32,118473,118474,118479],{"__ignoreMap":30},[35,118475,118476],{"class":37,"line":38},[35,118477,118478],{},"# Ubuntu安装完毕后需要重启系统\n",[35,118480,118481],{"class":37,"line":45},[35,118482,118483],{},"wsl --install -d Ubuntu-24.04\n",[22332,118485,118487],{"id":118486},"_2324-查看系统状态","2.3.2.4 查看系统状态",[25,118489,118491],{"className":118354,"code":118490,"language":118356,"meta":30,"style":30},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[32,118492,118493,118498,118503,118508,118513,118517,118521,118526,118531,118536],{"__ignoreMap":30},[35,118494,118495],{"class":37,"line":38},[35,118496,118497],{},"# 查看 wsl\n",[35,118499,118500],{"class":37,"line":45},[35,118501,118502],{},"wsl -l\n",[35,118504,118505],{"class":37,"line":55},[35,118506,118507],{},"# 查看 wsl 运行版本或模式\n",[35,118509,118510],{"class":37,"line":65},[35,118511,118512],{},"wsl -l -v\n",[35,118514,118515],{"class":37,"line":74},[35,118516,141],{"emptyLinePlaceholder":140},[35,118518,118519],{"class":37,"line":83},[35,118520,141],{"emptyLinePlaceholder":140},[35,118522,118523],{"class":37,"line":92},[35,118524,118525],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[35,118527,118528],{"class":37,"line":101},[35,118529,118530],{},"wsl --set-version \u003Cdistro> 2\n",[35,118532,118533],{"class":37,"line":110},[35,118534,118535],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[35,118537,118538],{"class":37,"line":119},[35,118539,118540],{},"wsl --unregister \u003Cdistro>\n",[21,118542,118543],{},"输出Version为2即正常",[21,118545,118546],{},[1823,118547],{"alt":30,"src":118548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22332,118550,118552],{"id":118551},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[21,118554,118555],{},"直接在Powershell里输入wsl命令进入子系统",[25,118557,118559],{"className":118354,"code":118558,"language":118356,"meta":30,"style":30},"# 进入子系统\nwsl\n",[32,118560,118561,118566],{"__ignoreMap":30},[35,118562,118563],{"class":37,"line":38},[35,118564,118565],{},"# 进入子系统\n",[35,118567,118568],{"class":37,"line":45},[35,118569,118570],{},"wsl\n",[21,118572,118573],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[21,118575,118576],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[21,118578,118579],{},[1823,118580],{"alt":30,"src":118581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[465,118583,118585],{"id":118584},"_233-配置各种环境","2.3.3 配置各种环境",[22332,118587,118589],{"id":118588},"_2331-换源","2.3.3.1 换源",[21,118591,118592],{},"(同实体机LINUX，往下找教程)",[22332,118594,118596],{"id":118595},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23244,118598,118600],{"id":118599},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[21,118602,118603],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[21,118605,118606],{},[1823,118607],{"alt":30,"src":118608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[21,118610,118611],{},[1823,118612],{"alt":30,"src":118613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23244,118615,118617],{"id":118616},"_23322-cuda","2.3.3.2.2 CUDA",[21,118619,118620,118621],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[734,118622,118623],{"href":118623,"rel":118624},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24198],[21,118626,118627,118630],{},[1823,118628],{"alt":30,"src":118629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1823,118631],{"alt":30,"src":118632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[21,118634,118635],{},"在下方的网站，选择合适的版本。",[21,118637,118638,118639],{},"WSL2 专属 CUDA 指南：",[734,118640,118641],{"href":118641,"rel":118642},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24198],[21,118644,118645],{},[645,118646,118647],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[21,118649,118650],{},[1823,118651],{"alt":30,"src":118652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[21,118654,118655],{},"挨行敲一遍",[21,118657,118658],{},[1823,118659],{"alt":30,"src":118660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[21,118662,118663,118664,118667],{},"敲完后，输入",[32,118665,118666],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[21,118669,118670],{},[1823,118671],{"alt":30,"src":118672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[21,118674,118675,118676,118679],{},"（请详看下方教程的",[645,118677,118678],{},"安装CUDA的配置环境来看","如何配置环境）",[23244,118681,118683],{"id":118682},"_23323-cudnn","2.3.3.2.3 cuDNN",[21,118685,118592],{},[21,118687,118688],{},[1823,118689],{"alt":30,"src":118690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22332,118692,118694],{"id":118693},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[21,118696,118697],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[21,118699,118700],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[21,118702,118703],{},[1823,118704],{"alt":30,"src":118705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[21,118707,118708],{},"连接WSL2",[21,118710,118711],{},[1823,118712],{"alt":30,"src":118713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[21,118715,118716],{},"远程开发成功。",[21,118718,118719],{},[1823,118720],{"alt":30,"src":118721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[21,118723,118724],{},[1823,118725],{"alt":30,"src":118726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[21,118728,118729],{},[1823,118730],{"alt":30,"src":118731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22332,118733,118735],{"id":118734},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[21,118737,118738],{},[1823,118739],{"alt":30,"src":118740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22332,118742,118744],{"id":118743},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[25,118746,118748],{"className":27,"code":118747,"language":29,"meta":30,"style":30},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[32,118749,118750,118758,118766,118777,118781],{"__ignoreMap":30},[35,118751,118752,118754,118756],{"class":37,"line":38},[35,118753,171],{"class":48},[35,118755,117637],{"class":306},[35,118757,26572],{"class":306},[35,118759,118760,118762,118764],{"class":37,"line":45},[35,118761,171],{"class":48},[35,118763,117637],{"class":306},[35,118765,117653],{"class":306},[35,118767,118768,118770,118772,118774],{"class":37,"line":55},[35,118769,171],{"class":48},[35,118771,117637],{"class":306},[35,118773,318],{"class":306},[35,118775,118776],{"class":306}," mesa-utils\n",[35,118778,118779],{"class":37,"line":65},[35,118780,141],{"emptyLinePlaceholder":140},[35,118782,118783],{"class":37,"line":74},[35,118784,118785],{"class":41},"#然后重启wsl2即可\n",[416,118787,118788],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":45,"depth":45,"links":118790},[118791,118792,118797],{"id":118068,"depth":45,"text":118069},{"id":118081,"depth":45,"text":118082,"children":118793},[118794,118795,118796],{"id":118085,"depth":55,"text":118086},{"id":118132,"depth":55,"text":118133},{"id":118193,"depth":55,"text":118194},{"id":118229,"depth":45,"text":118230,"children":118798},[118799,118800,118801],{"id":118233,"depth":55,"text":118234},{"id":118295,"depth":55,"text":118296},{"id":118584,"depth":55,"text":118585},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118060,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118808,"title":118809,"body":118810,"description":421,"extension":422,"meta":121744,"navigation":140,"path":121745,"seo":121746,"stem":121747,"__hash__":121748},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118811,"toc":121716},[118812,118815,118819,118825,118829,118835,118839,119027,119030,119035,119039,119043,119046,119049,119055,119060,119063,119066,119071,119104,119109,119113,119190,119193,119198,119202,119205,119244,119247,119256,119274,119279,119286,119403,119408,119411,119438,119443,119447,119456,119506,119513,119517,119520,119534,119541,119575,119580,119584,119607,119610,119615,119619,119622,119625,119628,119670,119674,119677,119680,119721,119725,119729,119732,119737,119742,119745,119768,119771,119779,119784,119787,119792,119797,119800,119805,119809,119814,119837,119842,119904,119912,119917,119922,119925,119930,119933,119938,119943,119961,119966,119972,119977,119991,119995,119998,120001,120004,120047,120050,120055,120156,120159,120164,120168,120172,120209,120213,120217,120221,120267,120271,120316,120320,120327,120335,120390,120393,120470,120473,120496,120500,120503,120508,120513,120521,120524,120529,120534,120539,120542,120547,120556,120559,120564,120567,120637,120642,120645,120650,120653,120658,120661,120666,120669,120674,120679,120682,120757,120760,120773,120778,120781,120795,120798,120827,120832,120861,120864,120869,120873,120878,120887,120890,120895,120898,120903,120906,120909,120914,120917,120922,120927,120930,120935,120938,121063,121068,121097,121100,121105,121110,121127,121130,121173,121176,121203,121208,121221,121364,121368,121373,121387,121390,121441,121444,121474,121477,121493,121498,121512,121515,121582,121587,121596,121601,121604,121616,121621,121628,121652,121655,121660,121663,121682,121687,121694,121706,121713],[10,118813,118809],{"id":118814},"_3-安装必备配置",[438,118816,118818],{"id":118817},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[25,118820,118823],{"className":118821,"code":118822,"language":5521},[5519],"  打开下方网站（注意，该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",[32,118824,118822],{"__ignoreMap":30},[465,118826,118828],{"id":118827},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[25,118830,118833],{"className":118831,"code":118832,"language":5521},[5519],"  输入以下命令\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",[32,118834,118832],{"__ignoreMap":30},[465,118836,118838],{"id":118837},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[25,118840,118844],{"className":118841,"code":118842,"language":118843,"meta":30,"style":30},"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",[32,118845,118846,118854,118865,118877,118891,118895,118905,118910,118914,118918,118923,118927,118939,118943,118948,118952,118963,118967,118983,118987,118998,119002,119007,119011,119019],{"__ignoreMap":30},[35,118847,118848,118850,118852],{"class":37,"line":38},[35,118849,171],{"class":48},[35,118851,117637],{"class":306},[35,118853,26572],{"class":306},[35,118855,118856,118858,118860,118862],{"class":37,"line":45},[35,118857,171],{"class":48},[35,118859,117637],{"class":306},[35,118861,318],{"class":306},[35,118863,118864],{"class":306}," vim\n",[35,118866,118867,118869,118872,118874],{"class":37,"line":55},[35,118868,171],{"class":48},[35,118870,118871],{"class":306}," rm",[35,118873,25656],{"class":58},[35,118875,118876],{"class":306}," \u002Fetc\u002Fapt\u002Fsources.list\n",[35,118878,118879,118881,118883,118885,118888],{"class":37,"line":65},[35,118880,171],{"class":48},[35,118882,118871],{"class":306},[35,118884,25656],{"class":58},[35,118886,118887],{"class":306}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[35,118889,118890],{"class":58},"**\n",[35,118892,118893],{"class":37,"line":74},[35,118894,141],{"emptyLinePlaceholder":140},[35,118896,118897,118899,118902],{"class":37,"line":83},[35,118898,171],{"class":48},[35,118900,118901],{"class":306}," vim",[35,118903,118904],{"class":306}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[35,118906,118907],{"class":37,"line":92},[35,118908,118909],{"class":306},"```\n",[35,118911,118912],{"class":37,"line":101},[35,118913,141],{"emptyLinePlaceholder":140},[35,118915,118916],{"class":37,"line":110},[35,118917,141],{"emptyLinePlaceholder":140},[35,118919,118920],{"class":37,"line":119},[35,118921,118922],{"class":48},"选择好Ubuntu版本后，复制下方的内容。\n",[35,118924,118925],{"class":37,"line":128},[35,118926,141],{"emptyLinePlaceholder":140},[35,118928,118929,118931,118934,118937],{"class":37,"line":137},[35,118930,722],{"class":495},[35,118932,118933],{"class":306},"[](",[35,118935,118936],{"class":48},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[35,118938,505],{"class":306},[35,118940,118941],{"class":37,"line":144},[35,118942,141],{"emptyLinePlaceholder":140},[35,118944,118945],{"class":37,"line":150},[35,118946,118947],{"class":48},"粘贴进去\n",[35,118949,118950],{"class":37,"line":159},[35,118951,141],{"emptyLinePlaceholder":140},[35,118953,118954,118956,118958,118961],{"class":37,"line":168},[35,118955,722],{"class":495},[35,118957,118933],{"class":306},[35,118959,118960],{"class":48},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[35,118962,505],{"class":306},[35,118964,118965],{"class":37,"line":177},[35,118966,141],{"emptyLinePlaceholder":140},[35,118968,118969,118972,118975,118978,118980],{"class":37,"line":182},[35,118970,118971],{"class":48},"按一下ESC，然后英文冒号，输入",[35,118973,118974],{"class":306}," `",[35,118976,118977],{"class":48},":wq!",[35,118979,1466],{"class":306},[35,118981,118982],{"class":48},"然后回车\n",[35,118984,118985],{"class":37,"line":188},[35,118986,141],{"emptyLinePlaceholder":140},[35,118988,118989,118991,118993,118996],{"class":37,"line":197},[35,118990,722],{"class":495},[35,118992,118933],{"class":306},[35,118994,118995],{"class":48},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[35,118997,505],{"class":306},[35,118999,119000],{"class":37,"line":206},[35,119001,141],{"emptyLinePlaceholder":140},[35,119003,119004],{"class":37,"line":215},[35,119005,119006],{"class":48},"输入以下命令\n",[35,119008,119009],{"class":37,"line":224},[35,119010,141],{"emptyLinePlaceholder":140},[35,119012,119013,119016],{"class":37,"line":233},[35,119014,119015],{"class":306},"```",[35,119017,119018],{"class":48},"Bash\n",[35,119020,119021,119023,119025],{"class":37,"line":238},[35,119022,171],{"class":48},[35,119024,117637],{"class":306},[35,119026,26572],{"class":306},[21,119028,119029],{},"这里被替换成对应学校则成功",[21,119031,119032],{},[1823,119033],{"alt":30,"src":119034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[438,119036,119038],{"id":119037},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[465,119040,119042],{"id":119041},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[21,119044,119045],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[21,119047,119048],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[21,119050,119051],{},[734,119052,119053],{"href":119053,"rel":119054},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24198],[21,119056,119057],{},[1823,119058],{"alt":30,"src":119059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[21,119061,119062],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[21,119064,119065],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[21,119067,119068],{},[1823,119069],{"alt":30,"src":119070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[25,119072,119074],{"className":27,"code":119073,"language":29,"meta":30,"style":30},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[32,119075,119076,119081,119088,119093],{"__ignoreMap":30},[35,119077,119078],{"class":37,"line":38},[35,119079,119080],{"class":41},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[35,119082,119083,119085],{"class":37,"line":45},[35,119084,59],{"class":58},[35,119086,119087],{"class":306}," ~\u002FDownloads\n",[35,119089,119090],{"class":37,"line":55},[35,119091,119092],{"class":41},"#下方chrome安装包名不一定是这个，根据名字来看\n",[35,119094,119095,119097,119099,119101],{"class":37,"line":65},[35,119096,171],{"class":48},[35,119098,117637],{"class":306},[35,119100,318],{"class":306},[35,119102,119103],{"class":306}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[21,119105,119106],{},[1823,119107],{"alt":30,"src":119108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[465,119110,119112],{"id":119111},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[25,119114,119116],{"className":27,"code":119115,"language":29,"meta":30,"style":30},"# 老版\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",[32,119117,119118,119123,119131,119142,119147,119151,119156,119166,119174,119185],{"__ignoreMap":30},[35,119119,119120],{"class":37,"line":38},[35,119121,119122],{"class":41},"# 老版\n",[35,119124,119125,119127,119129],{"class":37,"line":45},[35,119126,171],{"class":48},[35,119128,117637],{"class":306},[35,119130,26572],{"class":306},[35,119132,119133,119135,119137,119139],{"class":37,"line":55},[35,119134,171],{"class":48},[35,119136,117637],{"class":306},[35,119138,318],{"class":306},[35,119140,119141],{"class":306}," neofetch\n",[35,119143,119144],{"class":37,"line":65},[35,119145,119146],{"class":48},"neofetch\n",[35,119148,119149],{"class":37,"line":74},[35,119150,141],{"emptyLinePlaceholder":140},[35,119152,119153],{"class":37,"line":83},[35,119154,119155],{"class":41},"# 新版\n",[35,119157,119158,119160,119163],{"class":37,"line":92},[35,119159,171],{"class":48},[35,119161,119162],{"class":306}," add-apt-repository",[35,119164,119165],{"class":306}," ppa:zhangsongcui3371\u002Ffastfetch\n",[35,119167,119168,119170,119172],{"class":37,"line":101},[35,119169,171],{"class":48},[35,119171,117637],{"class":306},[35,119173,26572],{"class":306},[35,119175,119176,119178,119180,119182],{"class":37,"line":110},[35,119177,171],{"class":48},[35,119179,117637],{"class":306},[35,119181,318],{"class":306},[35,119183,119184],{"class":306}," fastfetch\n",[35,119186,119187],{"class":37,"line":119},[35,119188,119189],{"class":48},"fastfetch\n",[21,119191,119192],{},"这里显示，一共有3162个debian的程序，7个snap程序",[21,119194,119195],{},[1823,119196],{"alt":30,"src":119197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[465,119199,119201],{"id":119200},"_323-移除snap应用","3.2.3 移除snap应用",[21,119203,119204],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[25,119206,119208],{"className":27,"code":119207,"language":29,"meta":30,"style":30},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[32,119209,119210,119222,119233],{"__ignoreMap":30},[35,119211,119212,119214,119216,119219],{"class":37,"line":38},[35,119213,171],{"class":48},[35,119215,26843],{"class":306},[35,119217,119218],{"class":306}," disable",[35,119220,119221],{"class":306}," snapd.service\n",[35,119223,119224,119226,119228,119230],{"class":37,"line":45},[35,119225,171],{"class":48},[35,119227,26843],{"class":306},[35,119229,119218],{"class":306},[35,119231,119232],{"class":306}," snapd.socket\n",[35,119234,119235,119237,119239,119241],{"class":37,"line":55},[35,119236,171],{"class":48},[35,119238,26843],{"class":306},[35,119240,119218],{"class":306},[35,119242,119243],{"class":306}," snapd.seeded.service\n",[21,119245,119246],{},"然后查看snap应用列表",[21,119248,119249,119250,119255],{},"根据你安装的选择不同（最小安装或普通安装），有",[734,119251,119254],{"href":119252,"rel":119253},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24198],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[25,119257,119259],{"className":27,"code":119258,"language":29,"meta":30,"style":30},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[32,119260,119261,119266],{"__ignoreMap":30},[35,119262,119263],{"class":37,"line":38},[35,119264,119265],{"class":41},"# 查询当前系统上snap安装了哪些app\n",[35,119267,119268,119271],{"class":37,"line":45},[35,119269,119270],{"class":48},"snap",[35,119272,119273],{"class":306}," list\n",[21,119275,119276],{},[1823,119277],{"alt":30,"src":119278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[21,119280,119281,119282,119285],{},"卸载掉图中所有应用，按照 ",[645,119283,119284],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[25,119287,119289],{"className":27,"code":119288,"language":29,"meta":30,"style":30},"#移除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",[32,119290,119291,119296,119308,119313,119324,119329,119340,119345,119356,119361,119365,119370,119381,119392],{"__ignoreMap":30},[35,119292,119293],{"class":37,"line":38},[35,119294,119295],{"class":41},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[35,119297,119298,119300,119303,119305],{"class":37,"line":45},[35,119299,171],{"class":48},[35,119301,119302],{"class":306}," snap",[35,119304,329],{"class":306},[35,119306,119307],{"class":306}," snap-store\n",[35,119309,119310],{"class":37,"line":55},[35,119311,119312],{"class":41},"#移除firefox浏览器\n",[35,119314,119315,119317,119319,119321],{"class":37,"line":65},[35,119316,171],{"class":48},[35,119318,119302],{"class":306},[35,119320,329],{"class":306},[35,119322,119323],{"class":306}," firefox\n",[35,119325,119326],{"class":37,"line":74},[35,119327,119328],{"class":41},"#移除gnome-42-2204\n",[35,119330,119331,119333,119335,119337],{"class":37,"line":83},[35,119332,171],{"class":48},[35,119334,119302],{"class":306},[35,119336,329],{"class":306},[35,119338,119339],{"class":306}," gnome-42-2204\n",[35,119341,119342],{"class":37,"line":92},[35,119343,119344],{"class":41},"#移除gtk-common-themes\n",[35,119346,119347,119349,119351,119353],{"class":37,"line":101},[35,119348,171],{"class":48},[35,119350,119302],{"class":306},[35,119352,329],{"class":306},[35,119354,119355],{"class":306}," gtk-common-themes\n",[35,119357,119358],{"class":37,"line":110},[35,119359,119360],{"class":41},"#移除其它...\n",[35,119362,119363],{"class":37,"line":119},[35,119364,3008],{"class":359},[35,119366,119367],{"class":37,"line":128},[35,119368,119369],{"class":41},"#移除core22,bare以及snapd\n",[35,119371,119372,119374,119376,119378],{"class":37,"line":137},[35,119373,171],{"class":48},[35,119375,119302],{"class":306},[35,119377,329],{"class":306},[35,119379,119380],{"class":306}," core22\n",[35,119382,119383,119385,119387,119389],{"class":37,"line":144},[35,119384,171],{"class":48},[35,119386,119302],{"class":306},[35,119388,329],{"class":306},[35,119390,119391],{"class":306}," bare\n",[35,119393,119394,119396,119398,119400],{"class":37,"line":150},[35,119395,171],{"class":48},[35,119397,119302],{"class":306},[35,119399,329],{"class":306},[35,119401,119402],{"class":306}," snapd\n",[21,119404,119405],{},[1823,119406],{"alt":30,"src":119407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[21,119409,119410],{},"输入以下命令查看是否还有snap包",[25,119412,119414],{"className":27,"code":119413,"language":29,"meta":30,"style":30},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[32,119415,119416,119422,119426,119430,119434],{"__ignoreMap":30},[35,119417,119418,119420],{"class":37,"line":38},[35,119419,119270],{"class":48},[35,119421,119273],{"class":306},[35,119423,119424],{"class":37,"line":45},[35,119425,119122],{"class":41},[35,119427,119428],{"class":37,"line":55},[35,119429,119146],{"class":48},[35,119431,119432],{"class":37,"line":65},[35,119433,119155],{"class":41},[35,119435,119436],{"class":37,"line":74},[35,119437,119189],{"class":48},[21,119439,119440],{},[1823,119441],{"alt":30,"src":119442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[465,119444,119446],{"id":119445},"_324-移除snap","3.2.4 移除snap",[21,119448,119449,119450,119455],{},"在删除掉",[734,119451,119454],{"href":119452,"rel":119453},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24198],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[25,119457,119459],{"className":27,"code":119458,"language":29,"meta":30,"style":30}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[32,119460,119461,119466,119479,119484,119495],{"__ignoreMap":30},[35,119462,119463],{"class":37,"line":38},[35,119464,119465],{"class":41}," #使用apt移除掉snap\n",[35,119467,119468,119470,119472,119474,119477],{"class":37,"line":45},[35,119469,171],{"class":48},[35,119471,117637],{"class":306},[35,119473,117943],{"class":306},[35,119475,119476],{"class":58}," --purge",[35,119478,119402],{"class":306},[35,119480,119481],{"class":37,"line":55},[35,119482,119483],{"class":41},"#移除snapd的一些目录\n",[35,119485,119486,119488,119490,119492],{"class":37,"line":65},[35,119487,171],{"class":48},[35,119489,118871],{"class":306},[35,119491,25656],{"class":58},[35,119493,119494],{"class":306}," \u002Fvar\u002Fcache\u002Fsnapd\n",[35,119496,119497,119499,119501,119503],{"class":37,"line":74},[35,119498,171],{"class":48},[35,119500,118871],{"class":306},[35,119502,25656],{"class":58},[35,119504,119505],{"class":306}," ~\u002Fsnap\n",[21,119507,119508,119509,119512],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[32,119510,119511],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[465,119514,119516],{"id":119515},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[21,119518,119519],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[25,119521,119523],{"className":27,"code":119522,"language":29,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[32,119524,119525],{"__ignoreMap":30},[35,119526,119527,119529,119531],{"class":37,"line":38},[35,119528,171],{"class":48},[35,119530,118901],{"class":306},[35,119532,119533],{"class":306}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[21,119535,119536,119537,119540],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[32,119538,119539],{},":wq"," 回车",[25,119542,119544],{"className":27,"code":119543,"language":29,"meta":30,"style":30},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[32,119545,119546,119553,119567],{"__ignoreMap":30},[35,119547,119548,119551],{"class":37,"line":38},[35,119549,119550],{"class":48},"Package:",[35,119552,119402],{"class":306},[35,119554,119555,119558,119561,119564],{"class":37,"line":45},[35,119556,119557],{"class":48},"Pin:",[35,119559,119560],{"class":306}," release",[35,119562,119563],{"class":306}," a=",[35,119565,119566],{"class":58},"*\n",[35,119568,119569,119572],{"class":37,"line":55},[35,119570,119571],{"class":48},"Pin-Priority:",[35,119573,119574],{"class":58}," -10\n",[21,119576,119577],{},[1823,119578],{"alt":30,"src":119579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[465,119581,119583],{"id":119582},"_326-测试是否成功","3.2.6 测试是否成功",[25,119585,119587],{"className":27,"code":119586,"language":29,"meta":30,"style":30},"sudo apt update\nsudo apt install firefox\n",[32,119588,119589,119597],{"__ignoreMap":30},[35,119590,119591,119593,119595],{"class":37,"line":38},[35,119592,171],{"class":48},[35,119594,117637],{"class":306},[35,119596,26572],{"class":306},[35,119598,119599,119601,119603,119605],{"class":37,"line":45},[35,119600,171],{"class":48},[35,119602,117637],{"class":306},[35,119604,318],{"class":306},[35,119606,119323],{"class":306},[21,119608,119609],{},"这里提示snapd无法被安装，就证明成功了",[21,119611,119612],{},[1823,119613],{"alt":30,"src":119614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[465,119616,119618],{"id":119617},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[21,119620,119621],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[21,119623,119624],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[21,119626,119627],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[25,119629,119631],{"className":27,"code":119630,"language":29,"meta":30,"style":30},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[32,119632,119633,119638,119647,119652,119660],{"__ignoreMap":30},[35,119634,119635],{"class":37,"line":38},[35,119636,119637],{"class":41},"# 添加Mozilla提供的源\n",[35,119639,119640,119642,119644],{"class":37,"line":45},[35,119641,171],{"class":48},[35,119643,119162],{"class":306},[35,119645,119646],{"class":306}," ppa:mozillateam\u002Fppa\n",[35,119648,119649],{"class":37,"line":55},[35,119650,119651],{"class":41},"# 安装Firefox\n",[35,119653,119654,119656,119658],{"class":37,"line":65},[35,119655,171],{"class":48},[35,119657,117637],{"class":306},[35,119659,26572],{"class":306},[35,119661,119662,119664,119666,119668],{"class":37,"line":74},[35,119663,171],{"class":48},[35,119665,117637],{"class":306},[35,119667,318],{"class":306},[35,119669,119323],{"class":306},[465,119671,119673],{"id":119672},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[21,119675,119676],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[21,119678,119679],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[25,119681,119683],{"className":27,"code":119682,"language":29,"meta":30,"style":30},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[32,119684,119685,119690,119700,119708,119712],{"__ignoreMap":30},[35,119686,119687],{"class":37,"line":38},[35,119688,119689],{"class":41},"#删掉禁止安装snap的配置文件\n",[35,119691,119692,119694,119696,119698],{"class":37,"line":45},[35,119693,171],{"class":48},[35,119695,118871],{"class":306},[35,119697,25656],{"class":58},[35,119699,119533],{"class":306},[35,119701,119702,119704,119706],{"class":37,"line":55},[35,119703,171],{"class":48},[35,119705,117637],{"class":306},[35,119707,26572],{"class":306},[35,119709,119710],{"class":37,"line":65},[35,119711,141],{"emptyLinePlaceholder":140},[35,119713,119714,119716,119718],{"class":37,"line":74},[35,119715,171],{"class":48},[35,119717,117637],{"class":306},[35,119719,119720],{"class":306}," dist-update\n",[438,119722,119724],{"id":119723},"_33-中文输入法","3.3 中文输入法",[465,119726,119728],{"id":119727},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[21,119730,119731],{},"官网下载搜狗输入法",[21,119733,119734],{},[1823,119735],{"alt":30,"src":119736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[21,119738,119739],{},[1823,119740],{"alt":30,"src":119741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[21,119743,119744],{},"打开终端输入如下",[25,119746,119748],{"className":27,"code":119747,"language":29,"meta":30,"style":30},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[32,119749,119750,119757],{"__ignoreMap":30},[35,119751,119752,119754],{"class":37,"line":38},[35,119753,59],{"class":58},[35,119755,119756],{"class":306}," ~\u002FDownloads\u002F\n",[35,119758,119759,119761,119763,119765],{"class":37,"line":45},[35,119760,171],{"class":48},[35,119762,117637],{"class":306},[35,119764,318],{"class":306},[35,119766,119767],{"class":306}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[21,119769,119770],{},"打开Fcitx",[21,119772,119773,119776],{},[1823,119774],{"alt":30,"src":119775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1823,119777],{"alt":30,"src":119778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[21,119780,119781],{},[1823,119782],{"alt":30,"src":119783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[21,119785,119786],{},"添加搜狗输入法",[21,119788,119789],{},[1823,119790],{"alt":30,"src":119791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[21,119793,119794],{},[1823,119795],{"alt":30,"src":119796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[21,119798,119799],{},"将搜狗输入法设置为唯一输入法",[21,119801,119802],{},[1823,119803],{"alt":30,"src":119804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[465,119806,119808],{"id":119807},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[14,119810,119811],{},[17,119812,119813],{},"卸载旧输入法",[25,119815,119817],{"className":118841,"code":119816,"language":118843,"meta":30,"style":30},"sudo apt purge fcitx* ibus*\n",[32,119818,119819],{"__ignoreMap":30},[35,119820,119821,119823,119825,119827,119830,119832,119835],{"class":37,"line":38},[35,119822,171],{"class":48},[35,119824,117637],{"class":306},[35,119826,117976],{"class":306},[35,119828,119829],{"class":306}," fcitx",[35,119831,949],{"class":58},[35,119833,119834],{"class":306}," ibus",[35,119836,119566],{"class":58},[14,119838,119839],{"start":45},[17,119840,119841],{},"安装Fcitx5",[25,119843,119845],{"className":27,"code":119844,"language":29,"meta":30,"style":30},"# 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",[32,119846,119847,119852,119866,119870,119875,119884,119892],{"__ignoreMap":30},[35,119848,119849],{"class":37,"line":38},[35,119850,119851],{"class":41},"# Ubuntu22.04及以上、Debian12及以上\n",[35,119853,119854,119856,119858,119860,119863],{"class":37,"line":45},[35,119855,171],{"class":48},[35,119857,117637],{"class":306},[35,119859,318],{"class":306},[35,119861,119862],{"class":306}," fcitx5",[35,119864,119865],{"class":306}," fcitx5-chinese-addons\n",[35,119867,119868],{"class":37,"line":55},[35,119869,141],{"emptyLinePlaceholder":140},[35,119871,119872],{"class":37,"line":65},[35,119873,119874],{"class":41},"# Ubuntu20.04\n",[35,119876,119877,119879,119881],{"class":37,"line":74},[35,119878,171],{"class":48},[35,119880,119162],{"class":306},[35,119882,119883],{"class":306}," ppa:zhsj\u002Ffcitx5\n",[35,119885,119886,119888,119890],{"class":37,"line":83},[35,119887,171],{"class":48},[35,119889,117637],{"class":306},[35,119891,26572],{"class":306},[35,119893,119894,119896,119898,119900,119902],{"class":37,"line":92},[35,119895,171],{"class":48},[35,119897,117637],{"class":306},[35,119899,318],{"class":306},[35,119901,119862],{"class":306},[35,119903,119865],{"class":306},[14,119905,119906,119909],{"start":55},[17,119907,119908],{},"Reboot System",[17,119910,119911],{},"启动Fcitx5",[21,119913,119914],{},[1823,119915],{"alt":30,"src":119916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[14,119918,119919],{"start":74},[17,119920,119921],{},"修改一些设置",[21,119923,119924],{},"将Pinyin和Keyboard - English US加入到左边。",[21,119926,119927],{},[1823,119928],{"alt":30,"src":119929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[21,119931,119932],{},"添加快捷键以便于更好切换中英文",[21,119934,119935],{},[1823,119936],{"alt":30,"src":119937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[14,119939,119940],{"start":83},[17,119941,119942],{},"重启",[25,119944,119946],{"className":118841,"code":119945,"language":118843,"meta":30,"style":30},"sudo shutdown -r now\n",[32,119947,119948],{"__ignoreMap":30},[35,119949,119950,119952,119955,119958],{"class":37,"line":38},[35,119951,171],{"class":48},[35,119953,119954],{"class":306}," shutdown",[35,119956,119957],{"class":58}," -r",[35,119959,119960],{"class":306}," now\n",[14,119962,119963],{"start":92},[17,119964,119965],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[21,119967,119968],{},[734,119969,119970],{"href":119970,"rel":119971},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24198],[14,119973,119974],{"start":101},[17,119975,119976],{},"再重启",[25,119978,119979],{"className":118841,"code":119945,"language":118843,"meta":30,"style":30},[32,119980,119981],{"__ignoreMap":30},[35,119982,119983,119985,119987,119989],{"class":37,"line":38},[35,119984,171],{"class":48},[35,119986,119954],{"class":306},[35,119988,119957],{"class":58},[35,119990,119960],{"class":306},[438,119992,119994],{"id":119993},"_34-pip3源替换","3.4 pip3源替换",[21,119996,119997],{},"非Debian系发行版需要做。",[21,119999,120000],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[21,120002,120003],{},"使用dnf的系统也可能不用做。",[25,120005,120007],{"className":27,"code":120006,"language":29,"meta":30,"style":30},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,120008,120009,120014,120021,120026,120031],{"__ignoreMap":30},[35,120010,120011],{"class":37,"line":38},[35,120012,120013],{"class":41},"# 检查是否已安装 pip\n",[35,120015,120016,120019],{"class":37,"line":45},[35,120017,120018],{"class":48},"pip3",[35,120020,26623],{"class":58},[35,120022,120023],{"class":37,"line":55},[35,120024,120025],{"class":41},"# 如果未安装，先安装 pip3（见下方）\n",[35,120027,120028],{"class":37,"line":65},[35,120029,120030],{"class":41},"# 配置 pip 使用清华源\n",[35,120032,120033,120035,120038,120041,120044],{"class":37,"line":74},[35,120034,120018],{"class":48},[35,120036,120037],{"class":306}," config",[35,120039,120040],{"class":306}," set",[35,120042,120043],{"class":306}," global.index-url",[35,120045,120046],{"class":306}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[21,120048,120049],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[21,120051,120052],{},[1823,120053],{"alt":30,"src":120054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[25,120056,120058],{"className":27,"code":120057,"language":29,"meta":30,"style":30},"#安装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",[32,120059,120060,120065,120073,120084,120088,120093,120112,120116,120121,120133,120137,120142],{"__ignoreMap":30},[35,120061,120062],{"class":37,"line":38},[35,120063,120064],{"class":41},"#安装pip3\n",[35,120066,120067,120069,120071],{"class":37,"line":45},[35,120068,171],{"class":48},[35,120070,117637],{"class":306},[35,120072,26572],{"class":306},[35,120074,120075,120077,120079,120081],{"class":37,"line":55},[35,120076,171],{"class":48},[35,120078,26407],{"class":306},[35,120080,318],{"class":306},[35,120082,120083],{"class":306}," python3-pip\n",[35,120085,120086],{"class":37,"line":65},[35,120087,141],{"emptyLinePlaceholder":140},[35,120089,120090],{"class":37,"line":74},[35,120091,120092],{"class":41},"#更新pip3\n",[35,120094,120095,120097,120099,120101,120103,120105,120108,120110],{"class":37,"line":83},[35,120096,101204],{"class":48},[35,120098,101207],{"class":58},[35,120100,101230],{"class":306},[35,120102,318],{"class":306},[35,120104,26760],{"class":58},[35,120106,120107],{"class":306}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[35,120109,101235],{"class":58},[35,120111,101238],{"class":306},[35,120113,120114],{"class":37,"line":92},[35,120115,141],{"emptyLinePlaceholder":140},[35,120117,120118],{"class":37,"line":101},[35,120119,120120],{"class":41},"#设置pip源为清华源\n",[35,120122,120123,120125,120127,120129,120131],{"class":37,"line":110},[35,120124,120018],{"class":48},[35,120126,120037],{"class":306},[35,120128,120040],{"class":306},[35,120130,120043],{"class":306},[35,120132,120046],{"class":306},[35,120134,120135],{"class":37,"line":119},[35,120136,141],{"emptyLinePlaceholder":140},[35,120138,120139],{"class":37,"line":128},[35,120140,120141],{"class":41},"#测试\n",[35,120143,120144,120146,120148,120150,120152,120154],{"class":37,"line":137},[35,120145,101204],{"class":48},[35,120147,101207],{"class":58},[35,120149,101230],{"class":306},[35,120151,318],{"class":306},[35,120153,101235],{"class":58},[35,120155,101238],{"class":306},[21,120157,120158],{},"成功的话，会看到Looking后面是tsinghua字样。",[21,120160,120161],{},[1823,120162],{"alt":30,"src":120163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[438,120165,120167],{"id":120166},"_35-显卡驱动安装","3.5 显卡驱动安装",[465,120169,120171],{"id":120170},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[25,120173,120175],{"className":118841,"code":120174,"language":118843,"meta":30,"style":30},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[32,120176,120177,120182,120197,120202],{"__ignoreMap":30},[35,120178,120179],{"class":37,"line":38},[35,120180,120181],{"class":41},"# 如果是使用apt安装的驱动\n",[35,120183,120184,120186,120188,120190,120192,120195],{"class":37,"line":45},[35,120185,171],{"class":48},[35,120187,26407],{"class":306},[35,120189,329],{"class":306},[35,120191,119476],{"class":58},[35,120193,120194],{"class":306}," nvidia",[35,120196,119566],{"class":58},[35,120198,120199],{"class":37,"line":55},[35,120200,120201],{"class":41},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[35,120203,120204,120206],{"class":37,"line":65},[35,120205,171],{"class":48},[35,120207,120208],{"class":306}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[465,120210,120212],{"id":120211},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22332,120214,120216],{"id":120215},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23244,120218,120220],{"id":120219},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[25,120222,120224],{"className":118841,"code":120223,"language":118843,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,120225,120226,120231,120242,120247,120257,120262],{"__ignoreMap":30},[35,120227,120228],{"class":37,"line":38},[35,120229,120230],{"class":41},"# 安装英伟达驱动\n",[35,120232,120233,120235,120237,120239],{"class":37,"line":45},[35,120234,171],{"class":48},[35,120236,117637],{"class":306},[35,120238,318],{"class":306},[35,120240,120241],{"class":306}," nvidia-driver-版本号\n",[35,120243,120244],{"class":37,"line":55},[35,120245,120246],{"class":41},"# 重启 \n",[35,120248,120249,120251,120253,120255],{"class":37,"line":65},[35,120250,171],{"class":48},[35,120252,119954],{"class":306},[35,120254,119957],{"class":58},[35,120256,119960],{"class":306},[35,120258,120259],{"class":37,"line":74},[35,120260,120261],{"class":41},"# 检查驱动是否安装成功\n",[35,120263,120264],{"class":37,"line":83},[35,120265,120266],{"class":48},"nvidia-smi\n",[23244,120268,120270],{"id":120269},"_35212-debian","3.5.2.1.2 Debian",[25,120272,120274],{"className":118841,"code":120273,"language":118843,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,120275,120276,120280,120294,120298,120308,120312],{"__ignoreMap":30},[35,120277,120278],{"class":37,"line":38},[35,120279,120230],{"class":41},[35,120281,120282,120284,120286,120288,120291],{"class":37,"line":45},[35,120283,171],{"class":48},[35,120285,117637],{"class":306},[35,120287,318],{"class":306},[35,120289,120290],{"class":306}," nvidia-driver",[35,120292,120293],{"class":306}," nvidia-settings\n",[35,120295,120296],{"class":37,"line":55},[35,120297,120246],{"class":41},[35,120299,120300,120302,120304,120306],{"class":37,"line":65},[35,120301,171],{"class":48},[35,120303,119954],{"class":306},[35,120305,119957],{"class":58},[35,120307,119960],{"class":306},[35,120309,120310],{"class":37,"line":74},[35,120311,120261],{"class":41},[35,120313,120314],{"class":37,"line":83},[35,120315,120266],{"class":48},[22332,120317,120319],{"id":120318},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[21,120321,120322,120323,120326],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[645,120324,120325],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[21,120328,120329,120330],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23887,120331,120332],{},[645,120333,120334],{},"（也可以不禁用桌面环境，直接进行下一步。）",[25,120336,120338],{"className":118841,"code":120337,"language":118843,"meta":30,"style":30},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[32,120339,120340,120345,120355,120360,120373,120378],{"__ignoreMap":30},[35,120341,120342],{"class":37,"line":38},[35,120343,120344],{"class":41},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[35,120346,120347,120349,120352],{"class":37,"line":45},[35,120348,171],{"class":48},[35,120350,120351],{"class":306}," telinit",[35,120353,120354],{"class":58}," 3\n",[35,120356,120357],{"class":37,"line":55},[35,120358,120359],{"class":41},"# ubuntu 使用下方命令\n",[35,120361,120362,120364,120367,120370],{"class":37,"line":65},[35,120363,171],{"class":48},[35,120365,120366],{"class":306}," service",[35,120368,120369],{"class":306}," lightdm",[35,120371,120372],{"class":306}," stop\n",[35,120374,120375],{"class":37,"line":74},[35,120376,120377],{"class":41},"# Fedora 使用下方命令\n",[35,120379,120380,120382,120384,120387],{"class":37,"line":83},[35,120381,171],{"class":48},[35,120383,26843],{"class":306},[35,120385,120386],{"class":306}," isolate",[35,120388,120389],{"class":306}," multi-user.target\n",[21,120391,120392],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[25,120394,120396],{"className":118841,"code":120395,"language":118843,"meta":30,"style":30},"# 编译环境+准备工作\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",[32,120397,120398,120403,120414,120419,120426,120431,120443,120448,120455,120460],{"__ignoreMap":30},[35,120399,120400],{"class":37,"line":38},[35,120401,120402],{"class":41},"# 编译环境+准备工作\n",[35,120404,120405,120407,120409,120411],{"class":37,"line":45},[35,120406,171],{"class":48},[35,120408,117637],{"class":306},[35,120410,318],{"class":306},[35,120412,120413],{"class":306}," build-essential\n",[35,120415,120416],{"class":37,"line":55},[35,120417,120418],{"class":41},"# 进入到.run目录中\n",[35,120420,120421,120423],{"class":37,"line":65},[35,120422,59],{"class":58},[35,120424,120425],{"class":306}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[35,120427,120428],{"class":37,"line":74},[35,120429,120430],{"class":41},"# 给驱动文件增加可执行权限：\n",[35,120432,120433,120435,120437,120440],{"class":37,"line":83},[35,120434,171],{"class":48},[35,120436,24912],{"class":306},[35,120438,120439],{"class":306}," a+x",[35,120441,120442],{"class":306}," NVIDIA-Linux-x86_64-550.107.02.run\n",[35,120444,120445],{"class":37,"line":92},[35,120446,120447],{"class":41},"# 然后执行安装：\n",[35,120449,120450,120452],{"class":37,"line":101},[35,120451,171],{"class":48},[35,120453,120454],{"class":306}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[35,120456,120457],{"class":37,"line":110},[35,120458,120459],{"class":41},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[35,120461,120462,120464,120467],{"class":37,"line":119},[35,120463,171],{"class":48},[35,120465,120466],{"class":306}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[35,120468,120469],{"class":58},"  --no-opengl-files\n",[21,120471,120472],{},"安装完毕重启即可",[25,120474,120476],{"className":118841,"code":120475,"language":118843,"meta":30,"style":30},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,120477,120478,120482,120488,120492],{"__ignoreMap":30},[35,120479,120480],{"class":37,"line":38},[35,120481,120246],{"class":41},[35,120483,120484,120486],{"class":37,"line":45},[35,120485,171],{"class":48},[35,120487,26977],{"class":306},[35,120489,120490],{"class":37,"line":55},[35,120491,120261],{"class":41},[35,120493,120494],{"class":37,"line":65},[35,120495,120266],{"class":48},[465,120497,120499],{"id":120498},"_353-安装cuda","3.5.3 安装CUDA",[21,120501,120502],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[21,120504,120505],{},[1823,120506],{"alt":30,"src":120507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[14,120509,120510],{},[17,120511,120512],{},"先查看显卡驱动所支持的最高CUDA版本",[25,120514,120515],{"className":118841,"code":120266,"language":118843,"meta":30,"style":30},[32,120516,120517],{"__ignoreMap":30},[35,120518,120519],{"class":37,"line":38},[35,120520,120266],{"class":48},[21,120522,120523],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[21,120525,120526],{},[1823,120527],{"alt":30,"src":120528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[14,120530,120531],{"start":45},[17,120532,120533],{},"下载CUDA并安装CUDA",[21,120535,118620,120536],{},[734,120537,118623],{"href":118623,"rel":120538},[24198],[21,120540,120541],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[21,120543,120544],{},[1823,120545],{"alt":30,"src":120546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[21,120548,120549,120550,120555],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[734,120551,120554],{"href":120552,"rel":120553},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24198],"Vinci机器人队单片机教程","）",[21,120557,120558],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[21,120560,120561],{},[1823,120562],{"alt":30,"src":120563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[21,120565,120566],{},"将最下方框框里的命令敲入终端",[25,120568,120570],{"className":118841,"code":120569,"language":118843,"meta":30,"style":30},"# 在当前文件夹下创建一个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",[32,120571,120572,120577,120586,120591,120598,120603,120610,120615,120626,120631],{"__ignoreMap":30},[35,120573,120574],{"class":37,"line":38},[35,120575,120576],{"class":41},"# 在当前文件夹下创建一个ttt的子文件夹\n",[35,120578,120579,120581,120583],{"class":37,"line":45},[35,120580,77],{"class":48},[35,120582,29542],{"class":58},[35,120584,120585],{"class":306}," .\u002Fttt\n",[35,120587,120588],{"class":37,"line":55},[35,120589,120590],{"class":41},"# 进入ttt文件夹\n",[35,120592,120593,120595],{"class":37,"line":65},[35,120594,59],{"class":58},[35,120596,120597],{"class":306}," ttt\n",[35,120599,120600],{"class":37,"line":74},[35,120601,120602],{"class":41},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[35,120604,120605,120607],{"class":37,"line":83},[35,120606,265],{"class":48},[35,120608,120609],{"class":306}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[35,120611,120612],{"class":37,"line":92},[35,120613,120614],{"class":41},"# 给予权限\n",[35,120616,120617,120619,120621,120623],{"class":37,"line":101},[35,120618,171],{"class":48},[35,120620,24912],{"class":306},[35,120622,120439],{"class":306},[35,120624,120625],{"class":306}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[35,120627,120628],{"class":37,"line":110},[35,120629,120630],{"class":41},"# 运行脚本\n",[35,120632,120633,120635],{"class":37,"line":119},[35,120634,171],{"class":48},[35,120636,120625],{"class":306},[21,120638,120639],{},[1823,120640],{"alt":30,"src":120641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[21,120643,120644],{},"正在安装中：",[21,120646,120647],{},[1823,120648],{"alt":30,"src":120649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[21,120651,120652],{},"输入accept接受即可",[21,120654,120655],{},[1823,120656],{"alt":30,"src":120657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[21,120659,120660],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[21,120662,120663],{},[1823,120664],{"alt":30,"src":120665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[21,120667,120668],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[21,120670,120671],{},[1823,120672],{"alt":30,"src":120673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[14,120675,120676],{"start":55},[17,120677,120678],{},"配置环境",[21,120680,120681],{},"根据上方确认一下路径，比如我上面红色框起来的为",[25,120683,120685],{"className":118841,"code":120684,"language":118843,"meta":30,"style":30},"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",[32,120686,120687,120703,120718],{"__ignoreMap":30},[35,120688,120689,120692,120695,120698,120701],{"class":37,"line":38},[35,120690,120691],{"class":48},"Please",[35,120693,120694],{"class":306}," make",[35,120696,120697],{"class":306}," sure",[35,120699,120700],{"class":306}," that",[35,120702,3008],{"class":359},[35,120704,120705,120707,120710,120713,120716],{"class":37,"line":45},[35,120706,52597],{"class":48},[35,120708,120709],{"class":306},"   PATH",[35,120711,120712],{"class":306}," includes",[35,120714,120715],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[35,120717,3008],{"class":359},[35,120719,120720,120722,120725,120727,120730,120733,120735,120738,120741,120744,120747,120749,120752,120754],{"class":37,"line":55},[35,120721,52597],{"class":48},[35,120723,120724],{"class":306},"   LD_LIBRARY_PATH",[35,120726,120712],{"class":306},[35,120728,120729],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[35,120731,120732],{"class":306}," or,",[35,120734,5543],{"class":306},[35,120736,120737],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[35,120739,120740],{"class":306}," to",[35,120742,120743],{"class":306}," \u002Fetc\u002Fld.so.conf",[35,120745,120746],{"class":306}," and",[35,120748,27558],{"class":306},[35,120750,120751],{"class":306}," ldconfig",[35,120753,64930],{"class":306},[35,120755,120756],{"class":306}," root\n",[21,120758,120759],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[25,120761,120763],{"className":118841,"code":120762,"language":118843,"meta":30,"style":30},"which nvcc\n",[32,120764,120765],{"__ignoreMap":30},[35,120766,120767,120770],{"class":37,"line":38},[35,120768,120769],{"class":58},"which",[35,120771,120772],{"class":306}," nvcc\n",[21,120774,120775],{},[1823,120776],{"alt":30,"src":120777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[21,120779,120780],{},"所以我进行以下操作：",[25,120782,120784],{"className":118841,"code":120783,"language":118843,"meta":30,"style":30},"sudo vim ~\u002F.bashrc\n",[32,120785,120786],{"__ignoreMap":30},[35,120787,120788,120790,120792],{"class":37,"line":38},[35,120789,171],{"class":48},[35,120791,118901],{"class":306},[35,120793,120794],{"class":306}," ~\u002F.bashrc\n",[21,120796,120797],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[25,120799,120801],{"className":118841,"code":120800,"language":118843,"meta":30,"style":30},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[32,120802,120803,120815],{"__ignoreMap":30},[35,120804,120805,120807,120810,120812],{"class":37,"line":38},[35,120806,25374],{"class":495},[35,120808,120809],{"class":359}," PATH",[35,120811,544],{"class":495},[35,120813,120814],{"class":359},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[35,120816,120817,120819,120822,120824],{"class":37,"line":45},[35,120818,25374],{"class":495},[35,120820,120821],{"class":359}," LD_LIBRARY_PATH",[35,120823,544],{"class":495},[35,120825,120826],{"class":359},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[21,120828,120829],{},[1823,120830],{"alt":30,"src":120831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[25,120833,120835],{"className":118841,"code":120834,"language":118843,"meta":30,"style":30},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[32,120836,120837,120842,120848,120853],{"__ignoreMap":30},[35,120838,120839],{"class":37,"line":38},[35,120840,120841],{"class":41},"# 刷新当前终端的环境变量\n",[35,120843,120844,120846],{"class":37,"line":45},[35,120845,101218],{"class":58},[35,120847,120794],{"class":306},[35,120849,120850],{"class":37,"line":55},[35,120851,120852],{"class":41},"# 验证CUDA是否安装成功\n",[35,120854,120855,120858],{"class":37,"line":65},[35,120856,120857],{"class":48},"nvcc",[35,120859,120860],{"class":58}," -V\n",[21,120862,120863],{},"出现下图这种则安装成功。",[21,120865,120866],{},[1823,120867],{"alt":30,"src":120868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[465,120870,120872],{"id":120871},"_354-安装cudnn","3.5.4 安装cuDNN",[14,120874,120875],{},[17,120876,120877],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[21,120879,120880,120881,120886],{},"前往 NVIDIA cuDNN 下载页面：",[734,120882,120885],{"href":120883,"rel":120884},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24198],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[21,120888,120889],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[21,120891,120892],{},[1823,120893],{"alt":30,"src":120894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[21,120896,120897],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[21,120899,120900],{},[1823,120901],{"alt":30,"src":120902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[21,120904,120905],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[21,120907,120908],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[21,120910,120911],{},[645,120912,120913],{},"我这里选择所有Linux X86_64最通用的办法：",[21,120915,120916],{},"下载好的：",[21,120918,120919],{},[1823,120920],{"alt":30,"src":120921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[14,120923,120924],{"start":45},[17,120925,120926],{},"安装cuDNN",[21,120928,120929],{},"找到该文件所在目录，并打开终端，cd到该目录。",[21,120931,120932],{},[1823,120933],{"alt":30,"src":120934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[21,120936,120937],{},"解压文件，并复制到对应位置完成安装",[25,120939,120941],{"className":118841,"code":120940,"language":118843,"meta":30,"style":30},"# 解压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",[32,120942,120943,120948,120959,120964,120971,120976,120992,121006,121011,121022,121031,121035,121051],{"__ignoreMap":30},[35,120944,120945],{"class":37,"line":38},[35,120946,120947],{"class":41},"# 解压cuDNN文件\n",[35,120949,120950,120953,120956],{"class":37,"line":45},[35,120951,120952],{"class":48},"tar",[35,120954,120955],{"class":58}," -xvf",[35,120957,120958],{"class":306}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[35,120960,120961],{"class":37,"line":55},[35,120962,120963],{"class":41},"# cd进文件夹\n",[35,120965,120966,120968],{"class":37,"line":65},[35,120967,59],{"class":58},[35,120969,120970],{"class":306}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[35,120972,120973],{"class":37,"line":74},[35,120974,120975],{"class":41},"# 复制cuDNN文件到CUDA目录\n",[35,120977,120978,120980,120982,120985,120987,120990],{"class":37,"line":83},[35,120979,171],{"class":48},[35,120981,28189],{"class":306},[35,120983,120984],{"class":306}," include\u002Fcudnn",[35,120986,949],{"class":58},[35,120988,120989],{"class":306},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[35,120991,3008],{"class":359},[35,120993,120994,120996,120998,121001,121003],{"class":37,"line":92},[35,120995,171],{"class":48},[35,120997,28189],{"class":306},[35,120999,121000],{"class":306}," lib\u002Flibcudnn",[35,121002,949],{"class":58},[35,121004,121005],{"class":306},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[35,121007,121008],{"class":37,"line":101},[35,121009,121010],{"class":41},"# 对比一下有没有缺文件\n",[35,121012,121013,121015,121018,121020],{"class":37,"line":110},[35,121014,49],{"class":48},[35,121016,121017],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[35,121019,949],{"class":58},[35,121021,3008],{"class":359},[35,121023,121024,121026,121029],{"class":37,"line":119},[35,121025,49],{"class":48},[35,121027,121028],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[35,121030,119566],{"class":58},[35,121032,121033],{"class":37,"line":128},[35,121034,120614],{"class":41},[35,121036,121037,121039,121041,121044,121046,121048],{"class":37,"line":137},[35,121038,171],{"class":48},[35,121040,24912],{"class":306},[35,121042,121043],{"class":306}," a+r",[35,121045,121017],{"class":306},[35,121047,949],{"class":58},[35,121049,121050],{"class":359},"   \n",[35,121052,121053,121055,121057,121059,121061],{"class":37,"line":144},[35,121054,171],{"class":48},[35,121056,24912],{"class":306},[35,121058,121043],{"class":306},[35,121060,121028],{"class":306},[35,121062,119566],{"class":58},[14,121064,121065],{"start":55},[17,121066,121067],{},"检查是否安装成功",[25,121069,121071],{"className":118841,"code":121070,"language":118843,"meta":30,"style":30},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[32,121072,121073,121078],{"__ignoreMap":30},[35,121074,121075],{"class":37,"line":38},[35,121076,121077],{"class":41},"# 检查cuDNN版本命令\n",[35,121079,121080,121082,121085,121087,121089,121092,121095],{"class":37,"line":45},[35,121081,122],{"class":48},[35,121083,121084],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[35,121086,25441],{"class":495},[35,121088,30562],{"class":48},[35,121090,121091],{"class":306}," CUDNN_MAJOR",[35,121093,121094],{"class":58}," -A",[35,121096,48049],{"class":58},[21,121098,121099],{},"出现下图这样的就是安装成功了",[21,121101,121102],{},[1823,121103],{"alt":30,"src":121104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[14,121106,121107],{"start":65},[17,121108,121109],{},"软链接(一般不需要)",[25,121111,121113],{"className":118841,"code":121112,"language":118843,"meta":30,"style":30},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[32,121114,121115,121120],{"__ignoreMap":30},[35,121116,121117],{"class":37,"line":38},[35,121118,121119],{"class":41},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[35,121121,121122,121124],{"class":37,"line":45},[35,121123,171],{"class":48},[35,121125,121126],{"class":306}," ldconfig\n",[21,121128,121129],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[25,121131,121136],{"className":121132,"code":121133,"language":121134,"meta":121135,"style":30},"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",[32,121137,121138,121143,121148,121153,121158,121163,121168],{"__ignoreMap":30},[35,121139,121140],{"class":37,"line":38},[35,121141,121142],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[35,121144,121145],{"class":37,"line":45},[35,121146,121147],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[35,121149,121150],{"class":37,"line":55},[35,121151,121152],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[35,121154,121155],{"class":37,"line":65},[35,121156,121157],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[35,121159,121160],{"class":37,"line":74},[35,121161,121162],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[35,121164,121165],{"class":37,"line":83},[35,121166,121167],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[35,121169,121170],{"class":37,"line":92},[35,121171,121172],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[21,121174,121175],{},"运行下方的命令",[25,121177,121179],{"className":118841,"code":121178,"language":118843,"meta":30,"style":30},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[32,121180,121181,121186,121193,121198],{"__ignoreMap":30},[35,121182,121183],{"class":37,"line":38},[35,121184,121185],{"class":41},"# cd进入CUDA路径\n",[35,121187,121188,121190],{"class":37,"line":45},[35,121189,59],{"class":58},[35,121191,121192],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[35,121194,121195],{"class":37,"line":55},[35,121196,121197],{"class":41}," # 查看本路径下的需要软链接的文件名\n",[35,121199,121200],{"class":37,"line":65},[35,121201,121202],{"class":48}," ls\n",[21,121204,121205],{},[1823,121206],{"alt":30,"src":121207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[21,121209,121210,121211,18744,121214,18744,121217,121220],{},"如上图，我需要将",[32,121212,121213],{},"libcudnn_xxx_xxxxx.so.8.9.7",[32,121215,121216],{},"libcudnn_xxx_xxxxx.so.8",[32,121218,121219],{},"libcudnn_xxx_xxxxx.so","软链接",[25,121222,121224],{"className":118841,"code":121223,"language":118843,"meta":30,"style":30},"# 创建符号链接。对于每个 .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",[32,121225,121226,121231,121247,121261,121275,121289,121303,121317,121331,121336,121342,121347],{"__ignoreMap":30},[35,121227,121228],{"class":37,"line":38},[35,121229,121230],{"class":41},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[35,121232,121233,121235,121238,121241,121244],{"class":37,"line":45},[35,121234,171],{"class":48},[35,121236,121237],{"class":306}," ln",[35,121239,121240],{"class":58}," -sf",[35,121242,121243],{"class":306}," libcudnn_cnn_train.so.8.9.7",[35,121245,121246],{"class":306}," libcudnn_cnn_train.so.8\n",[35,121248,121249,121251,121253,121255,121258],{"class":37,"line":55},[35,121250,171],{"class":48},[35,121252,121237],{"class":306},[35,121254,121240],{"class":58},[35,121256,121257],{"class":306}," libcudnn_adv_infer.so.8.9.7",[35,121259,121260],{"class":306}," libcudnn_adv_infer.so.8\n",[35,121262,121263,121265,121267,121269,121272],{"class":37,"line":65},[35,121264,171],{"class":48},[35,121266,121237],{"class":306},[35,121268,121240],{"class":58},[35,121270,121271],{"class":306}," libcudnn_adv_train.so.8.9.7",[35,121273,121274],{"class":306}," libcudnn_adv_train.so.8\n",[35,121276,121277,121279,121281,121283,121286],{"class":37,"line":74},[35,121278,171],{"class":48},[35,121280,121237],{"class":306},[35,121282,121240],{"class":58},[35,121284,121285],{"class":306}," libcudnn_cnn_infer.so.8.9.7",[35,121287,121288],{"class":306}," libcudnn_cnn_infer.so.8\n",[35,121290,121291,121293,121295,121297,121300],{"class":37,"line":83},[35,121292,171],{"class":48},[35,121294,121237],{"class":306},[35,121296,121240],{"class":58},[35,121298,121299],{"class":306}," libcudnn.so.8.9.7",[35,121301,121302],{"class":306}," libcudnn.so.8\n",[35,121304,121305,121307,121309,121311,121314],{"class":37,"line":92},[35,121306,171],{"class":48},[35,121308,121237],{"class":306},[35,121310,121240],{"class":58},[35,121312,121313],{"class":306}," libcudnn_ops_infer.so.8.9.7",[35,121315,121316],{"class":306}," libcudnn_ops_infer.so.8\n",[35,121318,121319,121321,121323,121325,121328],{"class":37,"line":101},[35,121320,171],{"class":48},[35,121322,121237],{"class":306},[35,121324,121240],{"class":58},[35,121326,121327],{"class":306}," libcudnn_ops_train.so.8.9.7",[35,121329,121330],{"class":306}," libcudnn_ops_train.so.8\n",[35,121332,121333],{"class":37,"line":110},[35,121334,121335],{"class":41},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[35,121337,121338,121340],{"class":37,"line":119},[35,121339,171],{"class":48},[35,121341,121126],{"class":306},[35,121343,121344],{"class":37,"line":128},[35,121345,121346],{"class":41},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[35,121348,121349,121351,121354,121357,121359,121362],{"class":37,"line":137},[35,121350,49],{"class":48},[35,121352,121353],{"class":58}," -l",[35,121355,121356],{"class":306}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[35,121358,949],{"class":58},[35,121360,121361],{"class":306},".so",[35,121363,119566],{"class":58},[465,121365,121367],{"id":121366},"_355-常见问题","3.5.5 常见问题",[14,121369,121370],{},[17,121371,121372],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[25,121374,121376],{"className":118841,"code":121375,"language":118843,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[32,121377,121378],{"__ignoreMap":30},[35,121379,121380,121382,121384],{"class":37,"line":38},[35,121381,171],{"class":48},[35,121383,118901],{"class":306},[35,121385,121386],{"class":306}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[21,121388,121389],{},"blacklist-nouveau.conf文件内容如下：",[25,121391,121393],{"className":118841,"code":121392,"language":118843,"meta":30,"style":30},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[32,121394,121395,121403,121410,121422,121432],{"__ignoreMap":30},[35,121396,121397,121400],{"class":37,"line":38},[35,121398,121399],{"class":48},"blacklist",[35,121401,121402],{"class":306}," nouveau\n",[35,121404,121405,121407],{"class":37,"line":45},[35,121406,121399],{"class":48},[35,121408,121409],{"class":306}," lbm-nouveau\n",[35,121411,121412,121414,121417,121420],{"class":37,"line":55},[35,121413,116252],{"class":48},[35,121415,121416],{"class":306}," nouveau",[35,121418,121419],{"class":306}," modeset=",[35,121421,3419],{"class":58},[35,121423,121424,121427,121429],{"class":37,"line":65},[35,121425,121426],{"class":58},"alias",[35,121428,121416],{"class":306},[35,121430,121431],{"class":306}," off\n",[35,121433,121434,121436,121439],{"class":37,"line":74},[35,121435,121426],{"class":58},[35,121437,121438],{"class":306}," lbm-nouveau",[35,121440,121431],{"class":306},[21,121442,121443],{},"接着运行下方命令",[25,121445,121447],{"className":118841,"code":121446,"language":118843,"meta":30,"style":30},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[32,121448,121449,121459,121464],{"__ignoreMap":30},[35,121450,121451,121453,121456],{"class":37,"line":38},[35,121452,171],{"class":48},[35,121454,121455],{"class":306}," update-initramfs",[35,121457,121458],{"class":58}," -u\n",[35,121460,121461],{"class":37,"line":45},[35,121462,121463],{"class":48},"或者\n",[35,121465,121466,121468,121471],{"class":37,"line":55},[35,121467,171],{"class":48},[35,121469,121470],{"class":306}," dracut",[35,121472,121473],{"class":58}," --force\n",[21,121475,121476],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[25,121478,121480],{"className":118841,"code":121479,"language":118843,"meta":30,"style":30},"lsmod | grep nouveau\n",[32,121481,121482],{"__ignoreMap":30},[35,121483,121484,121487,121489,121491],{"class":37,"line":38},[35,121485,121486],{"class":48},"lsmod",[35,121488,25441],{"class":495},[35,121490,30562],{"class":48},[35,121492,121402],{"class":306},[14,121494,121495],{"start":45},[17,121496,121497],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[25,121499,121501],{"className":118841,"code":121500,"language":118843,"meta":30,"style":30},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[32,121502,121503],{"__ignoreMap":30},[35,121504,121505,121507,121509],{"class":37,"line":38},[35,121506,171],{"class":48},[35,121508,118901],{"class":306},[35,121510,121511],{"class":306}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[21,121513,121514],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[25,121516,121518],{"className":118841,"code":121517,"language":118843,"meta":30,"style":30},"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",[32,121519,121520,121528,121536,121544,121551,121559,121569,121577],{"__ignoreMap":30},[35,121521,121522,121525],{"class":37,"line":38},[35,121523,121524],{"class":48},"Section",[35,121526,121527],{"class":306}," \"OutputClass\"\n",[35,121529,121530,121533],{"class":37,"line":45},[35,121531,121532],{"class":48},"   Identifier",[35,121534,121535],{"class":306}," \"nvidia\"\n",[35,121537,121538,121541],{"class":37,"line":55},[35,121539,121540],{"class":48},"   MatchDriver",[35,121542,121543],{"class":306}," \"nvidia-drm\"\n",[35,121545,121546,121549],{"class":37,"line":65},[35,121547,121548],{"class":48},"   Driver",[35,121550,121535],{"class":306},[35,121552,121553,121556],{"class":37,"line":74},[35,121554,121555],{"class":48},"   Option",[35,121557,121558],{"class":306}," \"AllowEmptyInitialConfiguration\"\n",[35,121560,121561,121563,121566],{"class":37,"line":83},[35,121562,121555],{"class":48},[35,121564,121565],{"class":306}," \"PrimaryGPU\"",[35,121567,121568],{"class":306}," \"yes\"\n",[35,121570,121571,121574],{"class":37,"line":92},[35,121572,121573],{"class":48},"   ModulePath",[35,121575,121576],{"class":306}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[35,121578,121579],{"class":37,"line":101},[35,121580,121581],{"class":48},"EndSection\n",[14,121583,121584],{"start":55},[17,121585,121586],{},"安装N卡驱动提示错误",[25,121588,121590],{"className":121132,"code":121589,"language":121134,"meta":121135,"style":30},"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",[32,121591,121592],{"__ignoreMap":30},[35,121593,121594],{"class":37,"line":38},[35,121595,121589],{},[14,121597,121598],{},[17,121599,121600],{},"检查当前运行的内核版本：",[21,121602,121603],{},"运行以下命令以查看你当前正在使用的内核版本：",[25,121605,121607],{"className":27,"code":121606,"language":29,"meta":30,"style":30},"uname -r\n",[32,121608,121609],{"__ignoreMap":30},[35,121610,121611,121613],{"class":37,"line":38},[35,121612,191],{"class":48},[35,121614,121615],{"class":58}," -r\n",[14,121617,121618],{"start":45},[17,121619,121620],{},"安装内核开发文件：",[21,121622,121623,121624,121627],{},"确保你已经安装了与当前内核版本相匹配的 ",[32,121625,121626],{},"kernel-devel"," 包。运行以下命令来安装：",[25,121629,121631],{"className":27,"code":121630,"language":29,"meta":30,"style":30},"sudo dnf install kernel-devel-$(uname -r)\n",[32,121632,121633],{"__ignoreMap":30},[35,121634,121635,121637,121639,121641,121644,121646,121648,121650],{"class":37,"line":38},[35,121636,171],{"class":48},[35,121638,26645],{"class":306},[35,121640,318],{"class":306},[35,121642,121643],{"class":306}," kernel-devel-",[35,121645,25431],{"class":359},[35,121647,191],{"class":48},[35,121649,119957],{"class":58},[35,121651,505],{"class":359},[21,121653,121654],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[14,121656,121657],{"start":55},[17,121658,121659],{},"安装内核源代码（如果需要）：",[21,121661,121662],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[25,121664,121666],{"className":27,"code":121665,"language":29,"meta":30,"style":30},"sudo dnf install kernel-headers kernel-source\n",[32,121667,121668],{"__ignoreMap":30},[35,121669,121670,121672,121674,121676,121679],{"class":37,"line":38},[35,121671,171],{"class":48},[35,121673,26645],{"class":306},[35,121675,318],{"class":306},[35,121677,121678],{"class":306}," kernel-headers",[35,121680,121681],{"class":306}," kernel-source\n",[14,121683,121684],{"start":65},[17,121685,121686],{},"检查安装：",[21,121688,121689,121690,121693],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[32,121691,121692],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[25,121695,121697],{"className":27,"code":121696,"language":29,"meta":30,"style":30},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[32,121698,121699],{"__ignoreMap":30},[35,121700,121701,121703],{"class":37,"line":38},[35,121702,49],{"class":48},[35,121704,121705],{"class":306}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[21,121707,121708,121709,121712],{},"如果仍然遇到问题，可以通过 ",[32,121710,121711],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[416,121714,121715],{},"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":30,"searchDepth":45,"depth":45,"links":121717},[121718,121722,121732,121736,121737],{"id":118817,"depth":45,"text":118818,"children":121719},[121720,121721],{"id":118827,"depth":55,"text":118828},{"id":118837,"depth":55,"text":118838},{"id":119037,"depth":45,"text":119038,"children":121723},[121724,121725,121726,121727,121728,121729,121730,121731],{"id":119041,"depth":55,"text":119042},{"id":119111,"depth":55,"text":119112},{"id":119200,"depth":55,"text":119201},{"id":119445,"depth":55,"text":119446},{"id":119515,"depth":55,"text":119516},{"id":119582,"depth":55,"text":119583},{"id":119617,"depth":55,"text":119618},{"id":119672,"depth":55,"text":119673},{"id":119723,"depth":45,"text":119724,"children":121733},[121734,121735],{"id":119727,"depth":55,"text":119728},{"id":119807,"depth":55,"text":119808},{"id":119993,"depth":45,"text":119994},{"id":120166,"depth":45,"text":120167,"children":121738},[121739,121740,121741,121742,121743],{"id":120170,"depth":55,"text":120171},{"id":120211,"depth":55,"text":120212},{"id":120498,"depth":55,"text":120499},{"id":120871,"depth":55,"text":120872},{"id":121366,"depth":55,"text":121367},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118809,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":4,"title":5,"body":121750,"description":421,"extension":422,"meta":122030,"navigation":140,"path":424,"seo":122031,"stem":426,"__hash__":427},{"type":7,"value":121751,"toc":122028},[121752,121754,121758,121760,121962,121966,121968,121996,121998,122026],[10,121753,5],{"id":12},[14,121755,121756],{},[17,121757,19],{},[21,121759,23],{},[25,121761,121762],{"className":27,"code":28,"language":29,"meta":30,"style":30},[32,121763,121764,121768,121774,121780,121786,121792,121798,121804,121810,121816,121822,121828,121832,121836,121842,121848,121854,121858,121862,121868,121874,121880,121886,121892,121896,121900,121906,121912,121918,121924,121930,121934,121938,121946,121954],{"__ignoreMap":30},[35,121765,121766],{"class":37,"line":38},[35,121767,42],{"class":41},[35,121769,121770,121772],{"class":37,"line":45},[35,121771,49],{"class":48},[35,121773,52],{"class":41},[35,121775,121776,121778],{"class":37,"line":55},[35,121777,59],{"class":58},[35,121779,62],{"class":41},[35,121781,121782,121784],{"class":37,"line":65},[35,121783,68],{"class":58},[35,121785,71],{"class":41},[35,121787,121788,121790],{"class":37,"line":74},[35,121789,77],{"class":48},[35,121791,80],{"class":41},[35,121793,121794,121796],{"class":37,"line":83},[35,121795,86],{"class":48},[35,121797,89],{"class":41},[35,121799,121800,121802],{"class":37,"line":92},[35,121801,95],{"class":48},[35,121803,98],{"class":41},[35,121805,121806,121808],{"class":37,"line":101},[35,121807,104],{"class":48},[35,121809,107],{"class":41},[35,121811,121812,121814],{"class":37,"line":110},[35,121813,113],{"class":48},[35,121815,116],{"class":41},[35,121817,121818,121820],{"class":37,"line":119},[35,121819,122],{"class":48},[35,121821,125],{"class":41},[35,121823,121824,121826],{"class":37,"line":128},[35,121825,131],{"class":48},[35,121827,134],{"class":41},[35,121829,121830],{"class":37,"line":137},[35,121831,141],{"emptyLinePlaceholder":140},[35,121833,121834],{"class":37,"line":144},[35,121835,147],{"class":41},[35,121837,121838,121840],{"class":37,"line":150},[35,121839,153],{"class":48},[35,121841,156],{"class":41},[35,121843,121844,121846],{"class":37,"line":159},[35,121845,162],{"class":48},[35,121847,165],{"class":41},[35,121849,121850,121852],{"class":37,"line":168},[35,121851,171],{"class":48},[35,121853,174],{"class":41},[35,121855,121856],{"class":37,"line":177},[35,121857,141],{"emptyLinePlaceholder":140},[35,121859,121860],{"class":37,"line":182},[35,121861,185],{"class":41},[35,121863,121864,121866],{"class":37,"line":188},[35,121865,191],{"class":48},[35,121867,194],{"class":41},[35,121869,121870,121872],{"class":37,"line":197},[35,121871,200],{"class":48},[35,121873,203],{"class":41},[35,121875,121876,121878],{"class":37,"line":206},[35,121877,209],{"class":48},[35,121879,212],{"class":41},[35,121881,121882,121884],{"class":37,"line":215},[35,121883,218],{"class":48},[35,121885,221],{"class":41},[35,121887,121888,121890],{"class":37,"line":224},[35,121889,227],{"class":48},[35,121891,230],{"class":41},[35,121893,121894],{"class":37,"line":233},[35,121895,141],{"emptyLinePlaceholder":140},[35,121897,121898],{"class":37,"line":238},[35,121899,241],{"class":41},[35,121901,121902,121904],{"class":37,"line":244},[35,121903,247],{"class":48},[35,121905,250],{"class":41},[35,121907,121908,121910],{"class":37,"line":253},[35,121909,256],{"class":48},[35,121911,259],{"class":41},[35,121913,121914,121916],{"class":37,"line":262},[35,121915,265],{"class":48},[35,121917,268],{"class":41},[35,121919,121920,121922],{"class":37,"line":271},[35,121921,274],{"class":48},[35,121923,277],{"class":41},[35,121925,121926,121928],{"class":37,"line":280},[35,121927,283],{"class":48},[35,121929,286],{"class":41},[35,121931,121932],{"class":37,"line":289},[35,121933,141],{"emptyLinePlaceholder":140},[35,121935,121936],{"class":37,"line":294},[35,121937,297],{"class":41},[35,121939,121940,121942,121944],{"class":37,"line":300},[35,121941,303],{"class":48},[35,121943,307],{"class":306},[35,121945,310],{"class":41},[35,121947,121948,121950,121952],{"class":37,"line":313},[35,121949,303],{"class":48},[35,121951,318],{"class":306},[35,121953,321],{"class":41},[35,121955,121956,121958,121960],{"class":37,"line":324},[35,121957,303],{"class":48},[35,121959,329],{"class":306},[35,121961,332],{"class":41},[14,121963,121964],{"start":45},[17,121965,337],{},[21,121967,340],{},[25,121969,121970],{"className":27,"code":343,"language":29,"meta":30,"style":30},[32,121971,121972],{"__ignoreMap":30},[35,121973,121974,121976,121978,121980,121982,121984,121986,121988,121990,121992,121994],{"class":37,"line":38},[35,121975,350],{"class":48},[35,121977,353],{"class":306},[35,121979,356],{"class":306},[35,121981,360],{"class":359},[35,121983,363],{"class":306},[35,121985,366],{"class":359},[35,121987,369],{"class":306},[35,121989,372],{"class":58},[35,121991,375],{"class":306},[35,121993,378],{"class":58},[35,121995,381],{"class":306},[21,121997,384],{},[25,121999,122000],{"className":27,"code":387,"language":29,"meta":30,"style":30},[32,122001,122002],{"__ignoreMap":30},[35,122003,122004,122006,122008,122010,122012,122014,122016,122018,122020,122022,122024],{"class":37,"line":38},[35,122005,350],{"class":48},[35,122007,353],{"class":306},[35,122009,356],{"class":306},[35,122011,360],{"class":359},[35,122013,363],{"class":306},[35,122015,366],{"class":359},[35,122017,369],{"class":306},[35,122019,408],{"class":58},[35,122021,375],{"class":306},[35,122023,378],{"class":58},[35,122025,381],{"class":306},[416,122027,418],{},{"title":30,"searchDepth":45,"depth":45,"links":122029},[],{},{"title":5,"description":421},{"id":122033,"title":122034,"body":122035,"description":421,"extension":422,"meta":122049,"navigation":140,"path":122050,"seo":122051,"stem":122052,"__hash__":122053},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122036,"toc":122047},[122037,122040],[10,122038,122034],{"id":122039},"_5-各种环境配置",[21,122041,122042],{},[734,122043,122046],{"href":122044,"rel":122045},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24198],"电控组环境搭建大全",{"title":30,"searchDepth":45,"depth":45,"links":122048},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122034,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122055,"title":122056,"body":122057,"description":421,"extension":422,"meta":122405,"navigation":140,"path":122406,"seo":122407,"stem":122408,"__hash__":122409},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122058,"toc":122397},[122059,122062,122066,122070,122074,122079,122086,122090,122383,122387,122394],[10,122060,122056],{"id":122061},"_6-拓展功能",[438,122063,122065],{"id":122064},"_61-wine","6.1 Wine",[438,122067,122069],{"id":122068},"_62-android","6.2 Android",[465,122071,122073],{"id":122072},"_621-i卡a卡","6.2.1 I卡、A卡",[14,122075,122076],{},[17,122077,122078],{},"Wayland-Waydroid(体验超级好)",[21,122080,122081,122082],{},"Waydroid 官网与安装指南：",[734,122083,122084],{"href":122084,"rel":122085},"https:\u002F\u002Fwaydro.id\u002F",[24198],[465,122087,122089],{"id":122088},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[14,122091,122092],{},[17,122093,122094,122095,122097,122098,122102,122104,122107,122112,122309],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54042,122096],{},"BlissOS 官网下载：",[734,122099,122100],{"href":122100,"rel":122101},"https:\u002F\u002Fblissos.org\u002F",[24198],[54042,122103],{},[1823,122105],{"alt":30,"src":122106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[14,122108,122109],{"start":55},[17,122110,122111],{},"比较推荐的配置",[25,122113,122115],{"className":27,"code":122114,"language":29,"meta":30,"style":30},"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",[32,122116,122117,122124,122134,122144,122154,122166,122176,122183,122193,122202,122211,122221,122231,122240,122250,122260,122272,122282,122291,122301],{"__ignoreMap":30},[35,122118,122119,122122],{"class":37,"line":38},[35,122120,122121],{"class":48},"qemu-system-x86_64",[35,122123,25010],{"class":58},[35,122125,122126,122129,122132],{"class":37,"line":45},[35,122127,122128],{"class":58},"        -M",[35,122130,122131],{"class":306}," q35,vmport=off",[35,122133,25010],{"class":58},[35,122135,122136,122139,122142],{"class":37,"line":55},[35,122137,122138],{"class":58},"        -accel",[35,122140,122141],{"class":306}," kvm",[35,122143,25010],{"class":58},[35,122145,122146,122149,122152],{"class":37,"line":65},[35,122147,122148],{"class":58},"        -cpu",[35,122150,122151],{"class":306}," qemu64,+sse3,+sse4.2",[35,122153,25010],{"class":58},[35,122155,122156,122159,122162,122164],{"class":37,"line":74},[35,122157,122158],{"class":58},"        -smp",[35,122160,122161],{"class":306}," 8,cores=",[35,122163,789],{"class":58},[35,122165,25010],{"class":58},[35,122167,122168,122171,122174],{"class":37,"line":83},[35,122169,122170],{"class":58},"        -m",[35,122172,122173],{"class":306}," 6G",[35,122175,25010],{"class":58},[35,122177,122178,122181],{"class":37,"line":92},[35,122179,122180],{"class":58},"        -usb",[35,122182,25010],{"class":58},[35,122184,122185,122188,122191],{"class":37,"line":101},[35,122186,122187],{"class":58},"        -device",[35,122189,122190],{"class":306}," virtio-tablet",[35,122192,25010],{"class":58},[35,122194,122195,122197,122200],{"class":37,"line":110},[35,122196,122187],{"class":58},[35,122198,122199],{"class":306}," virtio-keyboard",[35,122201,25010],{"class":58},[35,122203,122204,122206,122209],{"class":37,"line":119},[35,122205,122187],{"class":58},[35,122207,122208],{"class":306}," usb-tablet",[35,122210,25010],{"class":58},[35,122212,122213,122216,122219],{"class":37,"line":128},[35,122214,122215],{"class":58},"        -bios",[35,122217,122218],{"class":306}," OVMF-pure-efi64.fd",[35,122220,25010],{"class":58},[35,122222,122223,122226,122229],{"class":37,"line":137},[35,122224,122225],{"class":58},"        -net",[35,122227,122228],{"class":306}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[35,122230,25010],{"class":58},[35,122232,122233,122235,122238],{"class":37,"line":144},[35,122234,122225],{"class":58},[35,122236,122237],{"class":306}," nic,model=virtio",[35,122239,25010],{"class":58},[35,122241,122242,122245,122248],{"class":37,"line":150},[35,122243,122244],{"class":58},"        -audio",[35,122246,122247],{"class":306}," sdl,model=hda",[35,122249,25010],{"class":58},[35,122251,122252,122255,122258],{"class":37,"line":159},[35,122253,122254],{"class":58},"        -display",[35,122256,122257],{"class":306}," sdl,gl=on,show-cursor=on",[35,122259,25010],{"class":58},[35,122261,122262,122264,122267,122270],{"class":37,"line":168},[35,122263,122187],{"class":58},[35,122265,122266],{"class":306}," virtio-vga-gl,xres=1920,yres=",[35,122268,122269],{"class":58},"1080",[35,122271,25010],{"class":58},[35,122273,122274,122277,122280],{"class":37,"line":177},[35,122275,122276],{"class":58},"        -drive",[35,122278,122279],{"class":306}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[35,122281,25010],{"class":58},[35,122283,122284,122286,122289],{"class":37,"line":182},[35,122285,122276],{"class":58},[35,122287,122288],{"class":306}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[35,122290,25010],{"class":58},[35,122292,122293,122296,122299],{"class":37,"line":188},[35,122294,122295],{"class":58},"        -monitor",[35,122297,122298],{"class":306}," stdio",[35,122300,25010],{"class":58},[35,122302,122303,122306],{"class":37,"line":197},[35,122304,122305],{"class":58},"        -serial",[35,122307,122308],{"class":306}," none\n",[14,122310,122311],{"start":74},[17,122312,122313,122314],{},"常用操作：",[14,122315,122316,122319,122375],{},[17,122317,122318],{},"全屏：Ctrl+Alt+F",[17,122320,122321,122322,122327],{},"adb调试",[14,122323,122324],{},[17,122325,122326],{},"使Linux与Android用ADB连接。",[25,122328,122330],{"className":27,"code":122329,"language":29,"meta":30,"style":30},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[32,122331,122332,122337,122348,122353,122365,122370],{"__ignoreMap":30},[35,122333,122334],{"class":37,"line":38},[35,122335,122336],{"class":41},"# 连接安卓\n",[35,122338,122339,122342,122345],{"class":37,"line":45},[35,122340,122341],{"class":48},"adb",[35,122343,122344],{"class":306}," connect",[35,122346,122347],{"class":58}," 127.0.0.1\n",[35,122349,122350],{"class":37,"line":55},[35,122351,122352],{"class":41},"# 打开shell\n",[35,122354,122355,122357,122359,122362],{"class":37,"line":65},[35,122356,122341],{"class":48},[35,122358,27211],{"class":58},[35,122360,122361],{"class":306}," 127.0.0.1:5555",[35,122363,122364],{"class":306}," shell\n",[35,122366,122367],{"class":37,"line":74},[35,122368,122369],{"class":41},"# 使用root权限\n",[35,122371,122372],{"class":37,"line":83},[35,122373,122374],{"class":48},"su\n",[17,122376,122377,122378],{},"中文输入法",[14,122379,122380],{},[17,122381,122382],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[438,122384,122386],{"id":122385},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[21,122388,122389,122390],{},"rEFInd 官网与文档：",[734,122391,122392],{"href":122392,"rel":122393},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24198],[416,122395,122396],{},"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":30,"searchDepth":45,"depth":45,"links":122398},[122399,122400,122404],{"id":122064,"depth":45,"text":122065},{"id":122068,"depth":45,"text":122069,"children":122401},[122402,122403],{"id":122072,"depth":55,"text":122073},{"id":122088,"depth":55,"text":122089},{"id":122385,"depth":45,"text":122386},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122056,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122411,"title":122412,"body":122413,"description":421,"extension":422,"meta":125712,"navigation":140,"path":125713,"seo":125714,"stem":125715,"__hash__":125716},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122414,"toc":125686},[122415,122418,122422,122425,122432,122682,122685,122757,122760,122764,122768,122773,122776,122779,122782,122787,122790,122793,122796,122801,122804,122809,122812,122815,122820,122823,122828,122831,122835,122839,122842,122847,122850,122864,122867,122870,122879,122882,122891,122894,122897,122906,122909,122918,122921,122924,122933,122936,122939,122954,122957,122960,122969,122974,122977,122980,122989,122992,123001,123004,123013,123016,123025,123030,123033,123041,123046,123049,123058,123061,123069,123074,123077,123086,123089,123092,123096,123099,123104,123107,123112,123126,123131,123136,123147,123152,123158,123163,123178,123183,123186,123191,123196,123201,123209,123214,123221,123226,123237,123242,123245,123249,123252,123255,123260,123263,123282,123287,123290,123299,123304,123307,123329,123332,123362,123365,123370,123373,123387,123392,123411,123414,123417,123422,123434,123439,123444,123447,123452,123455,123470,123473,123478,123483,123487,123492,123532,123535,123539,123545,123551,123556,123559,123566,123571,123578,123581,123584,123591,123605,123608,123668,123671,123685,123697,123700,123703,123706,123770,123773,123776,123779,123799,123802,123807,123814,123818,123821,123825,123830,123835,123839,123842,123845,123887,123892,123895,123917,123932,123934,123939,123951,124011,124013,124015,124069,124071,124073,124079,124084,124087,124092,124096,124099,124161,124166,124169,124171,124175,124187,124269,124271,124273,124327,124333,124335,124339,124344,124346,124351,124355,124375,124410,124414,124417,124420,124423,124430,124433,124445,124448,124463,124466,124485,124533,124536,124553,124556,124570,124575,124578,124587,124602,124614,124652,124657,124666,124671,124676,124702,124711,124715,124719,124724,124727,124731,124735,124740,124743,124748,124751,124756,124759,124764,124767,124771,124776,124779,124784,124787,124791,124796,124799,124804,124807,124812,124815,124819,124824,124827,124832,124835,124840,124843,124847,124852,124855,124860,124863,124868,124871,124876,124879,124884,124887,124892,124895,124899,124904,124907,124912,124919,124923,124928,124931,124936,124939,124943,124948,124951,124954,124957,124960,124963,124967,124970,124980,124985,124990,125012,125017,125022,125029,125033,125038,125041,125044,125049,125052,125055,125058,125061,125064,125067,125070,125073,125076,125079,125082,125085,125090,125095,125100,125105,125110,125115,125120,125123,125127,125130,125134,125139,125144,125149,125154,125158,125164,125172,125177,125180,125185,125200,125203,125208,125242,125257,125260,125315,125341,125353,125356,125365,125368,125383,125388,125391,125397,125402,125405,125410,125413,125418,125423,125430,125433,125448,125451,125486,125491,125499,125537,125540,125543,125548,125551,125556,125567,125601,125606,125609,125618,125623,125629,125632,125637,125646,125651,125654,125657,125662,125670,125673,125678,125683],[10,122416,122412],{"id":122417},"_7-其他操作",[438,122419,122421],{"id":122420},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[21,122423,122424],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[21,122426,122427,122428,122431],{},"进入工控机的硬盘目录，进入",[32,122429,122430],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[25,122433,122437],{"className":122434,"code":122435,"language":122436,"meta":30,"style":30},"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",[32,122438,122439,122447,122458,122465,122472,122484,122491,122503,122514,122525,122532,122539,122546,122558,122570,122577,122589,122601,122608,122620,122632,122644,122655,122662,122673],{"__ignoreMap":30},[35,122440,122441,122444],{"class":37,"line":38},[35,122442,122443],{"class":51626},"network",[35,122445,122446],{"class":359},": \n",[35,122448,122449,122452,122454,122456],{"class":37,"line":45},[35,122450,122451],{"class":51626},"  version",[35,122453,51763],{"class":359},[35,122455,574],{"class":58},[35,122457,3008],{"class":359},[35,122459,122460,122463],{"class":37,"line":55},[35,122461,122462],{"class":51626},"  wifis",[35,122464,122446],{"class":359},[35,122466,122467,122470],{"class":37,"line":65},[35,122468,122469],{"class":51626},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[35,122471,122446],{"class":359},[35,122473,122474,122477,122479,122482],{"class":37,"line":74},[35,122475,122476],{"class":51626},"      renderer",[35,122478,51763],{"class":359},[35,122480,122481],{"class":306},"NetworkManager",[35,122483,3008],{"class":359},[35,122485,122486,122489],{"class":37,"line":83},[35,122487,122488],{"class":51626},"      match",[35,122490,122446],{"class":359},[35,122492,122493,122496,122498,122501],{"class":37,"line":92},[35,122494,122495],{"class":51626},"        name",[35,122497,51763],{"class":359},[35,122499,122500],{"class":306},"\"wlan0\"",[35,122502,3008],{"class":359},[35,122504,122505,122508,122510,122512],{"class":37,"line":101},[35,122506,122507],{"class":51626},"      dhcp4",[35,122509,51763],{"class":359},[35,122511,378],{"class":58},[35,122513,3008],{"class":359},[35,122515,122516,122519,122521,122523],{"class":37,"line":110},[35,122517,122518],{"class":51626},"      dhcp6",[35,122520,51763],{"class":359},[35,122522,378],{"class":58},[35,122524,3008],{"class":359},[35,122526,122527,122530],{"class":37,"line":119},[35,122528,122529],{"class":51626},"      access-points",[35,122531,122446],{"class":359},[35,122533,122534,122537],{"class":37,"line":128},[35,122535,122536],{"class":306},"        \"EMIS_Vinci_Robocon_5G\"",[35,122538,122446],{"class":359},[35,122540,122541,122544],{"class":37,"line":137},[35,122542,122543],{"class":51626},"          auth",[35,122545,122446],{"class":359},[35,122547,122548,122551,122553,122556],{"class":37,"line":144},[35,122549,122550],{"class":51626},"            key-management",[35,122552,51763],{"class":359},[35,122554,122555],{"class":306},"\"psk\"",[35,122557,3008],{"class":359},[35,122559,122560,122563,122565,122568],{"class":37,"line":150},[35,122561,122562],{"class":51626},"            password",[35,122564,51763],{"class":359},[35,122566,122567],{"class":306},"\"vinci666\"",[35,122569,3008],{"class":359},[35,122571,122572,122575],{"class":37,"line":159},[35,122573,122574],{"class":51626},"          networkmanager",[35,122576,122446],{"class":359},[35,122578,122579,122582,122584,122587],{"class":37,"line":168},[35,122580,122581],{"class":51626},"            uuid",[35,122583,51763],{"class":359},[35,122585,122586],{"class":306},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[35,122588,3008],{"class":359},[35,122590,122591,122594,122596,122599],{"class":37,"line":177},[35,122592,122593],{"class":51626},"            name",[35,122595,51763],{"class":359},[35,122597,122598],{"class":306},"\"EMIS_Vinci_Robocon_5G\"",[35,122600,3008],{"class":359},[35,122602,122603,122606],{"class":37,"line":182},[35,122604,122605],{"class":51626},"            passthrough",[35,122607,122446],{"class":359},[35,122609,122610,122613,122615,122618],{"class":37,"line":188},[35,122611,122612],{"class":51626},"              wifi-security.auth-alg",[35,122614,51763],{"class":359},[35,122616,122617],{"class":306},"\"open\"",[35,122619,3008],{"class":359},[35,122621,122622,122625,122627,122630],{"class":37,"line":197},[35,122623,122624],{"class":51626},"              ipv6.addr-gen-mode",[35,122626,51763],{"class":359},[35,122628,122629],{"class":306},"\"default\"",[35,122631,3008],{"class":359},[35,122633,122634,122637,122639,122642],{"class":37,"line":206},[35,122635,122636],{"class":51626},"              ipv6.ip6-privacy",[35,122638,51763],{"class":359},[35,122640,122641],{"class":306},"\"-1\"",[35,122643,3008],{"class":359},[35,122645,122646,122649,122651,122653],{"class":37,"line":215},[35,122647,122648],{"class":51626},"              proxy._",[35,122650,51763],{"class":359},[35,122652,7986],{"class":306},[35,122654,3008],{"class":359},[35,122656,122657,122660],{"class":37,"line":224},[35,122658,122659],{"class":51626},"      networkmanager",[35,122661,122446],{"class":359},[35,122663,122664,122667,122669,122671],{"class":37,"line":233},[35,122665,122666],{"class":51626},"        uuid",[35,122668,51763],{"class":359},[35,122670,122586],{"class":306},[35,122672,3008],{"class":359},[35,122674,122675,122677,122679],{"class":37,"line":238},[35,122676,122495],{"class":51626},[35,122678,51763],{"class":359},[35,122680,122681],{"class":306},"\"EMIS_Vinci_Robocon_5G\"\n",[21,122683,122684],{},"将其改为新wifi的名和密码：",[25,122686,122688],{"className":122434,"code":122687,"language":122436,"meta":30,"style":30},"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",[32,122689,122690,122696,122705,122711,122718,122727,122735,122741,122747],{"__ignoreMap":30},[35,122691,122692,122694],{"class":37,"line":38},[35,122693,122443],{"class":51626},[35,122695,4073],{"class":359},[35,122697,122698,122700,122702],{"class":37,"line":45},[35,122699,122451],{"class":51626},[35,122701,51763],{"class":359},[35,122703,122704],{"class":58},"2\n",[35,122706,122707,122709],{"class":37,"line":55},[35,122708,122462],{"class":51626},[35,122710,4073],{"class":359},[35,122712,122713,122716],{"class":37,"line":65},[35,122714,122715],{"class":51626},"    wlan0",[35,122717,4073],{"class":359},[35,122719,122720,122722,122724],{"class":37,"line":74},[35,122721,122507],{"class":51626},[35,122723,51763],{"class":359},[35,122725,122726],{"class":58},"true\n",[35,122728,122729,122731,122733],{"class":37,"line":83},[35,122730,122518],{"class":51626},[35,122732,51763],{"class":359},[35,122734,122726],{"class":58},[35,122736,122737,122739],{"class":37,"line":92},[35,122738,122529],{"class":51626},[35,122740,4073],{"class":359},[35,122742,122743,122745],{"class":37,"line":101},[35,122744,122536],{"class":306},[35,122746,4073],{"class":359},[35,122748,122749,122752,122754],{"class":37,"line":110},[35,122750,122751],{"class":51626},"          password",[35,122753,51763],{"class":359},[35,122755,122756],{"class":306},"\"vinci666\"\n",[21,122758,122759],{},"工控机开机即可连上网。",[438,122761,122763],{"id":122762},"_72-ssh远程开发","7.2 SSH远程开发",[465,122765,122767],{"id":122766},"_721-环境准备","7.2.1 环境准备",[21,122769,122770],{},[645,122771,122772],{},"1.硬件准备",[21,122774,122775],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[21,122777,122778],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[21,122780,122781],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[21,122783,122784],{},[645,122785,122786],{},"2.设置固定IP",[21,122788,122789],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[21,122791,122792],{},"1.进入设置界面",[21,122794,122795],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[21,122797,122798],{},[1823,122799],{"alt":30,"src":122800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[21,122802,122803],{},"2.配置所连接的网络",[21,122805,122806],{},[1823,122807],{"alt":30,"src":122808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[21,122810,122811],{},"3.设置固定IP",[21,122813,122814],{},"查看当前IP地址。",[21,122816,122817],{},[1823,122818],{"alt":30,"src":122819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[21,122821,122822],{},"设置固定IP。",[21,122824,122825],{},[1823,122826],{"alt":30,"src":122827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[21,122829,122830],{},"至此，IP配置完毕。",[465,122832,122834],{"id":122833},"_722-环境搭建","7.2.2 环境搭建",[21,122836,122837],{},[645,122838,26084],{},[21,122840,122841],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[21,122843,122844],{},[645,122845,122846],{},"实现",[21,122848,122849],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[14,122851,122852,122855,122858,122861],{},[17,122853,122854],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[17,122856,122857],{},"远程主机启动SSH服务；",[17,122859,122860],{},"本地主机登陆远程主机；",[17,122862,122863],{},"实现数据传输。",[21,122865,122866],{},"1.安装SSH客户端与服务端",[21,122868,122869],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[25,122871,122873],{"className":121132,"code":122872,"language":121134,"meta":121135,"style":30}," sudo apt install openssh-server\n",[32,122874,122875],{"__ignoreMap":30},[35,122876,122877],{"class":37,"line":38},[35,122878,122872],{},[21,122880,122881],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[25,122883,122885],{"className":121132,"code":122884,"language":121134,"meta":121135,"style":30},"sudo apt install openssh-client\n",[32,122886,122887],{"__ignoreMap":30},[35,122888,122889],{"class":37,"line":38},[35,122890,122884],{},[21,122892,122893],{},"2.远程主机启动SSH服务",[21,122895,122896],{},"远程主机启动 ssh 服务命令如下：",[25,122898,122900],{"className":121132,"code":122899,"language":121134,"meta":121135,"style":30},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[32,122901,122902],{"__ignoreMap":30},[35,122903,122904],{"class":37,"line":38},[35,122905,122899],{},[21,122907,122908],{},"启动后可使用如下命令查看服务是否正常运行：",[25,122910,122912],{"className":121132,"code":122911,"language":121134,"meta":121135,"style":30},"ps -e | grep ssh\n",[32,122913,122914],{"__ignoreMap":30},[35,122915,122916],{"class":37,"line":38},[35,122917,122911],{},[21,122919,122920],{},"如果启动成功，会包含 sshd 程序。",[21,122922,122923],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[25,122925,122927],{"className":121132,"code":122926,"language":121134,"meta":121135,"style":30},"sudo systemctl enable ssh\n",[32,122928,122929],{"__ignoreMap":30},[35,122930,122931],{"class":37,"line":38},[35,122932,122926],{},[21,122934,122935],{},"3.本地远程登录",[21,122937,122938],{},"登录远程主机可以调用如下命令:",[25,122940,122942],{"className":27,"code":122941,"language":29,"meta":30,"style":30},"ssh -X 用户名@ip地址\n",[32,122943,122944],{"__ignoreMap":30},[35,122945,122946,122948,122951],{"class":37,"line":38},[35,122947,274],{"class":48},[35,122949,122950],{"class":58}," -X",[35,122952,122953],{"class":306}," 用户名@ip地址\n",[21,122955,122956],{},"然后根据提示，录入登陆密码，即可成功登录。",[21,122958,122959],{},"如果退出，可以调用exit命令：",[25,122961,122963],{"className":121132,"code":122962,"language":121134,"meta":121135,"style":30},"exit\n",[32,122964,122965],{"__ignoreMap":30},[35,122966,122967],{"class":37,"line":38},[35,122968,122962],{},[21,122970,122971],{},[645,122972,122973],{},"4.实现数据传输",[21,122975,122976],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[21,122978,122979],{},"上传文件指令格式如下：",[25,122981,122983],{"className":121132,"code":122982,"language":121134,"meta":121135,"style":30},"scp 本地文件路径 账号@ip:路径\n",[32,122984,122985],{"__ignoreMap":30},[35,122986,122987],{"class":37,"line":38},[35,122988,122982],{},[21,122990,122991],{},"上传文件夹指令格式如下：",[25,122993,122995],{"className":121132,"code":122994,"language":121134,"meta":121135,"style":30},"scp -r 本地文件夹路径 账号@ip:路径\n",[32,122996,122997],{"__ignoreMap":30},[35,122998,122999],{"class":37,"line":38},[35,123000,122994],{},[21,123002,123003],{},"下载文件指令格式如下：",[25,123005,123007],{"className":121132,"code":123006,"language":121134,"meta":121135,"style":30},"scp 账号@ip:路径 本地文件夹路径\n",[32,123008,123009],{"__ignoreMap":30},[35,123010,123011],{"class":37,"line":38},[35,123012,123006],{},[21,123014,123015],{},"下载文件夹指令格式如下：",[25,123017,123019],{"className":121132,"code":123018,"language":121134,"meta":121135,"style":30},"scp -r 账号@ip:路径 本地文件夹路径\n",[32,123020,123021],{"__ignoreMap":30},[35,123022,123023],{"class":37,"line":38},[35,123024,123018],{},[21,123026,123027],{},[645,123028,123029],{},"优化",[21,123031,123032],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[14,123034,123035,123038],{},[17,123036,123037],{},"本地生成密钥对；",[17,123039,123040],{},"将公钥上传至远程主机。",[21,123042,123043],{},[645,123044,123045],{},"1.生成密钥对",[21,123047,123048],{},"本地客户端生成公私钥：（一路回车默认即可）",[25,123050,123052],{"className":121132,"code":123051,"language":121134,"meta":121135,"style":30},"ssh-keygen\n",[32,123053,123054],{"__ignoreMap":30},[35,123055,123056],{"class":37,"line":38},[35,123057,123051],{},[21,123059,123060],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[14,123062,123063,123066],{},[17,123064,123065],{},"id_rsa （私钥）；",[17,123067,123068],{},"id_rsa.pub (公钥)。",[21,123070,123071],{},[645,123072,123073],{},"2.公钥上传",[21,123075,123076],{},"上传指令如下：",[25,123078,123080],{"className":121132,"code":123079,"language":121134,"meta":121135,"style":30},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[32,123081,123082],{"__ignoreMap":30},[35,123083,123084],{"class":37,"line":38},[35,123085,123079],{},[21,123087,123088],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[21,123090,123091],{},"以后再远程登录就无需录入密码了。",[465,123093,123095],{"id":123094},"_723-使用vscode优化","7.2.3 使用VScode优化",[21,123097,123098],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[21,123100,123101],{},[645,123102,123103],{},"1.准备工作",[21,123105,123106],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[21,123108,123109],{},[645,123110,123111],{},"2.为VScode安装远程开发插件",[21,123113,123114,123115,123118,123119,123122,123123,28711],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[32,123116,123117],{},"扩展：商店","的搜索栏输入",[32,123120,123121],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[32,123124,123125],{},"安装",[21,123127,123128],{},[1823,123129],{"alt":30,"src":123130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[21,123132,123133],{},[645,123134,123135],{},"3.配置远程连接",[21,123137,123138,123139,123142,123143,123146],{},"步骤1：使用快捷键",[32,123140,123141],{},"ctrl + shift + p","打开命令输入窗口，并输入",[32,123144,123145],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[21,123148,123149],{},[1823,123150],{"alt":30,"src":123151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[21,123153,123154,123155,28711],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[32,123156,123157],{},"Add New SSH Host",[21,123159,123160],{},[1823,123161],{"alt":30,"src":123162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[21,123164,123165,123166,123169,123170,123173,123174,123177],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[32,123167,123168],{},"ssh +X ubuntu@192.168.43.164","，其中，",[32,123171,123172],{},"ubuntu","需要替换为你的登录用户名，",[32,123175,123176],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[21,123179,123180],{},[1823,123181],{"alt":30,"src":123182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[21,123184,123185],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[21,123187,123188],{},[1823,123189],{"alt":30,"src":123190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[21,123192,123193],{},[1823,123194],{"alt":30,"src":123195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[21,123197,123198],{},[645,123199,123200],{},"4.使用",[21,123202,123203,123204,123142,123206,123208],{},"步骤1：继续使用快捷键",[32,123205,123141],{},[32,123207,123145],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[21,123210,123211],{},[1823,123212],{"alt":30,"src":123213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[21,123215,123216,123217,123220],{},"或者，也可以点击侧边栏的",[32,123218,123219],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[21,123222,123223],{},[1823,123224],{"alt":30,"src":123225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[21,123227,123228,123229,123232,123233,123236],{},"步骤2：选择菜单栏的",[32,123230,123231],{},"文件","下的",[32,123234,123235],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[21,123238,123239],{},[1823,123240],{"alt":30,"src":123241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[21,123243,123244],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[438,123246,123248],{"id":123247},"_73-远程桌面","7.3 远程桌面",[21,123250,123251],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[21,123253,123254],{},"我们选择使用VNC来看。",[14,123256,123257],{},[17,123258,123259],{},"安装VNC服务器：",[21,123261,123262],{},"这里以TigerVNC为例进行安装：",[25,123264,123266],{"className":27,"code":123265,"language":29,"meta":30,"style":30},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[32,123267,123268],{"__ignoreMap":30},[35,123269,123270,123272,123274,123276,123279],{"class":37,"line":38},[35,123271,171],{"class":48},[35,123273,117637],{"class":306},[35,123275,318],{"class":306},[35,123277,123278],{"class":306}," tigervnc-standalone-server",[35,123280,123281],{"class":306}," tigervnc-common\n",[14,123283,123284],{"start":45},[17,123285,123286],{},"设置VNC密码：",[21,123288,123289],{},"为VNC用户设置密码，运行以下命令：",[25,123291,123293],{"className":27,"code":123292,"language":29,"meta":30,"style":30},"vncpasswd\n",[32,123294,123295],{"__ignoreMap":30},[35,123296,123297],{"class":37,"line":38},[35,123298,123292],{"class":48},[14,123300,123301],{"start":55},[17,123302,123303],{},"配置VNC启动脚本:",[21,123305,123306],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[25,123308,123310],{"className":27,"code":123309,"language":29,"meta":30,"style":30},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[32,123311,123312,123321],{"__ignoreMap":30},[35,123313,123314,123316,123318],{"class":37,"line":38},[35,123315,77],{"class":48},[35,123317,29542],{"class":58},[35,123319,123320],{"class":306}," ~\u002F.vnc\n",[35,123322,123323,123326],{"class":37,"line":45},[35,123324,123325],{"class":48},"nano",[35,123327,123328],{"class":306}," ~\u002F.vnc\u002Fxstartup\n",[21,123330,123331],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[25,123333,123335],{"className":27,"code":123334,"language":29,"meta":30,"style":30},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[32,123336,123337,123342,123350,123357],{"__ignoreMap":30},[35,123338,123339],{"class":37,"line":38},[35,123340,123341],{"class":41},"#!\u002Fbin\u002Fsh\n",[35,123343,123344,123347],{"class":37,"line":45},[35,123345,123346],{"class":58},"unset",[35,123348,123349],{"class":306}," SESSION_MANAGER\n",[35,123351,123352,123354],{"class":37,"line":55},[35,123353,123346],{"class":58},[35,123355,123356],{"class":306}," DBUS_SESSION_BUS_ADDRESS\n",[35,123358,123359],{"class":37,"line":65},[35,123360,123361],{"class":48},"gnome-session\n",[21,123363,123364],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[14,123366,123367],{"start":65},[17,123368,123369],{},"给予执行权限：",[21,123371,123372],{},"为xstartup文件设置执行权限：",[25,123374,123376],{"className":27,"code":123375,"language":29,"meta":30,"style":30},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[32,123377,123378],{"__ignoreMap":30},[35,123379,123380,123382,123385],{"class":37,"line":38},[35,123381,153],{"class":48},[35,123383,123384],{"class":306}," +x",[35,123386,123328],{"class":306},[14,123388,123389],{"start":74},[17,123390,123391],{},"启动VNC服务器：",[25,123393,123395],{"className":27,"code":123394,"language":29,"meta":30,"style":30},"vncserver -geometry 1920x1080 -localhost=0\n",[32,123396,123397],{"__ignoreMap":30},[35,123398,123399,123402,123405,123408],{"class":37,"line":38},[35,123400,123401],{"class":48},"vncserver",[35,123403,123404],{"class":58}," -geometry",[35,123406,123407],{"class":306}," 1920x1080",[35,123409,123410],{"class":58}," -localhost=0\n",[21,123412,123413],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[21,123415,123416],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[14,123418,123419],{"start":83},[17,123420,123421],{},"查看已开启的VNC服务器：",[25,123423,123425],{"className":27,"code":123424,"language":29,"meta":30,"style":30},"vncserver -list\n",[32,123426,123427],{"__ignoreMap":30},[35,123428,123429,123431],{"class":37,"line":38},[35,123430,123401],{"class":48},[35,123432,123433],{"class":58}," -list\n",[21,123435,123436],{},[1823,123437],{"alt":30,"src":123438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[14,123440,123441],{"start":92},[17,123442,123443],{},"连接到VNC服务器：",[21,123445,123446],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[14,123448,123449],{"start":101},[17,123450,123451],{},"停止VNC服务器：",[21,123453,123454],{},"如果需要停止VNC服务器，可以使用以下命令：",[25,123456,123458],{"className":27,"code":123457,"language":29,"meta":30,"style":30},"vncserver -kill :1\n",[32,123459,123460],{"__ignoreMap":30},[35,123461,123462,123464,123467],{"class":37,"line":38},[35,123463,123401],{"class":48},[35,123465,123466],{"class":58}," -kill",[35,123468,123469],{"class":306}," :1\n",[21,123471,123472],{},"将:1替换为你实际使用的显示编号。",[21,123474,123475],{},[1823,123476],{"alt":30,"src":123477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[21,123479,123480],{},[1823,123481],{"alt":30,"src":123482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[438,123484,123486],{"id":123485},"_74-usb端口设置","7.4 USB端口设置",[21,123488,123489],{},[645,123490,123491],{},"首先先配置好权限",[25,123493,123495],{"className":27,"code":123494,"language":29,"meta":30,"style":30},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[32,123496,123497,123502,123515,123522,123527],{"__ignoreMap":30},[35,123498,123499],{"class":37,"line":38},[35,123500,123501],{"class":41},"# 将用户权限提高\n",[35,123503,123504,123506,123508,123510,123513],{"class":37,"line":45},[35,123505,171],{"class":48},[35,123507,26904],{"class":306},[35,123509,26907],{"class":58},[35,123511,123512],{"class":306}," dialout",[35,123514,26912],{"class":359},[35,123516,123517,123519],{"class":37,"line":55},[35,123518,26931],{"class":48},[35,123520,123521],{"class":306}," dialout\n",[35,123523,123524],{"class":37,"line":65},[35,123525,123526],{"class":41},"# 查看下面命令是否输出dialout（若输出才正常）\n",[35,123528,123529],{"class":37,"line":74},[35,123530,123531],{"class":48},"groups\n",[21,123533,123534],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[465,123536,123538],{"id":123537},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[21,123540,123541,123544],{},[645,123542,123543],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[21,123546,123547,123550],{},[645,123548,123549],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[21,123552,123553],{},[645,123554,123555],{},"流程如下：",[21,123557,123558],{},"（1）.查找设备idVendor和idProduct",[21,123560,123561,123562,123565],{},"接入两个USB设备，在终端调用指令",[32,123563,123564],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[21,123567,123568],{},[1823,123569],{"alt":30,"src":123570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[21,123572,123573,123574,123577],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[32,123575,123576],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[21,123579,123580],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[21,123582,123583],{},"（2）.编写映射规则",[21,123585,123586,123587,123590],{},"在",[32,123588,123589],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[25,123592,123594],{"className":27,"code":123593,"language":29,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[32,123595,123596],{"__ignoreMap":30},[35,123597,123598,123600,123602],{"class":37,"line":38},[35,123599,171],{"class":48},[35,123601,118901],{"class":306},[35,123603,123604],{"class":306}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[21,123606,123607],{},"输入如下内容：",[25,123609,123611],{"className":27,"code":123610,"language":29,"meta":30,"style":30},"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",[32,123612,123613,123643],{"__ignoreMap":30},[35,123614,123615,123618,123620,123623,123626,123629,123632,123634,123637,123640],{"class":37,"line":38},[35,123616,123617],{"class":359},"KERNEL",[35,123619,544],{"class":495},[35,123621,123622],{"class":306},"=\"ttyUSB*\",",[35,123624,123625],{"class":48}," ATTRS",[35,123627,123628],{"class":306},"{idVendor}==",[35,123630,123631],{"class":48},"\"10c4\"",[35,123633,872],{"class":48},[35,123635,123636],{"class":306}," ATTRS{idProduct}==\"ea60\",",[35,123638,123639],{"class":306}," MODE:=\"0777\",",[35,123641,123642],{"class":306}," SYMLINK+=\"mylidar\"\n",[35,123644,123645,123647,123649,123651,123653,123655,123658,123660,123663,123665],{"class":37,"line":45},[35,123646,123617],{"class":359},[35,123648,544],{"class":495},[35,123650,123622],{"class":306},[35,123652,123625],{"class":48},[35,123654,123628],{"class":306},[35,123656,123657],{"class":48},"\"1a86\"",[35,123659,872],{"class":48},[35,123661,123662],{"class":306}," ATTRS{idProduct}==\"7523\",",[35,123664,123639],{"class":306},[35,123666,123667],{"class":306}," SYMLINK+=\"mycar\"\n",[21,123669,123670],{},"代码解释：",[1501,123672,123673,123676,123679,123682],{},[17,123674,123675],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[17,123677,123678],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[17,123680,123681],{},"SYMLINK是符号连接，即绑定的别名；",[17,123683,123684],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[21,123686,123687,123688,123691,123694],{},"***小提示：***",[23887,123689,123690],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[32,123692,123693],{},"\u002Fetc\u002Fudev\u002Frule.d",[23887,123695,123696],{},"目录即可。",[21,123698,123699],{},"表格 还在加载中，请等待加载完成后再尝试复制",[21,123701,123702],{},"（3）.使规则生效",[21,123704,123705],{},"在终端下输入如下指令：",[25,123707,123709],{"className":27,"code":123708,"language":29,"meta":30,"style":30},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[32,123710,123711,123716,123728,123739,123743,123748,123761],{"__ignoreMap":30},[35,123712,123713],{"class":37,"line":38},[35,123714,123715],{"class":41},"# Ubuntu用下方命令\n",[35,123717,123718,123720,123722,123725],{"class":37,"line":45},[35,123719,171],{"class":48},[35,123721,120366],{"class":306},[35,123723,123724],{"class":306}," udev",[35,123726,123727],{"class":306}," reload\n",[35,123729,123730,123732,123734,123736],{"class":37,"line":55},[35,123731,171],{"class":48},[35,123733,120366],{"class":306},[35,123735,123724],{"class":306},[35,123737,123738],{"class":306}," restart\n",[35,123740,123741],{"class":37,"line":65},[35,123742,141],{"emptyLinePlaceholder":140},[35,123744,123745],{"class":37,"line":74},[35,123746,123747],{"class":41},"#Fedora用下方命令\n",[35,123749,123750,123752,123755,123758],{"class":37,"line":83},[35,123751,171],{"class":48},[35,123753,123754],{"class":306}," udevadm",[35,123756,123757],{"class":306}," control",[35,123759,123760],{"class":58}," --reload\n",[35,123762,123763,123765,123767],{"class":37,"line":92},[35,123764,171],{"class":48},[35,123766,123754],{"class":306},[35,123768,123769],{"class":306}," trigger\n",[21,123771,123772],{},"再重新插拔设备即可。",[21,123774,123775],{},"（4）.测试",[21,123777,123778],{},"终端下输入如下指令",[25,123780,123782],{"className":27,"code":123781,"language":29,"meta":30,"style":30},"ll \u002Fdev | grep ttyUSB\n",[32,123783,123784],{"__ignoreMap":30},[35,123785,123786,123789,123792,123794,123796],{"class":37,"line":38},[35,123787,123788],{"class":48},"ll",[35,123790,123791],{"class":306}," \u002Fdev",[35,123793,25441],{"class":495},[35,123795,30562],{"class":48},[35,123797,123798],{"class":306}," ttyUSB\n",[21,123800,123801],{},"运行结果如下：",[21,123803,123804],{},[1823,123805],{"alt":30,"src":123806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[21,123808,123809,123810,123813],{},"也可以多次插拔USB设备，会发现设备端口",[32,123811,123812],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[21,123815,123816],{},[645,123817,118282],{},[21,123819,123820],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[465,123822,123824],{"id":123823},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[21,123826,123827,123829],{},[645,123828,123543],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[21,123831,123832,123834],{},[645,123833,123549],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[21,123836,123837],{},[645,123838,123555],{},[21,123840,123841],{},"（1）.查看所连接的主机USB接口的KERNELS",[21,123843,123844],{},"调用如下指令查看第一台雷达的USB信息：",[25,123846,123848],{"className":27,"code":123847,"language":29,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[32,123849,123850,123870],{"__ignoreMap":30},[35,123851,123852,123855,123857,123860,123863,123865,123867],{"class":37,"line":38},[35,123853,123854],{"class":48},"udevadm",[35,123856,70147],{"class":306},[35,123858,123859],{"class":58}," --attribute-walk",[35,123861,123862],{"class":58}," --name=\u002Fdev\u002FttyUSB0",[35,123864,25441],{"class":495},[35,123866,30562],{"class":48},[35,123868,123869],{"class":306}," KERNELS\n",[35,123871,123872,123874,123876,123878,123881,123883,123885],{"class":37,"line":45},[35,123873,123854],{"class":48},[35,123875,70147],{"class":306},[35,123877,123859],{"class":58},[35,123879,123880],{"class":58}," --name=\u002Fdev\u002FttyACM0",[35,123882,25441],{"class":495},[35,123884,30562],{"class":48},[35,123886,123869],{"class":306},[21,123888,123889],{},[1823,123890],{"alt":30,"src":123891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[21,123893,123894],{},"调用如下指令查看第二台雷达的USB信息：",[25,123896,123898],{"className":27,"code":123897,"language":29,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[32,123899,123900],{"__ignoreMap":30},[35,123901,123902,123904,123906,123908,123911,123913,123915],{"class":37,"line":38},[35,123903,123854],{"class":48},[35,123905,70147],{"class":306},[35,123907,123859],{"class":58},[35,123909,123910],{"class":58}," --name=\u002Fdev\u002FttyUSB1",[35,123912,25441],{"class":495},[35,123914,30562],{"class":48},[35,123916,123869],{"class":306},[21,123918,123919,123920,123923,123924,123927,123928,123931],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[32,123921,123922],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[32,123925,123926],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[645,123929,123930],{},"唯一性标识","”。",[21,123933,123583],{},[21,123935,123586,123936,123938],{},[32,123937,123589],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[25,123940,123941],{"className":27,"code":123593,"language":29,"meta":30,"style":30},[32,123942,123943],{"__ignoreMap":30},[35,123944,123945,123947,123949],{"class":37,"line":38},[35,123946,171],{"class":48},[35,123948,118901],{"class":306},[35,123950,123604],{"class":306},[25,123952,123954],{"className":27,"code":123953,"language":29,"meta":30,"style":30},"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",[32,123955,123956,123985],{"__ignoreMap":30},[35,123957,123958,123960,123962,123964,123967,123969,123972,123975,123977,123980,123982],{"class":37,"line":38},[35,123959,123617],{"class":359},[35,123961,544],{"class":495},[35,123963,123622],{"class":306},[35,123965,123966],{"class":359}," KERNELS",[35,123968,544],{"class":495},[35,123970,123971],{"class":306},"=\"1-1.3:1.0\",",[35,123973,123974],{"class":48}," MODE:",[35,123976,544],{"class":306},[35,123978,123979],{"class":48},"\"0777\"",[35,123981,872],{"class":48},[35,123983,123984],{"class":306}," SYMLINK+=\"rplidar_front\"\n",[35,123986,123987,123989,123991,123993,123995,123997,124000,124002,124004,124006,124008],{"class":37,"line":45},[35,123988,123617],{"class":359},[35,123990,544],{"class":495},[35,123992,123622],{"class":306},[35,123994,123966],{"class":359},[35,123996,544],{"class":495},[35,123998,123999],{"class":306},"=\"1-1.4:1.0\",",[35,124001,123974],{"class":48},[35,124003,544],{"class":306},[35,124005,123979],{"class":48},[35,124007,872],{"class":48},[35,124009,124010],{"class":306}," SYMLINK+=\"rplidar_back\"\n",[21,124012,123702],{},[21,124014,123705],{},[25,124016,124017],{"className":27,"code":123708,"language":29,"meta":30,"style":30},[32,124018,124019,124023,124033,124043,124047,124051,124061],{"__ignoreMap":30},[35,124020,124021],{"class":37,"line":38},[35,124022,123715],{"class":41},[35,124024,124025,124027,124029,124031],{"class":37,"line":45},[35,124026,171],{"class":48},[35,124028,120366],{"class":306},[35,124030,123724],{"class":306},[35,124032,123727],{"class":306},[35,124034,124035,124037,124039,124041],{"class":37,"line":55},[35,124036,171],{"class":48},[35,124038,120366],{"class":306},[35,124040,123724],{"class":306},[35,124042,123738],{"class":306},[35,124044,124045],{"class":37,"line":65},[35,124046,141],{"emptyLinePlaceholder":140},[35,124048,124049],{"class":37,"line":74},[35,124050,123747],{"class":41},[35,124052,124053,124055,124057,124059],{"class":37,"line":83},[35,124054,171],{"class":48},[35,124056,123754],{"class":306},[35,124058,123757],{"class":306},[35,124060,123760],{"class":58},[35,124062,124063,124065,124067],{"class":37,"line":92},[35,124064,171],{"class":48},[35,124066,123754],{"class":306},[35,124068,123769],{"class":306},[21,124070,123772],{},[21,124072,123775],{},[21,124074,123778,124075,124078],{},[32,124076,124077],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[21,124080,124081],{},[1823,124082],{"alt":30,"src":124083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[21,124085,124086],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[21,124088,124089,124091],{},[645,124090,118282],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[465,124093,124095],{"id":124094},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[21,124097,124098],{},"（1）.查看所连接的主机USB接口的信息",[25,124100,124102],{"className":27,"code":124101,"language":29,"meta":30,"style":30},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[32,124103,124104,124134],{"__ignoreMap":30},[35,124105,124106,124108,124110,124113,124115,124117,124119,124121,124124,124127,124129,124132],{"class":37,"line":38},[35,124107,123854],{"class":48},[35,124109,70147],{"class":306},[35,124111,124112],{"class":58}," -a",[35,124114,29542],{"class":58},[35,124116,28748],{"class":359},[35,124118,123854],{"class":48},[35,124120,70147],{"class":306},[35,124122,124123],{"class":58}," -q",[35,124125,124126],{"class":306}," path",[35,124128,25447],{"class":58},[35,124130,124131],{"class":306}," \u002Fdev\u002FttyACM0",[35,124133,505],{"class":359},[35,124135,124136,124138,124140,124142,124144,124146,124148,124150,124152,124154,124156,124159],{"class":37,"line":45},[35,124137,123854],{"class":48},[35,124139,70147],{"class":306},[35,124141,124112],{"class":58},[35,124143,29542],{"class":58},[35,124145,28748],{"class":359},[35,124147,123854],{"class":48},[35,124149,70147],{"class":306},[35,124151,124123],{"class":58},[35,124153,124126],{"class":306},[35,124155,25447],{"class":58},[35,124157,124158],{"class":306}," \u002Fdev\u002FttyUSB0",[35,124160,505],{"class":359},[21,124162,124163],{},[1823,124164],{"alt":30,"src":124165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[21,124167,124168],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[21,124170,123583],{},[21,124172,123586,124173,123938],{},[32,124174,123589],{},[25,124176,124177],{"className":27,"code":123593,"language":29,"meta":30,"style":30},[32,124178,124179],{"__ignoreMap":30},[35,124180,124181,124183,124185],{"class":37,"line":38},[35,124182,171],{"class":48},[35,124184,118901],{"class":306},[35,124186,123604],{"class":306},[25,124188,124190],{"className":27,"code":124189,"language":29,"meta":30,"style":30},"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",[32,124191,124192,124220,124246],{"__ignoreMap":30},[35,124193,124194,124196,124198,124201,124203,124205,124207,124209,124212,124215,124217],{"class":37,"line":38},[35,124195,123617],{"class":359},[35,124197,544],{"class":495},[35,124199,124200],{"class":306},"=\"ttyACM*\",",[35,124202,123625],{"class":48},[35,124204,123628],{"class":306},[35,124206,123657],{"class":48},[35,124208,872],{"class":48},[35,124210,124211],{"class":306}," ATTRS{idProduct}==\"55d4\",",[35,124213,124214],{"class":306}," ATTRS{serial}==\"0001\",",[35,124216,123639],{"class":306},[35,124218,124219],{"class":306}," SYMLINK+=\"ttyACM_MCU\"\n",[35,124221,124222,124224,124226,124228,124230,124232,124234,124236,124238,124241,124243],{"class":37,"line":45},[35,124223,123617],{"class":359},[35,124225,544],{"class":495},[35,124227,124200],{"class":306},[35,124229,123625],{"class":48},[35,124231,123628],{"class":306},[35,124233,123657],{"class":48},[35,124235,872],{"class":48},[35,124237,124211],{"class":306},[35,124239,124240],{"class":306}," ATTRS{serial}==\"0002\",",[35,124242,123639],{"class":306},[35,124244,124245],{"class":306}," SYMLINK+=\"ttyACM_Lidar\"\n",[35,124247,124248,124250,124252,124254,124256,124258,124260,124262,124264,124266],{"class":37,"line":55},[35,124249,123617],{"class":359},[35,124251,544],{"class":495},[35,124253,123622],{"class":306},[35,124255,123625],{"class":48},[35,124257,123628],{"class":306},[35,124259,123657],{"class":48},[35,124261,872],{"class":48},[35,124263,123662],{"class":306},[35,124265,123639],{"class":306},[35,124267,124268],{"class":306}," SYMLINK+=\"ttyUSB_IMU\"\n",[21,124270,123702],{},[21,124272,123705],{},[25,124274,124275],{"className":27,"code":123708,"language":29,"meta":30,"style":30},[32,124276,124277,124281,124291,124301,124305,124309,124319],{"__ignoreMap":30},[35,124278,124279],{"class":37,"line":38},[35,124280,123715],{"class":41},[35,124282,124283,124285,124287,124289],{"class":37,"line":45},[35,124284,171],{"class":48},[35,124286,120366],{"class":306},[35,124288,123724],{"class":306},[35,124290,123727],{"class":306},[35,124292,124293,124295,124297,124299],{"class":37,"line":55},[35,124294,171],{"class":48},[35,124296,120366],{"class":306},[35,124298,123724],{"class":306},[35,124300,123738],{"class":306},[35,124302,124303],{"class":37,"line":65},[35,124304,141],{"emptyLinePlaceholder":140},[35,124306,124307],{"class":37,"line":74},[35,124308,123747],{"class":41},[35,124310,124311,124313,124315,124317],{"class":37,"line":83},[35,124312,171],{"class":48},[35,124314,123754],{"class":306},[35,124316,123757],{"class":306},[35,124318,123760],{"class":58},[35,124320,124321,124323,124325],{"class":37,"line":92},[35,124322,171],{"class":48},[35,124324,123754],{"class":306},[35,124326,123769],{"class":306},[21,124328,124329,124330],{},"再重新插拔设备即可，或者 ",[645,124331,124332],{},"直接重启系统。",[21,124334,123775],{},[21,124336,123778,124337,124078],{},[32,124338,124077],{},[21,124340,124341],{},[1823,124342],{"alt":30,"src":124343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[21,124345,124086],{},[21,124347,124348,124350],{},[645,124349,118282],{}," 一些设备可能没有串口号等。",[465,124352,124354],{"id":124353},"_744-其他注意事项","7.4.4 其他注意事项",[21,124356,124357,124358,124360,124361,124364,124365,18744,124368,124371,124372,124374],{},"并非所有的USB设备端口号都是",[32,124359,123812],{},"的格式，比如Arduino的端口号可能是",[32,124362,124363],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[32,124366,124367],{},"videon",[32,124369,124370],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[32,124373,124367],{},"端口，绑定时需要关联的也是该接口。",[21,124376,124377,124378,124381,124382,124385,124386,124388,124389,124392,124393,124396,124397,124400,124401,124400,124404,124400,124407,28711],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[32,124379,124380],{},"KERNEL==\"ttyUSB*\"","修改为",[32,124383,124384],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[32,124387,124380],{},"修改为类似于",[32,124390,124391],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[32,124394,124395],{},"video[0,2,4,6]","表示可以绑定的端口为",[32,124398,124399],{},"video0","或",[32,124402,124403],{},"video2",[32,124405,124406],{},"video4",[32,124408,124409],{},"video6",[438,124411,124413],{"id":124412},"_75-挂载内网网页","7.5 挂载内网网页",[21,124415,124416],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[21,124418,124419],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[21,124421,124422],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[21,124424,124425,124426],{},"Termux 下载地址（F-Droid）：",[734,124427,124428],{"href":124428,"rel":124429},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24198],[21,124431,124432],{},"首先打开app后，先更新软件缓存：",[25,124434,124436],{"className":27,"code":124435,"language":29,"meta":30,"style":30},"pkg update\n",[32,124437,124438],{"__ignoreMap":30},[35,124439,124440,124443],{"class":37,"line":38},[35,124441,124442],{"class":48},"pkg",[35,124444,26572],{"class":306},[21,124446,124447],{},"然后换源",[25,124449,124451],{"className":27,"code":124450,"language":29,"meta":30,"style":30},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[32,124452,124453],{"__ignoreMap":30},[35,124454,124455,124457,124460],{"class":37,"line":38},[35,124456,123325],{"class":48},[35,124458,124459],{"class":359}," $PREFIX",[35,124461,124462],{"class":306},"\u002Fetc\u002Fapt\u002Fsources.list\n",[21,124464,124465],{},"将该文件内容替换为下面：",[25,124467,124469],{"className":27,"code":124468,"language":29,"meta":30,"style":30},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[32,124470,124471],{"__ignoreMap":30},[35,124472,124473,124476,124479,124482],{"class":37,"line":38},[35,124474,124475],{"class":48},"deb",[35,124477,124478],{"class":306}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[35,124480,124481],{"class":306}," stable",[35,124483,124484],{"class":306}," main\n",[1501,124486,124487,124514],{},[17,124488,124489,124490,124492,124493],{},"如果你使用的是",[32,124491,123325],{},"编辑器：",[1501,124494,124495,124502,124508],{},[17,124496,124497,124498,124501],{},"按 ",[32,124499,124500],{},"Ctrl+O"," 保存文件。",[17,124503,124497,124504,124507],{},[32,124505,124506],{},"Enter"," 确认文件名。",[17,124509,124497,124510,124513],{},[32,124511,124512],{},"Ctrl+X"," 退出编辑器。",[17,124515,124489,124516,124492,124519],{},[32,124517,124518],{},"vim",[1501,124520,124521,124527],{},[17,124522,124497,124523,124526],{},[32,124524,124525],{},"Esc"," 退出编辑模式。",[17,124528,124529,124530,124532],{},"输入 ",[32,124531,119539],{}," 保存并退出。",[21,124534,124535],{},"接下来重新更新软件源：",[25,124537,124539],{"className":27,"code":124538,"language":29,"meta":30,"style":30},"pkg update && pkg upgrade\n",[32,124540,124541],{"__ignoreMap":30},[35,124542,124543,124545,124547,124549,124551],{"class":37,"line":38},[35,124544,124442],{"class":48},[35,124546,307],{"class":306},[35,124548,26520],{"class":359},[35,124550,124442],{"class":48},[35,124552,117653],{"class":306},[21,124554,124555],{},"安装python：",[25,124557,124559],{"className":27,"code":124558,"language":29,"meta":30,"style":30},"pkg install python\n",[32,124560,124561],{"__ignoreMap":30},[35,124562,124563,124565,124567],{"class":37,"line":38},[35,124564,124442],{"class":48},[35,124566,318],{"class":306},[35,124568,124569],{"class":306}," python\n",[21,124571,124572,26803],{},[645,124573,124574],{},"通过Termux访问设备存储",[21,124576,124577],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[25,124579,124581],{"className":27,"code":124580,"language":29,"meta":30,"style":30},"termux-setup-storage\n",[32,124582,124583],{"__ignoreMap":30},[35,124584,124585],{"class":37,"line":38},[35,124586,124580],{"class":48},[14,124588,124589],{},[17,124590,124591,26803,124594],{},[645,124592,124593],{},"进入HTML文件所在的目录",[14,124595,124596],{},[17,124597,124598,124599,124601],{},"使用",[32,124600,59],{},"命令进入HTML文件所在的目录：",[25,124603,124605],{"className":27,"code":124604,"language":29,"meta":30,"style":30},"cd ~\u002Fyour_html_folder\n",[32,124606,124607],{"__ignoreMap":30},[35,124608,124609,124611],{"class":37,"line":38},[35,124610,59],{"class":58},[35,124612,124613],{"class":306}," ~\u002Fyour_html_folder\n",[14,124615,124616],{"start":45},[17,124617,124618,26803,124621,124626,124643],{},[645,124619,124620],{},"启动Python HTTP服务器",[14,124622,124623],{},[17,124624,124625],{},"运行以下命令启动一个简单的HTTP服务器：",[25,124627,124629],{"className":27,"code":124628,"language":29,"meta":30,"style":30},"python -m http.server 8000\n",[32,124630,124631],{"__ignoreMap":30},[35,124632,124633,124635,124637,124640],{"class":37,"line":38},[35,124634,30706],{"class":48},[35,124636,101207],{"class":58},[35,124638,124639],{"class":306}," http.server",[35,124641,124642],{"class":58}," 8000\n",[14,124644,124645],{"start":55},[17,124646,124647,124648,124651],{},"这会在端口",[32,124649,124650],{},"8000","上启动一个Web服务器。",[1501,124653,124654],{},[17,124655,124656],{},"启动服务器后，Termux会显示日志信息，例如：",[25,124658,124660],{"className":121132,"code":124659,"language":121134,"meta":121135,"style":30},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[32,124661,124662],{"__ignoreMap":30},[35,124663,124664],{"class":37,"line":38},[35,124665,124659],{},[1501,124667,124668],{},[17,124669,124670],{},"这表示服务器已成功启动。",[21,124672,124673],{},[645,124674,124675],{},"在浏览器中访问HTML文件",[14,124677,124678],{},[17,124679,124680,26803,124683,124688],{},[645,124681,124682],{},"在同一设备上访问",[14,124684,124685],{},[17,124686,124687],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[25,124689,124692],{"className":124690,"code":124691,"language":71989,"meta":30,"style":30},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[32,124693,124694],{"__ignoreMap":30},[35,124695,124696,124699],{"class":37,"line":38},[35,124697,124698],{"class":359},"http:",[35,124700,124701],{"class":41},"\u002F\u002Flocalhost:8000\n",[1501,124703,124704],{},[17,124705,124706,124707,124710],{},"如果HTML文件中有",[32,124708,124709],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[438,124712,124714],{"id":124713},"_76-linux重点知识","7.6 Linux重点知识",[465,124716,124718],{"id":124717},"_761-关于点的说明","7.6.1 关于点的说明",[21,124720,124721],{},[1823,124722],{"alt":30,"src":124723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[21,124725,124726],{},"一点本目录，两点上目录",[465,124728,124730],{"id":124729},"_762-目录","7.6.2 目录",[22332,124732,124734],{"id":124733},"_7621-系统启动必须","7.6.2.1 系统启动必须",[21,124736,124737],{},[645,124738,124739],{},"\u002Fboot:",[21,124741,124742],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[21,124744,124745],{},[645,124746,124747],{},"\u002Fetc:",[21,124749,124750],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[21,124752,124753],{},[645,124754,124755],{},"\u002Flib：",[21,124757,124758],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[21,124760,124761],{},[645,124762,124763],{},"\u002Fsys:",[21,124765,124766],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22332,124768,124770],{"id":124769},"_7622-指令集合","7.6.2.2 指令集合",[21,124772,124773],{},[645,124774,124775],{},"\u002Fbin:",[21,124777,124778],{},"为二进制文件的缩写，存放最经常使用的命令",[21,124780,124781],{},[645,124782,124783],{},"\u002Fsbin:",[21,124785,124786],{},"只有系统管理员才能使用的程序和指令",[22332,124788,124790],{"id":124789},"_7623-外部文件管理","7.6.2.3 外部文件管理",[21,124792,124793],{},[645,124794,124795],{},"\u002Fdev:",[21,124797,124798],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[21,124800,124801],{},[645,124802,124803],{},"\u002Fmedia:",[21,124805,124806],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[21,124808,124809],{},[645,124810,124811],{},"\u002Fmnt:",[21,124813,124814],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22332,124816,124818],{"id":124817},"_7624-临时文件","7.6.2.4 临时文件",[21,124820,124821],{},[645,124822,124823],{},"\u002Frun:",[21,124825,124826],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[21,124828,124829],{},[645,124830,124831],{},"\u002Flost+found:",[21,124833,124834],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[21,124836,124837],{},[645,124838,124839],{},"\u002Ftmp:",[21,124841,124842],{},"这个目录是用来存放一些临时文件的",[22332,124844,124846],{"id":124845},"_7625-账户","7.6.2.5 账户",[21,124848,124849],{},[645,124850,124851],{},"\u002Froot：",[21,124853,124854],{},"系统管理员的用户主目录",[21,124856,124857,26803],{},[645,124858,124859],{},"\u002Fhome",[21,124861,124862],{},"用户的主目录，以用户的账号命名的",[21,124864,124865,26803],{},[645,124866,124867],{},"\u002Fusr",[21,124869,124870],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[21,124872,124873],{},[645,124874,124875],{},"\u002Fusr\u002Fbin：",[21,124877,124878],{},"系统用户使用的应用程序与指令",[21,124880,124881],{},[645,124882,124883],{},"\u002Fusr\u002Fsbin：",[21,124885,124886],{},"超级用户使用的比较高级的管理程序和系统守护程序",[21,124888,124889],{},[645,124890,124891],{},"\u002Fusr\u002Fsrc：",[21,124893,124894],{},"内核源代码默认的放置目录",[22332,124896,124898],{"id":124897},"_7626-运行过程要用","7.6.2.6 运行过程要用",[21,124900,124901],{},[645,124902,124903],{},"\u002Fvar：",[21,124905,124906],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[21,124908,124909],{},[645,124910,124911],{},"\u002Fproc:",[21,124913,124914,124915,124918],{},"管理 ",[645,124916,124917],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22332,124920,124922],{"id":124921},"_7627-扩展用的","7.6.2.7 扩展用的",[21,124924,124925],{},[645,124926,124927],{},"\u002Fopt:",[21,124929,124930],{},"默认是空的，我们安装额外软件可以放在这个里面",[21,124932,124933],{},[645,124934,124935],{},"\u002Fsrv:",[21,124937,124938],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[465,124940,124942],{"id":124941},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[21,124944,124945],{},[1823,124946],{"alt":30,"src":124947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[21,124949,124950],{},"windows-->linux:",[21,124952,124953],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[21,124955,124956],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[21,124958,124959],{},"linux传输文件到windows",[21,124961,124962],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[465,124964,124966],{"id":124965},"_764-易忘知识","7.6.4 易忘知识",[21,124968,124969],{},"操作系统内核查看",[25,124971,124972],{"className":27,"code":121606,"language":29,"meta":30,"style":30},[32,124973,124974],{"__ignoreMap":30},[35,124975,124976,124978],{"class":37,"line":38},[35,124977,191],{"class":48},[35,124979,121615],{"class":58},[21,124981,124982],{},[1823,124983],{"alt":30,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[21,124986,124987],{},[1823,124988],{"alt":30,"src":124989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[25,124991,124993],{"className":27,"code":124992,"language":29,"meta":30,"style":30},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[32,124994,124995,125007],{"__ignoreMap":30},[35,124996,124997,124999,125002,125005],{"class":37,"line":38},[35,124998,104],{"class":48},[35,125000,125001],{"class":306}," mvtest",[35,125003,125004],{"class":306}," mvtest2",[35,125006,3008],{"class":359},[35,125008,125009],{"class":37,"line":45},[35,125010,125011],{"class":48},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[21,125013,125014],{},[1823,125015],{"alt":30,"src":125016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[21,125018,125019],{},[1823,125020],{"alt":30,"src":125021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[21,125023,125024,125025,125028],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[32,125026,125027],{},"du -a"," 可以快速查看磁盘使用细节。",[465,125030,125032],{"id":125031},"_765-vim","7.6.5 Vim",[21,125034,125035],{},[1823,125036],{"alt":30,"src":125037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[21,125039,125040],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[21,125042,125043],{},"一开始进去为命令模式，此时点击输入的字母为命令",[21,125045,125046],{},[645,125047,125048],{},"1.命令模式：",[21,125050,125051],{},"i 切换到输入模式，在光标当前位置开始输入文本",[21,125053,125054],{},"x 删除当前光标所在处的字符",[21,125056,125057],{},"：切换到底线命令模式，以在最底一行输入命令",[21,125059,125060],{},"a 进行插入模式，在光标下一个位置输入文本",[21,125062,125063],{},"o 在当前的下方插入一个新行，并进入插入模式",[21,125065,125066],{},"0 在当前行的上方插入一个新行，并进入插入模式",[21,125068,125069],{},"dd 剪切当前行",[21,125071,125072],{},"yy 复制当前行",[21,125074,125075],{},"p 粘贴剪贴板内容到光标下方",[21,125077,125078],{},"P 粘贴剪贴板内容到光标上方",[21,125080,125081],{},"u 撤销上一次操作",[21,125083,125084],{},"ctrl+r 重做上一次操作",[21,125086,125087,125089],{},[1289,125088],{}," 保存文件",[21,125091,125092,125094],{},[1139,125093],{}," 退出Vim编辑器",[21,125096,125097,125099],{},[1139,125098],{},"! 强制退出Vim编辑器，不保存修改",[21,125101,125102],{},[645,125103,125104],{},"2.输入模式：",[21,125106,125107],{},[1823,125108],{"alt":30,"src":125109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[21,125111,125112],{},[645,125113,125114],{},"3.底线命令模式：",[21,125116,125117],{},[1823,125118],{"alt":30,"src":125119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[21,125121,125122],{},"按下esc可以退出底线命令模式",[465,125124,125126],{"id":125125},"_766-apt","7.6.6 apt",[21,125128,125129],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[465,125131,125133],{"id":125132},"_767-home与root的区别","7.6.7 home与root的区别",[21,125135,125136],{},[1823,125137],{"alt":30,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[21,125140,125141],{},[1823,125142],{"alt":30,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[21,125145,125146],{},[1823,125147],{"alt":30,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[21,125150,125151],{},[1823,125152],{"alt":30,"src":125153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[465,125155,125157],{"id":125156},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[21,125159,125160],{},[734,125161,125162],{"href":125162,"rel":125163},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24198],[14,125165,125166,125169],{},[17,125167,125168],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[17,125170,125171],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[21,125173,125174],{},[1823,125175],{"alt":30,"src":125176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[21,125178,125179],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[21,125181,125182],{},[1823,125183],{"alt":30,"src":125184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[25,125186,125188],{"className":121132,"code":125187,"language":121134,"meta":121135,"style":30},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[32,125189,125190,125195],{"__ignoreMap":30},[35,125191,125192],{"class":37,"line":38},[35,125193,125194],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[35,125196,125197],{"class":37,"line":45},[35,125198,125199],{},".\u002Fpycharm.sh\n",[21,125201,125202],{},"3️⃣创建.desktop文件",[21,125204,125205],{},[645,125206,125207],{},"原理：",[1501,125209,125210,125220],{},[17,125211,125212,125213,125219],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[645,125214,125215,125218],{},[32,125216,125217],{},".desktop"," 文件"," 来识别应用。",[17,125221,125222,125224,125225],{},[32,125223,125217],{}," 文件相当于一个“应用注册表”，告诉系统：",[1501,125226,125227,125230,125233,125236,125239],{},[17,125228,125229],{},"应用名字（Name）",[17,125231,125232],{},"图标（Icon）",[17,125234,125235],{},"执行命令（Exec）",[17,125237,125238],{},"分类（Categories）",[17,125240,125241],{},"是否需要终端（Terminal）",[25,125243,125245],{"className":121132,"code":125244,"language":121134,"meta":121135,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[32,125246,125247,125252],{"__ignoreMap":30},[35,125248,125249],{"class":37,"line":38},[35,125250,125251],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[35,125253,125254],{"class":37,"line":45},[35,125255,125256],{},"nano pycharm.desktop\n",[21,125258,125259],{},"nano是一个命令行下的编辑器，也可以使用vim",[25,125261,125263],{"className":121132,"code":125262,"language":121134,"meta":121135,"style":30},"[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",[32,125264,125265,125270,125275,125280,125285,125290,125295,125300,125305,125310],{"__ignoreMap":30},[35,125266,125267],{"class":37,"line":38},[35,125268,125269],{},"[Desktop Entry]\n",[35,125271,125272],{"class":37,"line":45},[35,125273,125274],{},"Version=1.0\n",[35,125276,125277],{"class":37,"line":55},[35,125278,125279],{},"Type=Application\n",[35,125281,125282],{"class":37,"line":65},[35,125283,125284],{},"Name=PyCharm\n",[35,125286,125287],{"class":37,"line":74},[35,125288,125289],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[35,125291,125292],{"class":37,"line":83},[35,125293,125294],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[35,125296,125297],{"class":37,"line":92},[35,125298,125299],{},"Comment=JetBrains PyCharm IDE\n",[35,125301,125302],{"class":37,"line":101},[35,125303,125304],{},"Categories=Development;IDE;\n",[35,125306,125307],{"class":37,"line":110},[35,125308,125309],{},"Terminal=false\n",[35,125311,125312],{"class":37,"line":119},[35,125313,125314],{},"StartupWMClass=jetbrains-pycharm\n",[1501,125316,125317,125323,125329,125335],{},[17,125318,125319,125322],{},[32,125320,125321],{},"Exec"," → 点击图标时执行的命令",[17,125324,125325,125328],{},[32,125326,125327],{},"Icon"," → 显示在菜单和桌面上的图标",[17,125330,125331,125334],{},[32,125332,125333],{},"Terminal=false"," → 不打开终端",[17,125336,125337,125340],{},[32,125338,125339],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125342,125343,125344],"blockquote",{},[21,125345,125346,125347,125349,125350],{},"可以理解成 ",[32,125348,125217],{}," 文件是 Linux 的 ",[645,125351,125352],{},"快捷方式配置文件",[21,125354,125355],{},"4️⃣设置可执行权限",[25,125357,125359],{"className":121132,"code":125358,"language":121134,"meta":121135,"style":30},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[32,125360,125361],{"__ignoreMap":30},[35,125362,125363],{"class":37,"line":38},[35,125364,125358],{},[21,125366,125367],{},"5️⃣桌面图标启动的话如下：",[25,125369,125371],{"className":121132,"code":125370,"language":121134,"meta":121135,"style":30},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[32,125372,125373,125378],{"__ignoreMap":30},[35,125374,125375],{"class":37,"line":38},[35,125376,125377],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[35,125379,125380],{"class":37,"line":45},[35,125381,125382],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[14,125384,125385],{"start":55},[17,125386,125387],{},"下载Appimage文件实现软件的安装",[21,125389,125390],{},"1️⃣先下载appimage",[21,125392,125393],{},[734,125394,125395],{"href":125395,"rel":125396},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24198],[21,125398,125399],{},[1823,125400],{"alt":30,"src":125401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[21,125403,125404],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[21,125406,125407],{},[1823,125408],{"alt":30,"src":125409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[21,125411,125412],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[21,125414,125415],{},[1823,125416],{"alt":30,"src":125417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[21,125419,125420],{},[1823,125421],{"alt":30,"src":125422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[21,125424,125425,125426,125429],{},"3️⃣给他们放在",[32,125427,125428],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[21,125431,125432],{},"4️⃣给软件执行权限",[25,125434,125436],{"className":121132,"code":125435,"language":121134,"meta":121135,"style":30},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[32,125437,125438,125443],{"__ignoreMap":30},[35,125439,125440],{"class":37,"line":38},[35,125441,125442],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[35,125444,125445],{"class":37,"line":45},[35,125446,125447],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[21,125449,125450],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[25,125452,125454],{"className":27,"code":125453,"language":29,"meta":30,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[32,125455,125456,125463,125470,125476],{"__ignoreMap":30},[35,125457,125458,125460],{"class":37,"line":38},[35,125459,59],{"class":58},[35,125461,125462],{"class":306}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[35,125464,125465,125467],{"class":37,"line":45},[35,125466,113],{"class":48},[35,125468,125469],{"class":306}," .\u002Fqqmusic.desktop\n",[35,125471,125472,125474],{"class":37,"line":55},[35,125473,124518],{"class":48},[35,125475,125469],{"class":306},[35,125477,125478,125480,125482,125484],{"class":37,"line":65},[35,125479,171],{"class":48},[35,125481,24912],{"class":306},[35,125483,123384],{"class":306},[35,125485,125469],{"class":306},[21,125487,125488,125490],{},[32,125489,113],{},"：一个 Linux 命令，主要功能是：",[1501,125492,125493,125496],{},[17,125494,125495],{},"如果文件不存在，就创建一个新的空文件",[17,125497,125498],{},"如果文件已存在，就更新该文件的最后修改时间",[25,125500,125502],{"className":121132,"code":125501,"language":121134,"meta":121135,"style":30},"[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",[32,125503,125504,125508,125513,125518,125523,125527,125532],{"__ignoreMap":30},[35,125505,125506],{"class":37,"line":38},[35,125507,125269],{},[35,125509,125510],{"class":37,"line":45},[35,125511,125512],{},"Name=QQ音乐\n",[35,125514,125515],{"class":37,"line":55},[35,125516,125517],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[35,125519,125520],{"class":37,"line":65},[35,125521,125522],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[35,125524,125525],{"class":37,"line":74},[35,125526,125279],{},[35,125528,125529],{"class":37,"line":83},[35,125530,125531],{},"Categories=Audio;Music;Player;\n",[35,125533,125534],{"class":37,"line":92},[35,125535,125536],{},"Comment=QQ Music Client for Linux\n",[21,125538,125539],{},"将文件复制进去",[21,125541,125542],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[21,125544,125545],{},[1823,125546],{"alt":30,"src":125547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[21,125549,125550],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[21,125552,125553],{},[1823,125554],{"alt":30,"src":125555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[21,125557,125558,125559,125562,125563,125566],{},"如果你用的不是KDE，那么也可以直接修改",[32,125560,125561],{},"qqmuic.desktop","：在exec的末尾加上",[32,125564,125565],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[25,125568,125570],{"className":121132,"code":125569,"language":121134,"meta":121135,"style":30},"[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",[32,125571,125572,125576,125580,125585,125589,125593,125597],{"__ignoreMap":30},[35,125573,125574],{"class":37,"line":38},[35,125575,125269],{},[35,125577,125578],{"class":37,"line":45},[35,125579,125512],{},[35,125581,125582],{"class":37,"line":55},[35,125583,125584],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[35,125586,125587],{"class":37,"line":65},[35,125588,125522],{},[35,125590,125591],{"class":37,"line":74},[35,125592,125279],{},[35,125594,125595],{"class":37,"line":83},[35,125596,125531],{},[35,125598,125599],{"class":37,"line":92},[35,125600,125536],{},[21,125602,125603],{},[1823,125604],{"alt":30,"src":125605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[21,125607,125608],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[25,125610,125612],{"className":121132,"code":125611,"language":121134,"meta":121135,"style":30},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[32,125613,125614],{"__ignoreMap":30},[35,125615,125616],{"class":37,"line":38},[35,125617,125611],{},[14,125619,125620],{"start":65},[17,125621,125622],{},"去Flathub上安装软件",[21,125624,125625],{},[734,125626,125627],{"href":125627,"rel":125628},"https:\u002F\u002Fflathub.org\u002F",[24198],[21,125630,125631],{},"1️⃣去上面的官网搜索软件+下载软件",[21,125633,125634],{},[1823,125635],{"alt":30,"src":125636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[25,125638,125640],{"className":121132,"code":125639,"language":121134,"meta":121135,"style":30},"flatpak install flathub com.obsproject.Studio\n",[32,125641,125642],{"__ignoreMap":30},[35,125643,125644],{"class":37,"line":38},[35,125645,125639],{},[21,125647,125648],{},[1823,125649],{"alt":30,"src":125650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[21,125652,125653],{},"2️⃣运行软件",[21,125655,125656],{},"a.官方方式：",[21,125658,125659],{},[1823,125660],{"alt":30,"src":125661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[25,125663,125664],{"className":121132,"code":125639,"language":121134,"meta":121135,"style":30},[32,125665,125666],{"__ignoreMap":30},[35,125667,125668],{"class":37,"line":38},[35,125669,125639],{},[21,125671,125672],{},"b.当普通软件运行：",[21,125674,125675],{},[1823,125676],{"alt":30,"src":125677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[21,125679,125680],{},[1823,125681],{"alt":30,"src":125682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[416,125684,125685],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":45,"depth":45,"links":125687},[125688,125689,125694,125695,125701,125702],{"id":122420,"depth":45,"text":122421},{"id":122762,"depth":45,"text":122763,"children":125690},[125691,125692,125693],{"id":122766,"depth":55,"text":122767},{"id":122833,"depth":55,"text":122834},{"id":123094,"depth":55,"text":123095},{"id":123247,"depth":45,"text":123248},{"id":123485,"depth":45,"text":123486,"children":125696},[125697,125698,125699,125700],{"id":123537,"depth":55,"text":123538},{"id":123823,"depth":55,"text":123824},{"id":124094,"depth":55,"text":124095},{"id":124353,"depth":55,"text":124354},{"id":124412,"depth":45,"text":124413},{"id":124713,"depth":45,"text":124714,"children":125703},[125704,125705,125706,125707,125708,125709,125710,125711],{"id":124717,"depth":55,"text":124718},{"id":124729,"depth":55,"text":124730},{"id":124941,"depth":55,"text":124942},{"id":124965,"depth":55,"text":124966},{"id":125031,"depth":55,"text":125032},{"id":125125,"depth":55,"text":125126},{"id":125132,"depth":55,"text":125133},{"id":125156,"depth":55,"text":125157},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122412,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125718,"title":125719,"body":125720,"description":421,"extension":422,"meta":125724,"navigation":140,"path":125725,"seo":125726,"stem":125727,"__hash__":125728},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125721,"toc":125722},[],{"title":30,"searchDepth":45,"depth":45,"links":125723},[],{"category":30589},"\u002Fwiki\u002F2025-01-27-linux",{"title":125719,"description":421},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125730,"title":125731,"body":125732,"description":125736,"extension":422,"meta":126127,"navigation":140,"path":126128,"seo":126129,"stem":126130,"__hash__":126131},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125733,"toc":126125},[125734,125737,125741,125758,125761,125814,125818,125820,125860,125869,125873,125876,126117,126122],[21,125735,125736],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125738,125740],{"id":125739},"_1ubuntu环境配置","1.Ubuntu环境配置",[14,125742,125743,125746,125749,125752,125755],{},[17,125744,125745],{},"ubuntu环境换源",[17,125747,125748],{},"安装cuda",[17,125750,125751],{},"安装miniconda",[17,125753,125754],{},"安装pytorch",[17,125756,125757],{},"安装genesis",[21,125759,125760],{},"参考链接：",[25,125762,125764],{"className":24156,"code":125763,"language":24158,"meta":30,"style":30},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[32,125765,125766],{"__ignoreMap":30},[35,125767,125768,125771,125774,125777,125779,125782,125785,125787,125790,125793,125795,125798,125801,125803,125806,125809,125811],{"class":37,"line":38},[35,125769,125770],{"class":48},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[35,125772,125773],{"class":306},"=blogdetail",[35,125775,125776],{"class":359},"&sharetype",[35,125778,544],{"class":495},[35,125780,125781],{"class":306},"blogdetail",[35,125783,125784],{"class":359},"&sharerId",[35,125786,544],{"class":495},[35,125788,125789],{"class":306},"144728092",[35,125791,125792],{"class":359},"&sharerefer",[35,125794,544],{"class":495},[35,125796,125797],{"class":306},"PC",[35,125799,125800],{"class":359},"&sharesource",[35,125802,544],{"class":495},[35,125804,125805],{"class":306},"qq_69379513",[35,125807,125808],{"class":359},"&sharefrom",[35,125810,544],{"class":495},[35,125812,125813],{"class":306},"from_link\n",[10,125815,125817],{"id":125816},"_2genesis-报错issue","2.Genesis 报错issue",[21,125819,125760],{},[25,125821,125822],{"className":24156,"code":125763,"language":24158,"meta":30,"style":30},[32,125823,125824],{"__ignoreMap":30},[35,125825,125826,125828,125830,125832,125834,125836,125838,125840,125842,125844,125846,125848,125850,125852,125854,125856,125858],{"class":37,"line":38},[35,125827,125770],{"class":48},[35,125829,125773],{"class":306},[35,125831,125776],{"class":359},[35,125833,544],{"class":495},[35,125835,125781],{"class":306},[35,125837,125784],{"class":359},[35,125839,544],{"class":495},[35,125841,125789],{"class":306},[35,125843,125792],{"class":359},[35,125845,544],{"class":495},[35,125847,125797],{"class":306},[35,125849,125800],{"class":359},[35,125851,544],{"class":495},[35,125853,125805],{"class":306},[35,125855,125808],{"class":359},[35,125857,544],{"class":495},[35,125859,125813],{"class":306},[25,125861,125863],{"className":24156,"code":125862,"language":24158,"meta":30,"style":30},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[32,125864,125865],{"__ignoreMap":30},[35,125866,125867],{"class":37,"line":38},[35,125868,125862],{"class":48},[10,125870,125872],{"id":125871},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[21,125874,125875],{},"hello_robot.py",[25,125877,125879],{"className":30704,"code":125878,"language":30706,"meta":30,"style":30},"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",[32,125880,125881,125887,125902,125906,125918,125930,125934,125947,125951,125970,125980,125990,126004,126008,126012,126017,126021,126031,126038,126052,126059,126069,126074,126078,126096,126101,126105,126112],{"__ignoreMap":30},[35,125882,125883,125885],{"class":37,"line":38},[35,125884,30718],{"class":495},[35,125886,45631],{"class":359},[35,125888,125889,125892,125895,125897,125899],{"class":37,"line":45},[35,125890,125891],{"class":359},"os.environ[",[35,125893,125894],{"class":306},"'PYOPENGL_PLATFORM'",[35,125896,4777],{"class":359},[35,125898,544],{"class":495},[35,125900,125901],{"class":306}," 'glx'\n",[35,125903,125904],{"class":37,"line":55},[35,125905,141],{"emptyLinePlaceholder":140},[35,125907,125908,125910,125913,125915],{"class":37,"line":65},[35,125909,30718],{"class":495},[35,125911,125912],{"class":359}," genesis ",[35,125914,31709],{"class":495},[35,125916,125917],{"class":359}," gs\n",[35,125919,125920,125922,125925,125927],{"class":37,"line":74},[35,125921,31063],{"class":495},[35,125923,125924],{"class":359}," pynput ",[35,125926,30718],{"class":495},[35,125928,125929],{"class":359}," keyboard\n",[35,125931,125932],{"class":37,"line":83},[35,125933,141],{"emptyLinePlaceholder":140},[35,125935,125936,125939,125942,125944],{"class":37,"line":92},[35,125937,125938],{"class":359},"gs.init(",[35,125940,125941],{"class":5550},"backend",[35,125943,544],{"class":495},[35,125945,125946],{"class":359},"gs.gpu)\n",[35,125948,125949],{"class":37,"line":101},[35,125950,141],{"emptyLinePlaceholder":140},[35,125952,125953,125956,125958,125961,125964,125966,125968],{"class":37,"line":110},[35,125954,125955],{"class":359},"scene ",[35,125957,544],{"class":495},[35,125959,125960],{"class":359}," gs.Scene(",[35,125962,125963],{"class":5550},"show_viewer",[35,125965,544],{"class":495},[35,125967,31802],{"class":58},[35,125969,505],{"class":359},[35,125971,125972,125975,125977],{"class":37,"line":119},[35,125973,125974],{"class":359},"plane ",[35,125976,544],{"class":495},[35,125978,125979],{"class":359}," scene.add_entity(gs.morphs.Plane())\n",[35,125981,125982,125985,125987],{"class":37,"line":128},[35,125983,125984],{"class":359},"franka ",[35,125986,544],{"class":495},[35,125988,125989],{"class":359}," scene.add_entity(\n",[35,125991,125992,125995,125997,125999,126002],{"class":37,"line":137},[35,125993,125994],{"class":359},"    gs.morphs.MJCF(",[35,125996,45680],{"class":5550},[35,125998,544],{"class":495},[35,126000,126001],{"class":306},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[35,126003,38373],{"class":359},[35,126005,126006],{"class":37,"line":144},[35,126007,505],{"class":359},[35,126009,126010],{"class":37,"line":150},[35,126011,141],{"emptyLinePlaceholder":140},[35,126013,126014],{"class":37,"line":159},[35,126015,126016],{"class":359},"scene.build()\n",[35,126018,126019],{"class":37,"line":168},[35,126020,141],{"emptyLinePlaceholder":140},[35,126022,126023,126025,126028],{"class":37,"line":177},[35,126024,32273],{"class":495},[35,126026,126027],{"class":48}," on_press",[35,126029,126030],{"class":359},"(key):\n",[35,126032,126033,126036],{"class":37,"line":182},[35,126034,126035],{"class":495},"    try",[35,126037,4073],{"class":359},[35,126039,126040,126042,126045,126047,126050],{"class":37,"line":188},[35,126041,2837],{"class":495},[35,126043,126044],{"class":359}," key.char ",[35,126046,3283],{"class":495},[35,126048,126049],{"class":306}," 'q'",[35,126051,4073],{"class":359},[35,126053,126054,126056],{"class":37,"line":197},[35,126055,16066],{"class":495},[35,126057,126058],{"class":58}," False\n",[35,126060,126061,126064,126067],{"class":37,"line":206},[35,126062,126063],{"class":495},"    except",[35,126065,126066],{"class":58}," AttributeError",[35,126068,4073],{"class":359},[35,126070,126071],{"class":37,"line":215},[35,126072,126073],{"class":495},"        pass\n",[35,126075,126076],{"class":37,"line":224},[35,126077,141],{"emptyLinePlaceholder":140},[35,126079,126080,126083,126085,126088,126091,126093],{"class":37,"line":233},[35,126081,126082],{"class":359},"listener ",[35,126084,544],{"class":495},[35,126086,126087],{"class":359}," keyboard.Listener(",[35,126089,126090],{"class":5550},"on_press",[35,126092,544],{"class":495},[35,126094,126095],{"class":359},"on_press)\n",[35,126097,126098],{"class":37,"line":238},[35,126099,126100],{"class":359},"listener.start()\n",[35,126102,126103],{"class":37,"line":244},[35,126104,141],{"emptyLinePlaceholder":140},[35,126106,126107,126109],{"class":37,"line":253},[35,126108,108985],{"class":495},[35,126110,126111],{"class":359}," listener.running:\n",[35,126113,126114],{"class":37,"line":262},[35,126115,126116],{"class":359},"    scene.step()\n",[21,126118,126119],{},[1823,126120],{"alt":30,"src":126121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[416,126123,126124],{},"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":30,"searchDepth":45,"depth":45,"links":126126},[],{"category":23712},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125731,"description":125736},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126133,"title":126134,"body":126135,"description":421,"extension":422,"meta":126150,"navigation":140,"path":126151,"seo":126152,"stem":126153,"__hash__":126154},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126136,"toc":126147},[126137,126140,126144],[10,126138,126134],{"id":126139},"_1-基础知识",[438,126141,126143],{"id":126142},"_11-js的组成","1.1 js的组成",[21,126145,126146],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":30,"searchDepth":45,"depth":45,"links":126148},[126149],{"id":126142,"depth":45,"text":126143},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126134,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126156,"title":126157,"body":126158,"description":421,"extension":422,"meta":126297,"navigation":140,"path":126298,"seo":126299,"stem":126300,"__hash__":126301},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126159,"toc":126285},[126160,126163,126167,126170,126174,126184,126188,126191,126194,126197,126201,126208,126214,126218,126224,126235,126239,126242,126246,126249,126253,126256,126260,126263,126267,126270,126273,126276,126279,126282],[10,126161,126157],{"id":126162},"_2-vscode必备内容",[438,126164,126166],{"id":126165},"_21-标签分类","2.1 标签分类",[21,126168,126169],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[438,126171,126173],{"id":126172},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[21,126175,126176,126177,126179,126180,126183],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[32,126178,722],{}," 然后按 ",[32,126181,126182],{},"Tab","，快速自动生成基本结构。",[438,126185,126187],{"id":126186},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[21,126189,126190],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[21,126192,126193],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[21,126195,126196],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[438,126198,126200],{"id":126199},"_24-视图缩放","2.4 视图缩放",[21,126202,126203,126204,126207],{},"缩放视图 ",[32,126205,126206],{},"ctrl+"," 可实现代码增大。",[21,126209,126210,126213],{},[32,126211,126212],{},"ctrl-"," 可实现代码减小。",[438,126215,126217],{"id":126216},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[21,126219,126220,126221,28711],{},"VSCode 新建文件快捷键为 ",[32,126222,126223],{},"ctrl+N",[21,126225,126226,126227,126230,126231,126234],{},"保存快捷键为 ",[32,126228,126229],{},"ctrl+S","，将文本保存为 ",[32,126232,126233],{},".html"," 文件。",[438,126236,126238],{"id":126237},"_26-auto-rename-tag","2.6 Auto Rename Tag",[21,126240,126241],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[438,126243,126245],{"id":126244},"_27-vscode-icons","2.7 vscode-icons",[21,126247,126248],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[438,126250,126252],{"id":126251},"_28-easy-less","2.8 Easy LESS",[21,126254,126255],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[438,126257,126259],{"id":126258},"_29-会了吧插件","2.9 会了吧插件",[21,126261,126262],{},"会了吧插件可以展示代码中英语单词的意思。",[438,126264,126266],{"id":126265},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[21,126268,126269],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[21,126271,126272],{},"②选定多个相同的单词:ctrl+D",[21,126274,126275],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[21,126277,126278],{},"④全局替换某些单词:ctrl+h",[21,126280,126281],{},"⑤快速定位到某一行:ctrl+g",[21,126283,126284],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":30,"searchDepth":45,"depth":45,"links":126286},[126287,126288,126289,126290,126291,126292,126293,126294,126295,126296],{"id":126165,"depth":45,"text":126166},{"id":126172,"depth":45,"text":126173},{"id":126186,"depth":45,"text":126187},{"id":126199,"depth":45,"text":126200},{"id":126216,"depth":45,"text":126217},{"id":126237,"depth":45,"text":126238},{"id":126244,"depth":45,"text":126245},{"id":126251,"depth":45,"text":126252},{"id":126258,"depth":45,"text":126259},{"id":126265,"depth":45,"text":126266},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126157,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126303,"title":126304,"body":126305,"description":421,"extension":422,"meta":126464,"navigation":140,"path":126465,"seo":126466,"stem":126467,"__hash__":126468},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126306,"toc":126456},[126307,126310,126314,126324,126330,126336,126340,126349,126353,126358,126361,126364,126368,126371,126381,126390,126399,126408,126418,126425,126430,126435,126448],[10,126308,126304],{"id":126309},"_3-html文本与容器标签",[438,126311,126313],{"id":126312},"_31-标题标签","3.1 标题标签",[21,126315,126316,126319,126320,126323],{},[32,126317,126318],{},"\u003Ch1>","我是一级标签",[32,126321,126322],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[21,126325,126326,126319,126328],{},[32,126327,126318],{},[32,126329,126322],{},[21,126331,123586,126332,126335],{},[32,126333,126334],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[438,126337,126339],{"id":126338},"_32-段落标签","3.2 段落标签",[21,126341,126342,126345,126346],{},[32,126343,126344],{},"\u003Cp>","....",[32,126347,126348],{},"\u003C\u002Fp>",[438,126350,126352],{"id":126351},"_33-换行标签","3.3 换行标签",[21,126354,126355],{},[32,126356,126357],{},"\u003Cbr \u002F>",[21,126359,126360],{},"具有强制换行的作用",[21,126362,126363],{},"单标签",[438,126365,126367],{"id":126366},"_34-文本格式化标签","3.4 文本格式化标签",[21,126369,126370],{},"提供粗体、斜体和下划线等效果",[21,126372,126373,126374,82864,126377,126380],{},"加粗：",[32,126375,126376],{},"\u003Cstrong>...\u003C\u002Fstrong>",[32,126378,126379],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[21,126382,126383,126384,82864,126387,126380],{},"斜体：",[32,126385,126386],{},"\u003Cem>...\u003C\u002Fem>",[32,126388,126389],{},"\u003Ci>...\u003C\u002Fi>",[21,126391,126392,126393,82864,126396,126380],{},"删除线：",[32,126394,126395],{},"\u003Cdel>...\u003C\u002Fdel>",[32,126397,126398],{},"\u003Cs>...\u003C\u002Fs>",[21,126400,126401,126402,82864,126405,126380],{},"下划线：",[32,126403,126404],{},"\u003Cins>...\u003C\u002Fins>",[32,126406,126407],{},"\u003Cu>...\u003C\u002Fu>",[438,126409,126411,126412,18744,126415,103015],{"id":126410},"_35-div和span标签","3.5 ",[32,126413,126414],{},"\u003Cdiv>",[32,126416,126417],{},"\u003Cspan>",[21,126419,126420,101343,126422,126424],{},[32,126421,126414],{},[32,126423,126417],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[21,126426,126427],{},[32,126428,126429],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[21,126431,126432],{},[32,126433,126434],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[21,126436,126437,126438,126440,126441,126443,126444,126447],{},"两者特点：①",[32,126439,126414],{}," 标签用来布局，但一行通常只放一个 ",[32,126442,126414],{},"。可以理解为一个大盒子，独占一行，在 ",[32,126445,126446],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[21,126449,77574,126450,126452,126453,126455],{},[32,126451,126417],{}," 标签也可用于布局，一行可以放多个 ",[32,126454,126417],{},"，可理解为小盒子。",{"title":30,"searchDepth":45,"depth":45,"links":126457},[126458,126459,126460,126461,126462],{"id":126312,"depth":45,"text":126313},{"id":126338,"depth":45,"text":126339},{"id":126351,"depth":45,"text":126352},{"id":126366,"depth":45,"text":126367},{"id":126410,"depth":45,"text":126463},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126304,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126470,"title":126471,"body":126472,"description":421,"extension":422,"meta":126669,"navigation":140,"path":126670,"seo":126671,"stem":126672,"__hash__":126673},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126473,"toc":126661},[126474,126477,126481,126484,126490,126497,126503,126509,126512,126515,126518,126521,126524,126527,126530,126534,126537,126540,126543,126549,126555,126561,126568,126572,126578,126584,126587,126590,126596,126602,126608,126611,126614,126618,126621,126631,126637,126641,126650,126654,126657],[10,126475,126471],{"id":126476},"_4-html图像与链接",[438,126478,126480],{"id":126479},"_41-图像标签","4.1 图像标签",[21,126482,126483],{},"（1）标签",[21,126485,126486,126489],{},[32,126487,126488],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[21,126491,126492,126493,126496],{},"src是",[32,126494,126495],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[21,126498,126499,126500],{},"alt:文本，替换文本。图像不能显示的文字 ",[32,126501,126502],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[21,126504,126505,126506],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[32,126507,126508],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[21,126510,126511],{},"width:像素，设置图像的宽度",[21,126513,126514],{},"height:像素，设置图像的高度",[21,126516,126517],{},"border：像素，设置图像的边框粗细",[21,126519,126520],{},"（2）图像标签属性的注意点：",[21,126522,126523],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[21,126525,126526],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[21,126528,126529],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[438,126531,126533],{"id":126532},"_42-路径注意要点","4.2 路径注意要点：",[21,126535,126536],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[21,126538,126539],{},"（2）根目录：就是打开文件夹的第一层根目录",[21,126541,126542],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[21,126544,126545,126546],{},"①同一级路径：图像文件位于HTML文件同一级，如",[32,126547,126548],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[21,126550,126551,126552],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[32,126553,126554],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[21,126556,126557,126558],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[32,126559,126560],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[21,126562,126563,126564,747],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[734,126565,126566],{"href":126566,"rel":126567},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24198],[438,126569,126571],{"id":126570},"_43-超链接标签","4.3 超链接标签",[21,126573,126574,126577],{},[32,126575,126576],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[21,126579,126580,126581],{},"①语法格式：",[32,126582,126583],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[21,126585,126586],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[21,126588,126589],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[21,126591,126592,126593],{},"③链接分类：外部链接：",[32,126594,126595],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[21,126597,126598,126599],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[32,126600,126601],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[21,126603,126604,126605],{},"空链接：如果当时没有确定链接目标时，",[32,126606,126607],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[21,126609,126610],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[21,126612,126613],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[438,126615,126617],{"id":126616},"_44-锚点链接","4.4 锚点链接",[21,126619,126620],{},"点我们点击链接，可以快速定位到页面中的某个位置",[21,126622,126623,126624,126627,126628],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[32,126625,126626],{},"\u003Ca href=\"#two\">","第二级",[32,126629,126630],{},"\u003C\u002Fa>",[21,126632,126633,126634],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[32,126635,126636],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[438,126638,126640],{"id":126639},"_45-注释标签","4.5 注释标签",[21,126642,126643,126646,126647],{},[32,126644,126645],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[32,126648,126649],{},"ctrl+\u002F",[438,126651,126653],{"id":126652},"_46-特殊字符","4.6 特殊字符",[21,126655,126656],{},"可以实现添加多个空格",[1823,126658],{"style":126659,"src":126660},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":30,"searchDepth":45,"depth":45,"links":126662},[126663,126664,126665,126666,126667,126668],{"id":126479,"depth":45,"text":126480},{"id":126532,"depth":45,"text":126533},{"id":126570,"depth":45,"text":126571},{"id":126616,"depth":45,"text":126617},{"id":126639,"depth":45,"text":126640},{"id":126652,"depth":45,"text":126653},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126471,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126675,"title":126676,"body":126677,"description":421,"extension":422,"meta":126970,"navigation":140,"path":126971,"seo":126972,"stem":126973,"__hash__":126974},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126678,"toc":126961},[126679,126682,126686,126689,126692,126695,126698,126701,126704,126707,126710,126713,126733,126739,126743,126746,126749,126752,126755,126758,126761,126765,126768,126771,126774,126777,126790,126795,126798,126801,126816,126819,126822,126825,126828,126831,126835,126838,126845,126848,126851,126854,126857,126860,126866,126869,126872,126878,126881,126884,126887,126893,126896,126899,126913,126920,126923,126926,126933,126942,126945,126948,126951,126955,126958],[10,126680,126676],{"id":126681},"_5-html表格列表与表单",[438,126683,126685],{"id":126684},"_51-表格标签","5.1 表格标签",[21,126687,126688],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[21,126690,126691],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[21,126693,126694],{},"②表格基本语法：",[1823,126696],{"style":126659,"src":126697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[21,126699,126700],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1823,126702],{"style":126659,"src":126703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[21,126705,126706],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1823,126708],{"style":126659,"src":126709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[21,126711,126712],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[21,126714,126715,126718,126719,126721,126722,126725,126726,126728,126729,126732],{},[32,126716,126717],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[32,126720,126717],{},"内部必须拥有",[32,126723,126724],{},"\u003Ctr>","标签，一般位于第一行，",[32,126727,126717],{},"比",[32,126730,126731],{},"\u003Cth>","范围广",[21,126734,126735,126738],{},[32,126736,126737],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[438,126740,126742],{"id":126741},"_52-合并单元格","5.2 合并单元格",[21,126744,126745],{},"（1）合并单元格方式：",[21,126747,126748],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[21,126750,126751],{},"②跨列合并：colspan=\"合并单元格的个数\"",[21,126753,126754],{},"（2）目标单元格：",[21,126756,126757],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[21,126759,126760],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[438,126762,126764],{"id":126763},"_53-列表标签","5.3 列表标签",[21,126766,126767],{},"（1）分类：无序列表、有序列表、自定义列表",[21,126769,126770],{},"①无序列表：",[1823,126772],{"style":126659,"src":126773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[21,126775,126776],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[21,126778,126779,126782,126783,126786,126787,126789],{},[32,126780,126781],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[32,126784,126785],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[32,126788,126781],{},"中输入其他标签或文字是不对的",[21,126791,126792,126794],{},[32,126793,126785],{},"之间相当于一个容器，可以容纳所有元素",[21,126796,126797],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[21,126799,126800],{},"在css中去除前边的小圆点采用如下代码:",[25,126802,126806],{"className":126803,"code":126804,"language":126805,"meta":30,"style":30},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[32,126807,126808],{"__ignoreMap":30},[35,126809,126810,126813],{"class":37,"line":38},[35,126811,126812],{"class":51626},"list-style",[35,126814,126815],{"class":359},": none;\n",[21,126817,126818],{},"②有序列表：",[1823,126820],{"style":126659,"src":126821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[21,126823,126824],{},"③自定义列表：",[1823,126826],{"style":126659,"src":126827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1823,126829],{"style":126659,"src":126830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[438,126832,126834],{"id":126833},"_54-表单标签","5.4 表单标签",[21,126836,126837],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[21,126839,126840,126841,126844],{},"（1）表单域：包含单元素的区域，",[32,126842,126843],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1823,126846],{"style":126659,"src":126847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[21,126849,126850],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[21,126852,126853],{},"表单元素提交必须有name属性",[21,126855,126856],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[21,126858,126859],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[21,126861,77551,126862,126865],{},[32,126863,126864],{},"\u003Cinput>","输入表单元素",[1823,126867],{"style":126659,"src":126868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1823,126870],{"style":126659,"src":126871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[21,126873,126874,126875],{},"单选按钮：",[32,126876,126877],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1823,126879],{"style":126659,"src":126880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[21,126882,126883],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1823,126885],{"style":126659,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[21,126888,126889,126892],{},[645,126890,126891],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[21,126894,126895],{},"②select下拉表单元素：可以节约页面控件",[1823,126897],{"style":126659,"src":126898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[21,126900,126901,14129,126903,126906,126907,126909,126910,126912],{},[645,126902,528],{},[32,126904,126905],{},"\u003Cselect>","中至少包含一对",[32,126908,103036],{},"；在",[32,126911,103036],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[21,126914,126915,126916,126919],{},"③",[32,126917,126918],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1823,126921],{"style":126659,"src":126922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[21,126924,126925],{},"3行20列",[438,126927,126929,126930,103015],{"id":126928},"_55-lable标签","5.5 ",[32,126931,126932],{},"\u003Clable>",[21,126934,126935,126936,126938,126939,126941],{},"它不是表单标签，但常常与表单标签搭配使用，",[32,126937,126932],{},"标签用于绑定一个表单标签，当点击",[32,126940,126932],{},"标签内的文本",[21,126943,126944],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1823,126946],{"style":126659,"src":126947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1823,126949],{"style":126659,"src":126950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[438,126952,126954],{"id":126953},"_56-实例","5.6 实例",[1823,126956],{"style":126659,"src":126957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[416,126959,126960],{},"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":30,"searchDepth":45,"depth":45,"links":126962},[126963,126964,126965,126966,126967,126969],{"id":126684,"depth":45,"text":126685},{"id":126741,"depth":45,"text":126742},{"id":126763,"depth":45,"text":126764},{"id":126833,"depth":45,"text":126834},{"id":126928,"depth":45,"text":126968},"5.5 \u003Clable>标签",{"id":126953,"depth":45,"text":126954},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126676,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126976,"title":126977,"body":126978,"description":421,"extension":422,"meta":127527,"navigation":140,"path":127528,"seo":127529,"stem":127530,"__hash__":127531},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126979,"toc":127502},[126980,126983,126987,126990,126993,126997,127000,127003,127006,127009,127012,127015,127018,127022,127025,127029,127032,127035,127038,127042,127045,127048,127051,127057,127060,127063,127066,127069,127072,127075,127078,127111,127115,127118,127121,127124,127128,127131,127134,127137,127140,127143,127147,127150,127153,127156,127160,127163,127167,127170,127174,127177,127182,127186,127189,127193,127196,127199,127202,127205,127232,127235,127239,127242,127245,127250,127253,127256,127260,127263,127268,127271,127274,127277,127281,127284,127287,127290,127294,127297,127300,127303,127307,127311,127314,127354,127357,127361,127368,127371,127375,127378,127424,127428,127431,127434,127437,127465,127469,127472,127499],[10,126981,126977],{"id":126982},"_6-css语法与文本样式",[438,126984,126986],{"id":126985},"_61-css语法规范","6.1 css语法规范",[21,126988,126989],{},"由两部分组成，选择器及一条或多条声明",[1823,126991],{"style":126659,"src":126992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[21,126994,126995],{},[645,126996,528],{},[21,126998,126999],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[21,127001,127002],{},"②属性与属性值以“键值对”的形式出现",[21,127004,127005],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[21,127007,127008],{},"④属性和属性值之间用英文“;”分开",[1823,127010],{"style":126659,"src":127011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1823,127013],{"style":126659,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1823,127016],{"style":126659,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[438,127019,127021],{"id":127020},"_62-css选择器","6.2 css选择器",[21,127023,127024],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[465,127026,127028],{"id":127027},"_621-标签选择器","6.2.1 标签选择器",[21,127030,127031],{},"①优点：能快速为页面中同类型的标签统一设置样式",[21,127033,127034],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1823,127036],{"style":126659,"src":127037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[465,127039,127041],{"id":127040},"_622-类选择器","6.2.2 类选择器",[21,127043,127044],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[21,127046,127047],{},"②样例",[1823,127049],{"style":126659,"src":127050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[21,127052,127053,127054,127056],{},"③ ",[645,127055,126891],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[21,127058,127059],{},"可以理解为给这个标签起了个名字，来表示；",[21,127061,127062],{},"长名称或词组可以使用横线来为选择器命名；",[21,127064,127065],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[21,127067,127068],{},"命名要有意义；",[1823,127070],{"style":126659,"src":127071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[21,127073,127074],{},"类选择器也可以指定特殊的元素p.center{}",[21,127076,127077],{},"p.center和.center都对",[25,127079,127081],{"className":126803,"code":127080,"language":126805,"meta":30,"style":30},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[32,127082,127083,127088,127097,127107],{"__ignoreMap":30},[35,127084,127085],{"class":37,"line":38},[35,127086,127087],{"class":41},"\u002F* 类选择器指定特殊元素 *\u002F\n",[35,127089,127090,127092,127095],{"class":37,"line":45},[35,127091,21],{"class":51626},[35,127093,127094],{"class":48},".center",[35,127096,15906],{"class":359},[35,127098,127099,127101,127103,127105],{"class":37,"line":55},[35,127100,70851],{"class":58},[35,127102,51763],{"class":359},[35,127104,51918],{"class":58},[35,127106,1655],{"class":359},[35,127108,127109],{"class":37,"line":65},[35,127110,1926],{"class":359},[465,127112,127114],{"id":127113},"_623-多类名使用","6.2.3 多类名使用",[21,127116,127117],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1823,127119],{"style":126659,"src":127120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[21,127122,127123],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[465,127125,127127],{"id":127126},"_624-id选择器","6.2.4 id选择器",[21,127129,127130],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[21,127132,127133],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1823,127135],{"style":126659,"src":127136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[21,127138,127139],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[21,127141,127142],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[465,127144,127146],{"id":127145},"_625-通配符选择器","6.2.5 通配符选择器",[21,127148,127149],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[21,127151,127152],{},"* {",[21,127154,127155],{},"color=\"red\"}",[465,127157,127159],{"id":127158},"_626-总结","6.2.6 总结",[1823,127161],{"style":126659,"src":127162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[438,127164,127166],{"id":127165},"_63-css字体属性","6.3 css字体属性",[21,127168,127169],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[465,127171,127173],{"id":127172},"_631-字体系列","6.3.1 字体系列",[21,127175,127176],{},"font-family: '宋体';",[21,127178,127179,127181],{},[645,127180,528],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[465,127183,127185],{"id":127184},"_632-字体大小","6.3.2 字体大小",[21,127187,127188],{},"font-size: 20px",[21,127190,127191,26803],{},[645,127192,126891],{},[21,127194,127195],{},"①px（像素）大小是网页的最常用单位",[21,127197,127198],{},"②谷歌浏览器默认为16px",[21,127200,127201],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[21,127203,127204],{},"④可以给body指定整个页面的大小：会自动引用",[25,127206,127208],{"className":126803,"code":127207,"language":126805,"meta":30,"style":30},"body {\n  font-size: 16px;\n}\n",[32,127209,127210,127216,127228],{"__ignoreMap":30},[35,127211,127212,127214],{"class":37,"line":38},[35,127213,52126],{"class":51626},[35,127215,15906],{"class":359},[35,127217,127218,127220,127222,127224,127226],{"class":37,"line":45},[35,127219,70951],{"class":58},[35,127221,51763],{"class":359},[35,127223,1095],{"class":58},[35,127225,51818],{"class":495},[35,127227,1655],{"class":359},[35,127229,127230],{"class":37,"line":55},[35,127231,1926],{"class":359},[21,127233,127234],{},"⑤标题标签比较特殊，需要单独指定大小",[465,127236,127238],{"id":127237},"_633-字体粗细","6.3.3 字体粗细",[21,127240,127241],{},"font-weight: bold;",[21,127243,127244],{},"font-weight: 100；",[21,127246,127247,127249],{},[645,127248,528],{}," ①粗体文字变细：尽量别用normal，多用数字",[21,127251,127252],{},"font-weight= 400;",[21,127254,127255],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[465,127257,127259],{"id":127258},"_634-文字样式","6.3.4 文字样式",[21,127261,127262],{},"font-style: normal；",[21,127264,127265,26803],{},[645,127266,127267],{},"属性值",[21,127269,127270],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[21,127272,127273],{},"②italic：浏览器会显示斜体的字体样式",[1823,127275],{"style":126659,"src":127276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[465,127278,127280],{"id":127279},"_635-字体符合属性","6.3.5 字体符合属性",[1823,127282],{"style":126659,"src":127283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1823,127285],{"style":126659,"src":127286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[21,127288,127289],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[21,127291,127292,26803],{},[645,127293,126891],{},[21,127295,127296],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[21,127298,127299],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[21,127301,127302],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[438,127304,127306],{"id":127305},"_64-css-test文本属性","6.4 css test文本属性",[465,127308,127310],{"id":127309},"_641-文本颜色","6.4.1 文本颜色",[21,127312,127313],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[25,127315,127317],{"className":126803,"code":127316,"language":126805,"meta":30,"style":30},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[32,127318,127319,127324,127330,127340,127345,127350],{"__ignoreMap":30},[35,127320,127321],{"class":37,"line":38},[35,127322,127323],{"class":41},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[35,127325,127326,127328],{"class":37,"line":45},[35,127327,21],{"class":51626},[35,127329,15906],{"class":359},[35,127331,127332,127334,127336,127338],{"class":37,"line":55},[35,127333,71230],{"class":58},[35,127335,51763],{"class":359},[35,127337,57747],{"class":58},[35,127339,1655],{"class":359},[35,127341,127342],{"class":37,"line":65},[35,127343,127344],{"class":41},"  \u002F* color: #ff0000; *\u002F\n",[35,127346,127347],{"class":37,"line":74},[35,127348,127349],{"class":41},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[35,127351,127352],{"class":37,"line":83},[35,127353,1926],{"class":359},[1823,127355],{"style":126659,"src":127356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[465,127358,127360],{"id":127359},"_642-对齐文本","6.4.2 对齐文本",[21,127362,127363,127364,127367],{},"text-align属于用于设置元素内文本内容的 ",[645,127365,127366],{},"水平对齐"," 方式",[21,127369,127370],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[465,127372,127374],{"id":127373},"_643-装饰文本","6.4.3 装饰文本",[21,127376,127377],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[25,127379,127381],{"className":126803,"code":127380,"language":126805,"meta":30,"style":30},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[32,127382,127383,127389,127399,127403,127409,127420],{"__ignoreMap":30},[35,127384,127385,127387],{"class":37,"line":38},[35,127386,734],{"class":51626},[35,127388,15906],{"class":359},[35,127390,127391,127393,127395,127397],{"class":37,"line":45},[35,127392,70827],{"class":58},[35,127394,51763],{"class":359},[35,127396,55063],{"class":58},[35,127398,1655],{"class":359},[35,127400,127401],{"class":37,"line":55},[35,127402,1926],{"class":359},[35,127404,127405,127407],{"class":37,"line":65},[35,127406,21],{"class":51626},[35,127408,15906],{"class":359},[35,127410,127411,127413,127415,127418],{"class":37,"line":74},[35,127412,70827],{"class":58},[35,127414,51763],{"class":359},[35,127416,127417],{"class":58},"underline",[35,127419,1655],{"class":359},[35,127421,127422],{"class":37,"line":83},[35,127423,1926],{"class":359},[465,127425,127427],{"id":127426},"_644-文本缩进","6.4.4 文本缩进",[21,127429,127430],{},"实现文本的第一行首行缩进自己指定的距离",[21,127432,127433],{},"20px往右边走；-20px往左边走",[21,127435,127436],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[25,127438,127440],{"className":126803,"code":127439,"language":126805,"meta":30,"style":30},"p {\n  text-indent: 2em;\n}\n",[32,127441,127442,127448,127461],{"__ignoreMap":30},[35,127443,127444,127446],{"class":37,"line":38},[35,127445,21],{"class":51626},[35,127447,15906],{"class":359},[35,127449,127450,127453,127455,127457,127459],{"class":37,"line":45},[35,127451,127452],{"class":58},"  text-indent",[35,127454,51763],{"class":359},[35,127456,574],{"class":58},[35,127458,23887],{"class":495},[35,127460,1655],{"class":359},[35,127462,127463],{"class":37,"line":55},[35,127464,1926],{"class":359},[465,127466,127468],{"id":127467},"_645-行间距","6.4.5 行间距",[21,127470,127471],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[25,127473,127475],{"className":126803,"code":127474,"language":126805,"meta":30,"style":30},"p {\n  line-height: 1.6;\n}\n",[32,127476,127477,127483,127495],{"__ignoreMap":30},[35,127478,127479,127481],{"class":37,"line":38},[35,127480,21],{"class":51626},[35,127482,15906],{"class":359},[35,127484,127485,127488,127490,127493],{"class":37,"line":45},[35,127486,127487],{"class":58},"  line-height",[35,127489,51763],{"class":359},[35,127491,127492],{"class":58},"1.6",[35,127494,1655],{"class":359},[35,127496,127497],{"class":37,"line":55},[35,127498,1926],{"class":359},[416,127500,127501],{},"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":30,"searchDepth":45,"depth":45,"links":127503},[127504,127505,127513,127520],{"id":126985,"depth":45,"text":126986},{"id":127020,"depth":45,"text":127021,"children":127506},[127507,127508,127509,127510,127511,127512],{"id":127027,"depth":55,"text":127028},{"id":127040,"depth":55,"text":127041},{"id":127113,"depth":55,"text":127114},{"id":127126,"depth":55,"text":127127},{"id":127145,"depth":55,"text":127146},{"id":127158,"depth":55,"text":127159},{"id":127165,"depth":45,"text":127166,"children":127514},[127515,127516,127517,127518,127519],{"id":127172,"depth":55,"text":127173},{"id":127184,"depth":55,"text":127185},{"id":127237,"depth":55,"text":127238},{"id":127258,"depth":55,"text":127259},{"id":127279,"depth":55,"text":127280},{"id":127305,"depth":45,"text":127306,"children":127521},[127522,127523,127524,127525,127526],{"id":127309,"depth":55,"text":127310},{"id":127359,"depth":55,"text":127360},{"id":127373,"depth":55,"text":127374},{"id":127426,"depth":55,"text":127427},{"id":127467,"depth":55,"text":127468},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126977,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127533,"title":127534,"body":127535,"description":421,"extension":422,"meta":128184,"navigation":140,"path":128185,"seo":128186,"stem":128187,"__hash__":128188},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127536,"toc":128165},[127537,127540,127544,127548,127608,127612,127622,127625,127628,127632,127657,127661,127664,127667,127670,127673,127676,127680,127683,127686,127728,127731,127757,127763,127766,127770,127774,127780,127783,127786,127789,127792,127795,127798,127843,127847,127850,127853,127857,127861,127890,127893,127898,127901,127904,127907,127910,127914,127918,127921,127923,127926,127930,127933,127937,127940,127943,127946,127950,127954,127960,127970,127973,127976,127979,127982,127985,128108,128116,128124,128162],[10,127538,127534],{"id":127539},"_7-css引入方式与选择器进阶",[438,127541,127543],{"id":127542},"_71-css引入方式","7.1 css引入方式",[465,127545,127547],{"id":127546},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[25,127549,127553],{"className":127550,"code":127551,"language":127552,"meta":30,"style":30},"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",[32,127554,127555,127563,127570,127582,127595,127600],{"__ignoreMap":30},[35,127556,127557,127559,127561],{"class":37,"line":38},[35,127558,1404],{"class":359},[35,127560,416],{"class":51626},[35,127562,51633],{"class":359},[35,127564,127565,127568],{"class":37,"line":45},[35,127566,127567],{"class":51626},"  h1",[35,127569,15906],{"class":359},[35,127571,127572,127575,127577,127580],{"class":37,"line":55},[35,127573,127574],{"class":58},"    color",[35,127576,51763],{"class":359},[35,127578,127579],{"class":58},"blue",[35,127581,1655],{"class":359},[35,127583,127584,127587,127589,127591,127593],{"class":37,"line":65},[35,127585,127586],{"class":58},"    font-size",[35,127588,51763],{"class":359},[35,127590,1294],{"class":58},[35,127592,51818],{"class":495},[35,127594,1655],{"class":359},[35,127596,127597],{"class":37,"line":74},[35,127598,127599],{"class":359},"  }\n",[35,127601,127602,127604,127606],{"class":37,"line":83},[35,127603,52111],{"class":359},[35,127605,416],{"class":51626},[35,127607,51633],{"class":359},[21,127609,127610,26803],{},[645,127611,126891],{},[21,127613,77551,127614,127617,127618,127621],{},[32,127615,127616],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[32,127619,127620],{},"\u003Chead>","标签中",[21,127623,127624],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[21,127626,127627],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[465,127629,127631],{"id":127630},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[25,127633,127635],{"className":127550,"code":127634,"language":127552,"meta":30,"style":30},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[32,127636,127637],{"__ignoreMap":30},[35,127638,127639,127641,127643,127645,127647,127650,127653,127655],{"class":37,"line":38},[35,127640,1404],{"class":359},[35,127642,21],{"class":51626},[35,127644,62952],{"class":48},[35,127646,544],{"class":359},[35,127648,127649],{"class":306},"\"color: red; font-size: 16px;\"",[35,127651,127652],{"class":359},">这是一个段落\u003C\u002F",[35,127654,21],{"class":51626},[35,127656,51633],{"class":359},[21,127658,127659,26803],{},[645,127660,126891],{},[21,127662,127663],{},"①style其实就是标签的属性",[21,127665,127666],{},"②在双引号中间，写法要符合css规范",[21,127668,127669],{},"③可以控制当前的标签设置样式",[21,127671,127672],{},"④书写繁琐，简单时才用",[21,127674,127675],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[465,127677,127679],{"id":127678},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[21,127681,127682],{},"使用最多，单独建一个css文件，然后html引用",[21,127684,127685],{},"①css文件部分： style.css",[25,127687,127689],{"className":126803,"code":127688,"language":126805,"meta":30,"style":30},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[32,127690,127691,127696,127702,127712,127724],{"__ignoreMap":30},[35,127692,127693],{"class":37,"line":38},[35,127694,127695],{"class":41},"\u002F* style.css *\u002F\n",[35,127697,127698,127700],{"class":37,"line":45},[35,127699,10],{"class":51626},[35,127701,15906],{"class":359},[35,127703,127704,127706,127708,127710],{"class":37,"line":55},[35,127705,71230],{"class":58},[35,127707,51763],{"class":359},[35,127709,127579],{"class":58},[35,127711,1655],{"class":359},[35,127713,127714,127716,127718,127720,127722],{"class":37,"line":65},[35,127715,70951],{"class":58},[35,127717,51763],{"class":359},[35,127719,1294],{"class":58},[35,127721,51818],{"class":495},[35,127723,1655],{"class":359},[35,127725,127726],{"class":37,"line":74},[35,127727,1926],{"class":359},[21,127729,127730],{},"②html部分",[25,127732,127734],{"className":127550,"code":127733,"language":127552,"meta":30,"style":30},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[32,127735,127736],{"__ignoreMap":30},[35,127737,127738,127740,127742,127744,127746,127748,127750,127752,127755],{"class":37,"line":38},[35,127739,1404],{"class":359},[35,127741,69331],{"class":51626},[35,127743,69334],{"class":48},[35,127745,544],{"class":359},[35,127747,69339],{"class":306},[35,127749,61383],{"class":48},[35,127751,544],{"class":359},[35,127753,127754],{"class":306},"\"style.css\"",[35,127756,51633],{"class":359},[21,127758,127759,127762],{},[32,127760,127761],{},"\u003Chr>","水平线标签（但是不常用！）",[21,127764,127765],{},"ctrl+0回到页面原来大小",[438,127767,127769],{"id":127768},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[465,127771,127773],{"id":127772},"_721-快速生成html","7.2.1 快速生成html",[21,127775,127776,127777],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[32,127778,127779],{},"\u003Cdiv>``\u003C\u002Fdiv>",[21,127781,127782],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[21,127784,127785],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[21,127787,127788],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[21,127790,127791],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[21,127793,127794],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[21,127796,127797],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[25,127799,127801],{"className":127550,"code":127800,"language":127552,"meta":30,"style":30},"\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",[32,127802,127803,127808,127813,127818,127823,127828,127833,127838],{"__ignoreMap":30},[35,127804,127805],{"class":37,"line":38},[35,127806,127807],{"class":41},"\u003C!-- Emmet 语法示例 -->\n",[35,127809,127810],{"class":37,"line":45},[35,127811,127812],{"class":41},"\u003C!-- div*3        → 生成3个div -->\n",[35,127814,127815],{"class":37,"line":55},[35,127816,127817],{"class":41},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[35,127819,127820],{"class":37,"line":65},[35,127821,127822],{"class":41},"\u003C!-- div+p        → 兄弟div和p -->\n",[35,127824,127825],{"class":37,"line":74},[35,127826,127827],{"class":41},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[35,127829,127830],{"class":37,"line":83},[35,127831,127832],{"class":41},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[35,127834,127835],{"class":37,"line":92},[35,127836,127837],{"class":41},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[35,127839,127840],{"class":37,"line":101},[35,127841,127842],{"class":41},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[465,127844,127846],{"id":127845},"_722-快速生成css","7.2.2 快速生成css",[21,127848,127849],{},"简写开头",[21,127851,127852],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[438,127854,127856],{"id":127855},"_73-css复合选择器","7.3 css复合选择器",[465,127858,127860],{"id":127859},"_731-后代选择器","7.3.1 后代选择器",[25,127862,127864],{"className":126803,"code":127863,"language":126805,"meta":30,"style":30},".parent .child {\n  color: blue;\n}\n",[32,127865,127866,127876,127886],{"__ignoreMap":30},[35,127867,127868,127871,127874],{"class":37,"line":38},[35,127869,127870],{"class":48},".parent",[35,127872,127873],{"class":48}," .child",[35,127875,15906],{"class":359},[35,127877,127878,127880,127882,127884],{"class":37,"line":45},[35,127879,71230],{"class":58},[35,127881,51763],{"class":359},[35,127883,127579],{"class":58},[35,127885,1655],{"class":359},[35,127887,127888],{"class":37,"line":55},[35,127889,1926],{"class":359},[21,127891,127892],{},"元素1 元素2 {样式声明}",[21,127894,127895],{},[645,127896,127897],{},"注意点:",[21,127899,127900],{},"①元素1和元素2中间用空格隔开",[21,127902,127903],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[21,127905,127906],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[21,127908,127909],{},"④元素1和元素2可以是任意基础选择器",[465,127911,127913],{"id":127912},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[21,127915,127916],{},[645,127917,127897],{},[21,127919,127920],{},"①元素1和元素2中间用大于号隔开",[21,127922,127903],{},[21,127924,127925],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[465,127927,127929],{"id":127928},"_733-并集选择器","7.3.3 并集选择器",[21,127931,127932],{},"元素1，元素2 {样式声明}",[21,127934,127935],{},[645,127936,127897],{},[21,127938,127939],{},"①元素1和元素2中间用逗号隔开",[21,127941,127942],{},"②逗号可以理解为和的意思",[21,127944,127945],{},"③并集选择器通常用于集体声明",[465,127947,127949],{"id":127948},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[21,127951,127952],{},[645,127953,127897],{},[21,127955,127956,127957,127959],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69331,127958],{},"－:visited－:hover－:active。",[21,127961,127962,127963,127966,127967,26071],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127964,127965],"hover",{}," 、 ",[127968,127969],"first-child",{},[21,127971,127972],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[21,127974,127975],{},"link对没访问的进行设置",[21,127977,127978],{},"vistied对已访问的进行改变",[21,127980,127981],{},"hover鼠标经过就会变",[21,127983,127984],{},"active常按(点)就会变",[25,127986,127988],{"className":126803,"code":127987,"language":126805,"meta":30,"style":30},"\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",[32,127989,127990,127995,128004,128014,128024,128028,128037,128048,128052,128060,128070,128080,128084,128093,128104],{"__ignoreMap":30},[35,127991,127992],{"class":37,"line":38},[35,127993,127994],{"class":41},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[35,127996,127997,127999,128002],{"class":37,"line":45},[35,127998,734],{"class":51626},[35,128000,128001],{"class":48},":link",[35,128003,15906],{"class":359},[35,128005,128006,128008,128010,128012],{"class":37,"line":55},[35,128007,71230],{"class":58},[35,128009,51763],{"class":359},[35,128011,62695],{"class":58},[35,128013,1655],{"class":359},[35,128015,128016,128018,128020,128022],{"class":37,"line":65},[35,128017,70827],{"class":58},[35,128019,51763],{"class":359},[35,128021,55063],{"class":58},[35,128023,1655],{"class":359},[35,128025,128026],{"class":37,"line":74},[35,128027,1926],{"class":359},[35,128029,128030,128032,128035],{"class":37,"line":83},[35,128031,734],{"class":51626},[35,128033,128034],{"class":48},":visited",[35,128036,15906],{"class":359},[35,128038,128039,128041,128043,128046],{"class":37,"line":92},[35,128040,71230],{"class":58},[35,128042,51763],{"class":359},[35,128044,128045],{"class":58},"purple",[35,128047,1655],{"class":359},[35,128049,128050],{"class":37,"line":101},[35,128051,1926],{"class":359},[35,128053,128054,128056,128058],{"class":37,"line":110},[35,128055,734],{"class":51626},[35,128057,61266],{"class":48},[35,128059,15906],{"class":359},[35,128061,128062,128064,128066,128068],{"class":37,"line":119},[35,128063,71230],{"class":58},[35,128065,51763],{"class":359},[35,128067,55215],{"class":58},[35,128069,1655],{"class":359},[35,128071,128072,128074,128076,128078],{"class":37,"line":128},[35,128073,70827],{"class":58},[35,128075,51763],{"class":359},[35,128077,127417],{"class":58},[35,128079,1655],{"class":359},[35,128081,128082],{"class":37,"line":137},[35,128083,1926],{"class":359},[35,128085,128086,128088,128091],{"class":37,"line":144},[35,128087,734],{"class":51626},[35,128089,128090],{"class":48},":active",[35,128092,15906],{"class":359},[35,128094,128095,128097,128099,128102],{"class":37,"line":150},[35,128096,71230],{"class":58},[35,128098,51763],{"class":359},[35,128100,128101],{"class":58},"green",[35,128103,1655],{"class":359},[35,128105,128106],{"class":37,"line":159},[35,128107,1926],{"class":359},[465,128109,128111,128112,128115],{"id":128110},"_735-伪类选择器","7.3.5 ",[128113,128114],"focus",{},"伪类选择器",[21,128117,128118,128120,128121,128123],{},[128113,128119],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[32,128122,126864],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[25,128125,128127],{"className":126803,"code":128126,"language":126805,"meta":30,"style":30},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[32,128128,128129,128137,128148,128158],{"__ignoreMap":30},[35,128130,128131,128133,128135],{"class":37,"line":38},[35,128132,54147],{"class":51626},[35,128134,62226],{"class":48},[35,128136,15906],{"class":359},[35,128138,128139,128142,128144,128146],{"class":37,"line":45},[35,128140,128141],{"class":58},"  border-color",[35,128143,51763],{"class":359},[35,128145,55215],{"class":58},[35,128147,1655],{"class":359},[35,128149,128150,128152,128154,128156],{"class":37,"line":55},[35,128151,71123],{"class":58},[35,128153,51763],{"class":359},[35,128155,55063],{"class":58},[35,128157,1655],{"class":359},[35,128159,128160],{"class":37,"line":65},[35,128161,1926],{"class":359},[416,128163,128164],{},"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":30,"searchDepth":45,"depth":45,"links":128166},[128167,128172,128176],{"id":127542,"depth":45,"text":127543,"children":128168},[128169,128170,128171],{"id":127546,"depth":55,"text":127547},{"id":127630,"depth":55,"text":127631},{"id":127678,"depth":55,"text":127679},{"id":127768,"depth":45,"text":127769,"children":128173},[128174,128175],{"id":127772,"depth":55,"text":127773},{"id":127845,"depth":55,"text":127846},{"id":127855,"depth":45,"text":127856,"children":128177},[128178,128179,128180,128181,128182],{"id":127859,"depth":55,"text":127860},{"id":127912,"depth":55,"text":127913},{"id":127928,"depth":55,"text":127929},{"id":127948,"depth":55,"text":127949},{"id":128110,"depth":55,"text":128183},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127534,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128190,"title":128191,"body":128192,"description":421,"extension":422,"meta":130115,"navigation":140,"path":130116,"seo":130117,"stem":130118,"__hash__":130119},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128193,"toc":130089},[128194,128197,128201,128210,128214,128240,128245,128248,128251,128254,128257,128261,128264,128274,128282,128286,128321,128326,128329,128332,128335,128338,128342,128345,128354,128358,128371,128376,128379,128382,128385,128389,128392,128396,128399,128454,128457,128488,128491,128545,128549,128552,128718,128841,128844,128847,128850,128853,128857,128860,128864,128867,128870,128874,128877,128908,128935,128963,128966,128970,128996,129039,129043,129137,129140,129167,129170,129173,129176,129179,129182,129185,129188,129191,129194,129198,129255,129282,129286,129334,129338,129379,129381,129384,129387,129390,129393,129397,129489,129492,129495,129498,129502,129625,129826,129830,129834,129837,129840,129843,129847,129850,129853,129878,129881,129884,129887,129890,129893,129897,129905,129967,129970,130028,130031,130034,130037,130040,130043,130046,130049,130086],[10,128195,128191],{"id":128196},"_8-css显示模式与背景特性",[438,128198,128200],{"id":128199},"_81-css元素显示模式","8.1 css元素显示模式",[21,128202,128203,128204,128206,128207,128209],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[32,128205,126414],{},"自己占一行，比如一行可以放多个",[32,128208,126417],{},"，HTML 元素一般分为块元素和行内元素两种类型",[465,128211,128213],{"id":128212},"_811-块元素","8.1.1 块元素",[21,128215,128216,128217,128219,128220,708,128223,708,128225,708,128227,708,128230,708,128233,128236,128237,128239],{},"常见的块元素有",[32,128218,126318],{},"~",[32,128221,128222],{},"\u003Ch6>",[32,128224,126344],{},[32,128226,126414],{},[32,128228,128229],{},"\u003Cul>",[32,128231,128232],{},"\u003Col>",[32,128234,128235],{},"\u003Cli>","等，其中 ",[32,128238,126414],{}," 标签是最典型的块元素",[21,128241,128242],{},[645,128243,128244],{},"块级元素的特点：",[21,128246,128247],{},"① 比较霸道，自己独占一行。",[21,128249,128250],{},"② 高度，宽度、外边距以及内边距都可以控制。",[21,128252,128253],{},"③ 宽度默认是容器（父级宽度）的100%。",[21,128255,128256],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[21,128258,128259],{},[645,128260,528],{},[21,128262,128263],{},"①文字类的元素内不能使用块级元素",[21,128265,77574,128266,128268,128269,128271,128272],{},[32,128267,126344],{}," 标签主要用于存放文字，因此 ",[32,128270,126344],{}," 里面不能放块级元素，特别是不能放",[32,128273,126414],{},[21,128275,128276,128277,128219,128279,128281],{},"⑥同理， ",[32,128278,126318],{},[32,128280,128222],{},"等都是文字类块级标签，里面也不能放其他块级元素",[465,128283,128285],{"id":128284},"_812-行内元素","8.1.2 行内元素",[21,128287,128288,128289,708,128291,708,128294,708,128297,708,128300,708,128303,708,128306,708,128309,708,128312,708,128315,128317,128318,128320],{},"常见的行内元素有 ",[32,128290,126576],{},[32,128292,128293],{},"\u003Cstrong>",[32,128295,128296],{},"\u003Cb>",[32,128298,128299],{},"\u003Cem>",[32,128301,128302],{},"\u003Ci>",[32,128304,128305],{},"\u003Cdel>",[32,128307,128308],{},"\u003Cs>",[32,128310,128311],{},"\u003Cins>",[32,128313,128314],{},"\u003Cu>",[32,128316,126417],{}," 等，其中 ",[32,128319,126417],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[21,128322,128323],{},[645,128324,128325],{},"特点：",[21,128327,128328],{},"① 相邻行内元素在一行上，一行可以显示多个。",[21,128330,128331],{},"② 高、宽直接设置是无效的。",[21,128333,128334],{},"③ 默认宽度就是它本身内容的宽度。",[21,128336,128337],{},"④ 行内元素只能容纳文本或其他行内元素。",[21,128339,128340],{},[645,128341,528],{},[21,128343,128344],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[21,128346,128347,128348,128350,128351,128353],{},"②特殊情况链接 ",[32,128349,126576],{}," 里面可以放块级元素，但是给 ",[32,128352,126576],{}," 转换一下块级模式最安全",[465,128355,128357],{"id":128356},"_813-行内块元素","8.1.3 行内块元素",[21,128359,128360,128361,708,128364,708,128367,128370],{},"在行内元素中有几个特殊的标签 —— ",[32,128362,128363],{},"\u003Cimg \u002F>",[32,128365,128366],{},"\u003Cinput \u002F>",[32,128368,128369],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[21,128372,128373],{},[645,128374,128375],{},"行内块元素的特点：",[21,128377,128378],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[21,128380,128381],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[21,128383,128384],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[465,128386,128388],{"id":128387},"_814-总结","8.1.4 总结",[1823,128390],{"style":126659,"src":128391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[465,128393,128395],{"id":128394},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[21,128397,128398],{},"①转换为块元素：display:block;",[25,128400,128402],{"className":126803,"code":128401,"language":126805,"meta":30,"style":30},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[32,128403,128404,128409,128415,128426,128438,128450],{"__ignoreMap":30},[35,128405,128406],{"class":37,"line":38},[35,128407,128408],{"class":41},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[35,128410,128411,128413],{"class":37,"line":45},[35,128412,734],{"class":51626},[35,128414,15906],{"class":359},[35,128416,128417,128420,128422,128424],{"class":37,"line":55},[35,128418,128419],{"class":58},"  display",[35,128421,51763],{"class":359},[35,128423,61195],{"class":58},[35,128425,1655],{"class":359},[35,128427,128428,128430,128432,128434,128436],{"class":37,"line":65},[35,128429,70893],{"class":58},[35,128431,51763],{"class":359},[35,128433,807],{"class":58},[35,128435,51818],{"class":495},[35,128437,1655],{"class":359},[35,128439,128440,128442,128444,128446,128448],{"class":37,"line":74},[35,128441,71113],{"class":58},[35,128443,51763],{"class":359},[35,128445,895],{"class":58},[35,128447,51818],{"class":495},[35,128449,1655],{"class":359},[35,128451,128452],{"class":37,"line":83},[35,128453,1926],{"class":359},[21,128455,128456],{},"②转换为行内元素：display:inline;",[25,128458,128460],{"className":126803,"code":128459,"language":126805,"meta":30,"style":30},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[32,128461,128462,128467,128473,128484],{"__ignoreMap":30},[35,128463,128464],{"class":37,"line":38},[35,128465,128466],{"class":41},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[35,128468,128469,128471],{"class":37,"line":45},[35,128470,51937],{"class":51626},[35,128472,15906],{"class":359},[35,128474,128475,128477,128479,128482],{"class":37,"line":55},[35,128476,128419],{"class":58},[35,128478,51763],{"class":359},[35,128480,128481],{"class":58},"inline",[35,128483,1655],{"class":359},[35,128485,128486],{"class":37,"line":65},[35,128487,1926],{"class":359},[21,128489,128490],{},"③转换为行内块：display:inline-block;",[25,128492,128494],{"className":126803,"code":128493,"language":126805,"meta":30,"style":30},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[32,128495,128496,128501,128507,128517,128529,128541],{"__ignoreMap":30},[35,128497,128498],{"class":37,"line":38},[35,128499,128500],{"class":41},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[35,128502,128503,128505],{"class":37,"line":45},[35,128504,35],{"class":51626},[35,128506,15906],{"class":359},[35,128508,128509,128511,128513,128515],{"class":37,"line":55},[35,128510,128419],{"class":58},[35,128512,51763],{"class":359},[35,128514,72708],{"class":58},[35,128516,1655],{"class":359},[35,128518,128519,128521,128523,128525,128527],{"class":37,"line":65},[35,128520,70893],{"class":58},[35,128522,51763],{"class":359},[35,128524,1106],{"class":58},[35,128526,51818],{"class":495},[35,128528,1655],{"class":359},[35,128530,128531,128533,128535,128537,128539],{"class":37,"line":74},[35,128532,71113],{"class":58},[35,128534,51763],{"class":359},[35,128536,1445],{"class":58},[35,128538,51818],{"class":495},[35,128540,1655],{"class":359},[35,128542,128543],{"class":37,"line":83},[35,128544,1926],{"class":359},[465,128546,128548],{"id":128547},"_816-小米侧边栏","8.1.6 小米侧边栏",[1823,128550],{"style":126659,"src":128551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[25,128553,128555],{"className":127550,"code":128554,"language":127552,"meta":30,"style":30},"\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",[32,128556,128557,128562,128577,128596,128615,128634,128653,128672,128691,128710],{"__ignoreMap":30},[35,128558,128559],{"class":37,"line":38},[35,128560,128561],{"class":41},"\u003C!-- 小米侧边栏案例 -->\n",[35,128563,128564,128566,128568,128570,128572,128575],{"class":37,"line":45},[35,128565,1404],{"class":359},[35,128567,51937],{"class":51626},[35,128569,53812],{"class":48},[35,128571,544],{"class":359},[35,128573,128574],{"class":306},"\"sidebar\"",[35,128576,51633],{"class":359},[35,128578,128579,128581,128583,128585,128587,128589,128592,128594],{"class":37,"line":55},[35,128580,52470],{"class":359},[35,128582,734],{"class":51626},[35,128584,61383],{"class":48},[35,128586,544],{"class":359},[35,128588,61388],{"class":306},[35,128590,128591],{"class":359},">手机 电话卡\u003C\u002F",[35,128593,734],{"class":51626},[35,128595,51633],{"class":359},[35,128597,128598,128600,128602,128604,128606,128608,128611,128613],{"class":37,"line":65},[35,128599,52470],{"class":359},[35,128601,734],{"class":51626},[35,128603,61383],{"class":48},[35,128605,544],{"class":359},[35,128607,61388],{"class":306},[35,128609,128610],{"class":359},">电视 盒子\u003C\u002F",[35,128612,734],{"class":51626},[35,128614,51633],{"class":359},[35,128616,128617,128619,128621,128623,128625,128627,128630,128632],{"class":37,"line":74},[35,128618,52470],{"class":359},[35,128620,734],{"class":51626},[35,128622,61383],{"class":48},[35,128624,544],{"class":359},[35,128626,61388],{"class":306},[35,128628,128629],{"class":359},">笔记本 平板\u003C\u002F",[35,128631,734],{"class":51626},[35,128633,51633],{"class":359},[35,128635,128636,128638,128640,128642,128644,128646,128649,128651],{"class":37,"line":83},[35,128637,52470],{"class":359},[35,128639,734],{"class":51626},[35,128641,61383],{"class":48},[35,128643,544],{"class":359},[35,128645,61388],{"class":306},[35,128647,128648],{"class":359},">出行 穿戴\u003C\u002F",[35,128650,734],{"class":51626},[35,128652,51633],{"class":359},[35,128654,128655,128657,128659,128661,128663,128665,128668,128670],{"class":37,"line":92},[35,128656,52470],{"class":359},[35,128658,734],{"class":51626},[35,128660,61383],{"class":48},[35,128662,544],{"class":359},[35,128664,61388],{"class":306},[35,128666,128667],{"class":359},">智能 路由器\u003C\u002F",[35,128669,734],{"class":51626},[35,128671,51633],{"class":359},[35,128673,128674,128676,128678,128680,128682,128684,128687,128689],{"class":37,"line":101},[35,128675,52470],{"class":359},[35,128677,734],{"class":51626},[35,128679,61383],{"class":48},[35,128681,544],{"class":359},[35,128683,61388],{"class":306},[35,128685,128686],{"class":359},">健康 儿童\u003C\u002F",[35,128688,734],{"class":51626},[35,128690,51633],{"class":359},[35,128692,128693,128695,128697,128699,128701,128703,128706,128708],{"class":37,"line":110},[35,128694,52470],{"class":359},[35,128696,734],{"class":51626},[35,128698,61383],{"class":48},[35,128700,544],{"class":359},[35,128702,61388],{"class":306},[35,128704,128705],{"class":359},">耳机 音响\u003C\u002F",[35,128707,734],{"class":51626},[35,128709,51633],{"class":359},[35,128711,128712,128714,128716],{"class":37,"line":119},[35,128713,52111],{"class":359},[35,128715,51937],{"class":51626},[35,128717,51633],{"class":359},[25,128719,128721],{"className":126803,"code":128720,"language":126805,"meta":30,"style":30},".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",[32,128722,128723,128732,128742,128755,128767,128779,128791,128801,128812,128816,128826,128837],{"__ignoreMap":30},[35,128724,128725,128728,128730],{"class":37,"line":38},[35,128726,128727],{"class":48},".sidebar",[35,128729,1759],{"class":51626},[35,128731,15906],{"class":359},[35,128733,128734,128736,128738,128740],{"class":37,"line":45},[35,128735,128419],{"class":58},[35,128737,51763],{"class":359},[35,128739,61195],{"class":58},[35,128741,1655],{"class":359},[35,128743,128744,128746,128748,128751,128753],{"class":37,"line":55},[35,128745,70893],{"class":58},[35,128747,51763],{"class":359},[35,128749,128750],{"class":58},"234",[35,128752,51818],{"class":495},[35,128754,1655],{"class":359},[35,128756,128757,128759,128761,128763,128765],{"class":37,"line":65},[35,128758,71113],{"class":58},[35,128760,51763],{"class":359},[35,128762,946],{"class":58},[35,128764,51818],{"class":495},[35,128766,1655],{"class":359},[35,128768,128769,128771,128773,128775,128777],{"class":37,"line":74},[35,128770,127487],{"class":58},[35,128772,51763],{"class":359},[35,128774,946],{"class":58},[35,128776,51818],{"class":495},[35,128778,1655],{"class":359},[35,128780,128781,128783,128785,128787,128789],{"class":37,"line":83},[35,128782,71148],{"class":58},[35,128784,51763],{"class":359},[35,128786,1445],{"class":58},[35,128788,51818],{"class":495},[35,128790,1655],{"class":359},[35,128792,128793,128795,128797,128799],{"class":37,"line":92},[35,128794,71230],{"class":58},[35,128796,51763],{"class":359},[35,128798,61168],{"class":58},[35,128800,1655],{"class":359},[35,128802,128803,128805,128807,128810],{"class":37,"line":101},[35,128804,71203],{"class":58},[35,128806,51763],{"class":359},[35,128808,128809],{"class":58},"#55585a",[35,128811,1655],{"class":359},[35,128813,128814],{"class":37,"line":110},[35,128815,1926],{"class":359},[35,128817,128818,128820,128822,128824],{"class":37,"line":119},[35,128819,128727],{"class":48},[35,128821,1759],{"class":51626},[35,128823,61266],{"class":48},[35,128825,15906],{"class":359},[35,128827,128828,128830,128832,128835],{"class":37,"line":128},[35,128829,71203],{"class":58},[35,128831,51763],{"class":359},[35,128833,128834],{"class":58},"#ff6700",[35,128836,1655],{"class":359},[35,128838,128839],{"class":37,"line":137},[35,128840,1926],{"class":359},[1823,128842],{"style":126659,"src":128843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[21,128845,128846],{},"行高=盒子高度：实现文字的垂直居中",[21,128848,128849],{},"原理讲解：",[1823,128851],{"style":126659,"src":128852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[438,128854,128856],{"id":128855},"_82-css背景","8.2 css背景",[21,128858,128859],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[465,128861,128863],{"id":128862},"_821-背景颜色","8.2.1 背景颜色",[21,128865,128866],{},"background-color:颜色值;",[21,128868,128869],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[465,128871,128873],{"id":128872},"_822-背景图片","8.2.2 背景图片",[21,128875,128876],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[25,128878,128880],{"className":126803,"code":128879,"language":126805,"meta":30,"style":30},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[32,128881,128882,128888,128904],{"__ignoreMap":30},[35,128883,128884,128886],{"class":37,"line":38},[35,128885,51937],{"class":51626},[35,128887,15906],{"class":359},[35,128889,128890,128893,128895,128897,128899,128902],{"class":37,"line":45},[35,128891,128892],{"class":58},"  background-image",[35,128894,51763],{"class":359},[35,128896,62052],{"class":58},[35,128898,499],{"class":359},[35,128900,128901],{"class":5550},"images\u002Fbg.png",[35,128903,3053],{"class":359},[35,128905,128906],{"class":37,"line":55},[35,128907,1926],{"class":359},[633,128909,128910,128919],{},[636,128911,128912],{},[639,128913,128914,128917],{},[642,128915,128916],{"align":24070},"参数值",[642,128918,103018],{"align":24070},[680,128920,128921,128928],{},[639,128922,128923,128925],{},[685,128924,55063],{"align":24070},[685,128926,128927],{"align":24070},"无背景图（默认的）",[639,128929,128930,128932],{},[685,128931,62052],{"align":24070},[685,128933,128934],{"align":24070},"使用绝对或相对地址指定背景图像",[25,128936,128937],{"className":126803,"code":128879,"language":126805,"meta":30,"style":30},[32,128938,128939,128945,128959],{"__ignoreMap":30},[35,128940,128941,128943],{"class":37,"line":38},[35,128942,51937],{"class":51626},[35,128944,15906],{"class":359},[35,128946,128947,128949,128951,128953,128955,128957],{"class":37,"line":45},[35,128948,128892],{"class":58},[35,128950,51763],{"class":359},[35,128952,62052],{"class":58},[35,128954,499],{"class":359},[35,128956,128901],{"class":5550},[35,128958,3053],{"class":359},[35,128960,128961],{"class":37,"line":55},[35,128962,1926],{"class":359},[21,128964,128965],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[465,128967,128969],{"id":128968},"_823-背景平铺","8.2.3 背景平铺",[25,128971,128973],{"className":126803,"code":128972,"language":126805,"meta":30,"style":30},"div {\n  background-repeat: no-repeat;\n}\n",[32,128974,128975,128981,128992],{"__ignoreMap":30},[35,128976,128977,128979],{"class":37,"line":38},[35,128978,51937],{"class":51626},[35,128980,15906],{"class":359},[35,128982,128983,128986,128988,128990],{"class":37,"line":45},[35,128984,128985],{"class":58},"  background-repeat",[35,128987,51763],{"class":359},[35,128989,62062],{"class":58},[35,128991,1655],{"class":359},[35,128993,128994],{"class":37,"line":55},[35,128995,1926],{"class":359},[633,128997,128998,129006],{},[636,128999,129000],{},[639,129001,129002,129004],{},[642,129003,128916],{"align":24070},[642,129005,103018],{"align":24070},[680,129007,129008,129016,129023,129031],{},[639,129009,129010,129013],{},[685,129011,129012],{"align":24070},"repeat",[685,129014,129015],{"align":24070},"背景图像在纵向和横向上平铺（默认的）",[639,129017,129018,129020],{},[685,129019,62062],{"align":24070},[685,129021,129022],{"align":24070},"背景图像不平铺",[639,129024,129025,129028],{},[685,129026,129027],{"align":24070},"repeat-x",[685,129029,129030],{"align":24070},"背景图像在横向上平铺",[639,129032,129033,129036],{},[685,129034,129035],{"align":24070},"repeat-y",[685,129037,129038],{"align":24070},"背景图像在纵向平铺",[465,129040,129042],{"id":129041},"_824-背景图片位置","8.2.4 背景图片位置",[25,129044,129046],{"className":126803,"code":129045,"language":126805,"meta":30,"style":30},"\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",[32,129047,129048,129053,129059,129073,129077,129082,129088,129104,129108,129113,129119,129133],{"__ignoreMap":30},[35,129049,129050],{"class":37,"line":38},[35,129051,129052],{"class":41},"\u002F* 方位名词 *\u002F\n",[35,129054,129055,129057],{"class":37,"line":45},[35,129056,51937],{"class":51626},[35,129058,15906],{"class":359},[35,129060,129061,129064,129066,129068,129071],{"class":37,"line":55},[35,129062,129063],{"class":58},"  background-position",[35,129065,51763],{"class":359},[35,129067,51918],{"class":58},[35,129069,129070],{"class":58}," top",[35,129072,1655],{"class":359},[35,129074,129075],{"class":37,"line":65},[35,129076,1926],{"class":359},[35,129078,129079],{"class":37,"line":74},[35,129080,129081],{"class":41},"\u002F* 精确单位 *\u002F\n",[35,129083,129084,129086],{"class":37,"line":83},[35,129085,51937],{"class":51626},[35,129087,15906],{"class":359},[35,129089,129090,129092,129094,129096,129098,129100,129102],{"class":37,"line":92},[35,129091,129063],{"class":58},[35,129093,51763],{"class":359},[35,129095,1194],{"class":58},[35,129097,51818],{"class":495},[35,129099,57830],{"class":58},[35,129101,51818],{"class":495},[35,129103,1655],{"class":359},[35,129105,129106],{"class":37,"line":101},[35,129107,1926],{"class":359},[35,129109,129110],{"class":37,"line":110},[35,129111,129112],{"class":41},"\u002F* 混合单位 *\u002F\n",[35,129114,129115,129117],{"class":37,"line":119},[35,129116,51937],{"class":51626},[35,129118,15906],{"class":359},[35,129120,129121,129123,129125,129127,129129,129131],{"class":37,"line":128},[35,129122,129063],{"class":58},[35,129124,51763],{"class":359},[35,129126,1194],{"class":58},[35,129128,51818],{"class":495},[35,129130,17478],{"class":58},[35,129132,1655],{"class":359},[35,129134,129135],{"class":37,"line":137},[35,129136,1926],{"class":359},[21,129138,129139],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[633,129141,129142,129150],{},[636,129143,129144],{},[639,129145,129146,129148],{},[642,129147,128916],{"align":24070},[642,129149,26200],{"align":24070},[680,129151,129152,129159],{},[639,129153,129154,129156],{},[685,129155,52294],{"align":24070},[685,129157,129158],{"align":24070},"百分数|由浮点数和单位标识符组成的长度值",[639,129160,129161,129164],{},[685,129162,129163],{"align":24070},"position",[685,129165,129166],{"align":24070},"top|center|bottom|left|center|right 方位名词",[21,129168,129169],{},"其他说明：",[21,129171,129172],{},"①参数是方位名词",[21,129174,129175],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[21,129177,129178],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[21,129180,129181],{},"②参数是精确单位",[21,129183,129184],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[21,129186,129187],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[21,129189,129190],{},"③参数是混合单位",[21,129192,129193],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[465,129195,129197],{"id":129196},"_825-背景图片固定","8.2.5 背景图片固定",[25,129199,129201],{"className":126803,"code":129200,"language":126805,"meta":30,"style":30},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[32,129202,129203,129208,129214,129226,129230,129235,129241,129251],{"__ignoreMap":30},[35,129204,129205],{"class":37,"line":38},[35,129206,129207],{"class":41},"\u002F* 背景滚动（默认） *\u002F\n",[35,129209,129210,129212],{"class":37,"line":45},[35,129211,51937],{"class":51626},[35,129213,15906],{"class":359},[35,129215,129216,129219,129221,129224],{"class":37,"line":55},[35,129217,129218],{"class":58},"  background-attachment",[35,129220,51763],{"class":359},[35,129222,129223],{"class":58},"scroll",[35,129225,1655],{"class":359},[35,129227,129228],{"class":37,"line":65},[35,129229,1926],{"class":359},[35,129231,129232],{"class":37,"line":74},[35,129233,129234],{"class":41},"\u002F* 背景固定 *\u002F\n",[35,129236,129237,129239],{"class":37,"line":83},[35,129238,51937],{"class":51626},[35,129240,15906],{"class":359},[35,129242,129243,129245,129247,129249],{"class":37,"line":92},[35,129244,129218],{"class":58},[35,129246,51763],{"class":359},[35,129248,86558],{"class":58},[35,129250,1655],{"class":359},[35,129252,129253],{"class":37,"line":101},[35,129254,1926],{"class":359},[633,129256,129257,129266],{},[636,129258,129259],{},[639,129260,129261,129264],{},[642,129262,129263],{"align":24070},"参数",[642,129265,103018],{"align":24070},[680,129267,129268,129275],{},[639,129269,129270,129272],{},[685,129271,129223],{"align":24070},[685,129273,129274],{"align":24070},"背景图像是随对象内容滚动",[639,129276,129277,129279],{},[685,129278,86558],{"align":24070},[685,129280,129281],{"align":24070},"背景图像固定",[465,129283,129285],{"id":129284},"_826-背景样式合写","8.2.6 背景样式合写",[25,129287,129289],{"className":126803,"code":129288,"language":126805,"meta":30,"style":30},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[32,129290,129291,129296,129302,129330],{"__ignoreMap":30},[35,129292,129293],{"class":37,"line":38},[35,129294,129295],{"class":41},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[35,129297,129298,129300],{"class":37,"line":45},[35,129299,51937],{"class":51626},[35,129301,15906],{"class":359},[35,129303,129304,129306,129308,129310,129313,129315,129317,129319,129321,129324,129326,129328],{"class":37,"line":55},[35,129305,70936],{"class":58},[35,129307,51763],{"class":359},[35,129309,61168],{"class":58},[35,129311,129312],{"class":58}," url",[35,129314,499],{"class":359},[35,129316,128901],{"class":5550},[35,129318,14048],{"class":359},[35,129320,62062],{"class":58},[35,129322,129323],{"class":58}," fixed",[35,129325,17478],{"class":58},[35,129327,129070],{"class":58},[35,129329,1655],{"class":359},[35,129331,129332],{"class":37,"line":65},[35,129333,1926],{"class":359},[465,129335,129337],{"id":129336},"_827-背景色半透明","8.2.7 背景色半透明",[25,129339,129341],{"className":126803,"code":129340,"language":126805,"meta":30,"style":30},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[32,129342,129343,129349,129375],{"__ignoreMap":30},[35,129344,129345,129347],{"class":37,"line":38},[35,129346,51937],{"class":51626},[35,129348,15906],{"class":359},[35,129350,129351,129353,129355,129357,129359,129361,129363,129365,129367,129369,129371,129373],{"class":37,"line":45},[35,129352,70936],{"class":58},[35,129354,51763],{"class":359},[35,129356,55436],{"class":58},[35,129358,499],{"class":359},[35,129360,687],{"class":58},[35,129362,12769],{"class":359},[35,129364,687],{"class":58},[35,129366,12769],{"class":359},[35,129368,687],{"class":58},[35,129370,12769],{"class":359},[35,129372,100846],{"class":58},[35,129374,3053],{"class":359},[35,129376,129377],{"class":37,"line":55},[35,129378,1926],{"class":359},[21,129380,99721],{},[21,129382,129383],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[21,129385,129386],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[21,129388,129389],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[21,129391,129392],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[465,129394,129396],{"id":129395},"_828-总结","8.2.8 总结",[633,129398,129399,129410],{},[636,129400,129401],{},[639,129402,129403,129406,129408],{},[642,129404,129405],{"align":24070},"属性",[642,129407,103018],{"align":24070},[642,129409,648],{"align":24070},[680,129411,129412,129423,129434,129445,129456,129467,129478],{},[639,129413,129414,129417,129420],{},[685,129415,129416],{"align":24070},"background-color",[685,129418,129419],{"align":24070},"背景颜色",[685,129421,129422],{"align":24070},"预定义的颜色值\u002F十六进制\u002FRGB代码",[639,129424,129425,129428,129431],{},[685,129426,129427],{"align":24070},"background-image",[685,129429,129430],{"align":24070},"背景图片",[685,129432,129433],{"align":24070},"url(图片路径)",[639,129435,129436,129439,129442],{},[685,129437,129438],{"align":24070},"background-repeat",[685,129440,129441],{"align":24070},"是否平铺",[685,129443,129444],{"align":24070},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[639,129446,129447,129450,129453],{},[685,129448,129449],{"align":24070},"background-position",[685,129451,129452],{"align":24070},"背景位置",[685,129454,129455],{"align":24070},"length\u002Fposition 分别是x和y坐标",[639,129457,129458,129461,129464],{},[685,129459,129460],{"align":24070},"background-attachment",[685,129462,129463],{"align":24070},"背景附着",[685,129465,129466],{"align":24070},"scroll(背景滚动) \u002Ffixed (背景固定)",[639,129468,129469,129472,129475],{},[685,129470,129471],{"align":24070},"背景简写",[685,129473,129474],{"align":24070},"书写更简单",[685,129476,129477],{"align":24070},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[639,129479,129480,129483,129486],{},[685,129481,129482],{"align":24070},"背景半透明",[685,129484,129485],{"align":24070},"背景颜色半透明",[685,129487,129488],{"align":24070},"background: rgba(0,0,0.3); 后面必须是4个值",[21,129490,129491],{},"颜色渐变：",[1823,129493],{"style":126659,"src":129494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1823,129496],{"style":126659,"src":129497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[465,129499,129501],{"id":129500},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[25,129503,129505],{"className":127550,"code":129504,"language":127552,"meta":30,"style":30},"\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",[32,129506,129507,129522,129541,129560,129579,129598,129617],{"__ignoreMap":30},[35,129508,129509,129511,129513,129515,129517,129520],{"class":37,"line":38},[35,129510,1404],{"class":359},[35,129512,51937],{"class":51626},[35,129514,53812],{"class":48},[35,129516,544],{"class":359},[35,129518,129519],{"class":306},"\"nav\"",[35,129521,51633],{"class":359},[35,129523,129524,129526,129528,129530,129532,129534,129537,129539],{"class":37,"line":45},[35,129525,52470],{"class":359},[35,129527,734],{"class":51626},[35,129529,61383],{"class":48},[35,129531,544],{"class":359},[35,129533,61388],{"class":306},[35,129535,129536],{"class":359},">五彩导航1\u003C\u002F",[35,129538,734],{"class":51626},[35,129540,51633],{"class":359},[35,129542,129543,129545,129547,129549,129551,129553,129556,129558],{"class":37,"line":55},[35,129544,52470],{"class":359},[35,129546,734],{"class":51626},[35,129548,61383],{"class":48},[35,129550,544],{"class":359},[35,129552,61388],{"class":306},[35,129554,129555],{"class":359},">五彩导航2\u003C\u002F",[35,129557,734],{"class":51626},[35,129559,51633],{"class":359},[35,129561,129562,129564,129566,129568,129570,129572,129575,129577],{"class":37,"line":65},[35,129563,52470],{"class":359},[35,129565,734],{"class":51626},[35,129567,61383],{"class":48},[35,129569,544],{"class":359},[35,129571,61388],{"class":306},[35,129573,129574],{"class":359},">五彩导航3\u003C\u002F",[35,129576,734],{"class":51626},[35,129578,51633],{"class":359},[35,129580,129581,129583,129585,129587,129589,129591,129594,129596],{"class":37,"line":74},[35,129582,52470],{"class":359},[35,129584,734],{"class":51626},[35,129586,61383],{"class":48},[35,129588,544],{"class":359},[35,129590,61388],{"class":306},[35,129592,129593],{"class":359},">五彩导航4\u003C\u002F",[35,129595,734],{"class":51626},[35,129597,51633],{"class":359},[35,129599,129600,129602,129604,129606,129608,129610,129613,129615],{"class":37,"line":83},[35,129601,52470],{"class":359},[35,129603,734],{"class":51626},[35,129605,61383],{"class":48},[35,129607,544],{"class":359},[35,129609,61388],{"class":306},[35,129611,129612],{"class":359},">五彩导航5\u003C\u002F",[35,129614,734],{"class":51626},[35,129616,51633],{"class":359},[35,129618,129619,129621,129623],{"class":37,"line":92},[35,129620,52111],{"class":359},[35,129622,51937],{"class":51626},[35,129624,51633],{"class":359},[25,129626,129628],{"className":126803,"code":129627,"language":126805,"meta":30,"style":30},".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",[32,129629,129630,129639,129649,129661,129673,129683,129695,129705,129709,129734,129757,129780,129803],{"__ignoreMap":30},[35,129631,129632,129635,129637],{"class":37,"line":38},[35,129633,129634],{"class":48},".nav",[35,129636,1759],{"class":51626},[35,129638,15906],{"class":359},[35,129640,129641,129643,129645,129647],{"class":37,"line":45},[35,129642,128419],{"class":58},[35,129644,51763],{"class":359},[35,129646,72708],{"class":58},[35,129648,1655],{"class":359},[35,129650,129651,129653,129655,129657,129659],{"class":37,"line":55},[35,129652,70893],{"class":58},[35,129654,51763],{"class":359},[35,129656,1311],{"class":58},[35,129658,51818],{"class":495},[35,129660,1655],{"class":359},[35,129662,129663,129665,129667,129669,129671],{"class":37,"line":65},[35,129664,71113],{"class":58},[35,129666,51763],{"class":359},[35,129668,1350],{"class":58},[35,129670,51818],{"class":495},[35,129672,1655],{"class":359},[35,129674,129675,129677,129679,129681],{"class":37,"line":74},[35,129676,70851],{"class":58},[35,129678,51763],{"class":359},[35,129680,51918],{"class":58},[35,129682,1655],{"class":359},[35,129684,129685,129687,129689,129691,129693],{"class":37,"line":83},[35,129686,127487],{"class":58},[35,129688,51763],{"class":359},[35,129690,1350],{"class":58},[35,129692,51818],{"class":495},[35,129694,1655],{"class":359},[35,129696,129697,129699,129701,129703],{"class":37,"line":92},[35,129698,71230],{"class":58},[35,129700,51763],{"class":359},[35,129702,61168],{"class":58},[35,129704,1655],{"class":359},[35,129706,129707],{"class":37,"line":101},[35,129708,1926],{"class":359},[35,129710,129711,129713,129715,129718,129720,129722,129725,129727,129729,129731],{"class":37,"line":110},[35,129712,129634],{"class":48},[35,129714,1759],{"class":51626},[35,129716,129717],{"class":48},":nth-child",[35,129719,499],{"class":359},[35,129721,713],{"class":58},[35,129723,129724],{"class":359},") { ",[35,129726,129416],{"class":58},[35,129728,51763],{"class":359},[35,129730,128834],{"class":58},[35,129732,129733],{"class":359},"; }\n",[35,129735,129736,129738,129740,129742,129744,129746,129748,129750,129752,129755],{"class":37,"line":119},[35,129737,129634],{"class":48},[35,129739,1759],{"class":51626},[35,129741,129717],{"class":48},[35,129743,499],{"class":359},[35,129745,574],{"class":58},[35,129747,129724],{"class":359},[35,129749,129416],{"class":58},[35,129751,51763],{"class":359},[35,129753,129754],{"class":58},"#ff0000",[35,129756,129733],{"class":359},[35,129758,129759,129761,129763,129765,129767,129769,129771,129773,129775,129778],{"class":37,"line":128},[35,129760,129634],{"class":48},[35,129762,1759],{"class":51626},[35,129764,129717],{"class":48},[35,129766,499],{"class":359},[35,129768,568],{"class":58},[35,129770,129724],{"class":359},[35,129772,129416],{"class":58},[35,129774,51763],{"class":359},[35,129776,129777],{"class":58},"#00a4ff",[35,129779,129733],{"class":359},[35,129781,129782,129784,129786,129788,129790,129792,129794,129796,129798,129801],{"class":37,"line":137},[35,129783,129634],{"class":48},[35,129785,1759],{"class":51626},[35,129787,129717],{"class":48},[35,129789,499],{"class":359},[35,129791,789],{"class":58},[35,129793,129724],{"class":359},[35,129795,129416],{"class":58},[35,129797,51763],{"class":359},[35,129799,129800],{"class":58},"#ff00ff",[35,129802,129733],{"class":359},[35,129804,129805,129807,129809,129811,129813,129815,129817,129819,129821,129824],{"class":37,"line":144},[35,129806,129634],{"class":48},[35,129808,1759],{"class":51626},[35,129810,129717],{"class":48},[35,129812,499],{"class":359},[35,129814,372],{"class":58},[35,129816,129724],{"class":359},[35,129818,129416],{"class":58},[35,129820,51763],{"class":359},[35,129822,129823],{"class":58},"#00ff00",[35,129825,129733],{"class":359},[438,129827,129829],{"id":129828},"_83-css三大特性","8.3 css三大特性",[465,129831,129833],{"id":129832},"_831-层叠性","8.3.1 层叠性",[21,129835,129836],{},"为了解决样式冲突问题",[21,129838,129839],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[21,129841,129842],{},"   ②样式不冲突，不会层叠",[465,129844,129846],{"id":129845},"_832-继承性","8.3.2 继承性",[21,129848,129849],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[21,129851,129852],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[25,129854,129856],{"className":126803,"code":129855,"language":126805,"meta":30,"style":30},"p {\n  color: #333;\n}\n",[32,129857,129858,129864,129874],{"__ignoreMap":30},[35,129859,129860,129862],{"class":37,"line":38},[35,129861,21],{"class":51626},[35,129863,15906],{"class":359},[35,129865,129866,129868,129870,129872],{"class":37,"line":45},[35,129867,71230],{"class":58},[35,129869,51763],{"class":359},[35,129871,62695],{"class":58},[35,129873,1655],{"class":359},[35,129875,129876],{"class":37,"line":55},[35,129877,1926],{"class":359},[1823,129879],{"style":126659,"src":129880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[21,129882,129883],{},"解释：①行高可以跟单位也可以不跟单位",[21,129885,129886],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[21,129888,129889],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[21,129891,129892],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[465,129894,129896],{"id":129895},"_833-优先级","8.3.3 优先级",[14,129898,129899,129902],{},[17,129900,129901],{},"选择器相同，则执行层叠性",[17,129903,129904],{},"选择器不同，则根据选择器权重执行",[633,129906,129907,129917],{},[636,129908,129909],{},[639,129910,129911,129914],{},[642,129912,129913],{"align":24070},"选择器",[642,129915,129916],{"align":24070},"选择器权重",[680,129918,129919,129927,129935,129943,129951,129959],{},[639,129920,129921,129924],{},[685,129922,129923],{"align":24070},"继承 或者*",[685,129925,129926],{"align":24070},"0，0，0，0",[639,129928,129929,129932],{},[685,129930,129931],{"align":24070},"标签选择器",[685,129933,129934],{"align":24070},"0，0，0，1",[639,129936,129937,129940],{},[685,129938,129939],{"align":24070},"类选择器，伪类选择器",[685,129941,129942],{"align":24070},"0，0，1，0",[639,129944,129945,129948],{},[685,129946,129947],{"align":24070},"ID选择器",[685,129949,129950],{"align":24070},"0，1，0，0",[639,129952,129953,129956],{},[685,129954,129955],{"align":24070},"行内样式",[685,129957,129958],{"align":24070},"1，0，0，0",[639,129960,129961,129964],{},[685,129962,129963],{"align":24070},"！important",[685,129965,129966],{"align":24070},"无穷大",[21,129968,129969],{},"! important用法：",[25,129971,129973],{"className":126803,"code":129972,"language":126805,"meta":30,"style":30},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[32,129974,129975,129980,129986,129999,130003,130008,130014,130024],{"__ignoreMap":30},[35,129976,129977],{"class":37,"line":38},[35,129978,129979],{"class":41},"\u002F* !important 拥有最高优先级 *\u002F\n",[35,129981,129982,129984],{"class":37,"line":45},[35,129983,51937],{"class":51626},[35,129985,15906],{"class":359},[35,129987,129988,129990,129992,129994,129997],{"class":37,"line":55},[35,129989,71230],{"class":58},[35,129991,51763],{"class":359},[35,129993,51971],{"class":58},[35,129995,129996],{"class":495}," !important",[35,129998,1655],{"class":359},[35,130000,130001],{"class":37,"line":65},[35,130002,1926],{"class":359},[35,130004,130005],{"class":37,"line":74},[35,130006,130007],{"class":41},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[35,130009,130010,130012],{"class":37,"line":83},[35,130011,51937],{"class":51626},[35,130013,15906],{"class":359},[35,130015,130016,130018,130020,130022],{"class":37,"line":92},[35,130017,71230],{"class":58},[35,130019,51763],{"class":359},[35,130021,57747],{"class":58},[35,130023,1655],{"class":359},[35,130025,130026],{"class":37,"line":101},[35,130027,1926],{"class":359},[21,130029,130030],{},"优先级注意点：",[21,130032,130033],{},"①权重是有4组数字组成,但是不会有进位",[21,130035,130036],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[21,130038,130039],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[21,130041,130042],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[21,130044,130045],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[21,130047,130048],{},"⑥复合选择器",[633,130050,130051,130061],{},[636,130052,130053],{},[639,130054,130055,130058],{},[642,130056,130057],{"align":24070},"div ul li",[642,130059,130060],{"align":24070},"0,0,0,3",[680,130062,130063,130071,130079],{},[639,130064,130065,130068],{},[685,130066,130067],{"align":24070},".nav ul li",[685,130069,130070],{"align":24070},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[639,130072,130073,130076],{},[685,130074,130075],{"align":24070},"a:hover",[685,130077,130078],{"align":24070},"0,0,1,1",[639,130080,130081,130084],{},[685,130082,130083],{"align":24070},".nav a",[685,130085,130078],{"align":24070},[416,130087,130088],{},"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":30,"searchDepth":45,"depth":45,"links":130090},[130091,130099,130110],{"id":128199,"depth":45,"text":128200,"children":130092},[130093,130094,130095,130096,130097,130098],{"id":128212,"depth":55,"text":128213},{"id":128284,"depth":55,"text":128285},{"id":128356,"depth":55,"text":128357},{"id":128387,"depth":55,"text":128388},{"id":128394,"depth":55,"text":128395},{"id":128547,"depth":55,"text":128548},{"id":128855,"depth":45,"text":128856,"children":130100},[130101,130102,130103,130104,130105,130106,130107,130108,130109],{"id":128862,"depth":55,"text":128863},{"id":128872,"depth":55,"text":128873},{"id":128968,"depth":55,"text":128969},{"id":129041,"depth":55,"text":129042},{"id":129196,"depth":55,"text":129197},{"id":129284,"depth":55,"text":129285},{"id":129336,"depth":55,"text":129337},{"id":129395,"depth":55,"text":129396},{"id":129500,"depth":55,"text":129501},{"id":129828,"depth":45,"text":129829,"children":130111},[130112,130113,130114],{"id":129832,"depth":55,"text":129833},{"id":129845,"depth":55,"text":129846},{"id":129895,"depth":55,"text":129896},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128191,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130121,"title":130122,"body":130123,"description":421,"extension":422,"meta":131713,"navigation":140,"path":131714,"seo":131715,"stem":131716,"__hash__":131717},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130124,"toc":131692},[130125,130128,130132,130135,130138,130141,130144,130147,130150,130153,130157,130165,130202,130238,130241,130255,130260,130294,130297,130390,130395,130398,130428,130431,130436,130444,130448,130455,130501,130545,130550,130553,130556,130559,130562,130565,130568,130570,130573,130577,130582,130626,130631,130634,130637,130674,130679,130682,130685,130688,130691,130723,130726,130729,130732,130764,130767,130770,130773,130777,130780,130812,130815,130819,130839,130842,130850,130853,130857,130862,130865,130897,130902,130905,130943,130947,130952,130955,130958,130989,130992,131009,131014,131066,131126,131131,131185,131223,131227,131231,131234,131238,131246,131249,131251,131262,131267,131315,131349,131352,131355,131358,131361,131405,131408,131411,131414,131417,131420,131423,131467,131470,131473,131476,131479,131482,131485,131491,131494,131538,131541,131544,131547,131550,131553,131597,131600,131602,131605,131609,131613,131651,131655,131658,131661,131665,131673,131677,131680,131683,131686,131689],[10,130126,130122],{"id":130127},"_9-css盒模型浮动与切图",[438,130129,130131],{"id":130130},"_91-盒子模型","9.1 盒子模型",[21,130133,130134],{},"利用盒子来设计网页",[21,130136,130137],{},"盒子包含：边框、外边距、内边距、实际内容",[21,130139,130140],{},"网页布局设置：",[21,130142,130143],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[21,130145,130146],{},"②利用css设置好盒子样式，然后摆放到相应位置",[21,130148,130149],{},"③往盒子里装内容",[1823,130151],{"style":126659,"src":130152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[465,130154,130156],{"id":130155},"_911-边框border","9.1.1 边框（border）",[14,130158,130159,130162],{},[17,130160,130161],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[17,130163,130164],{},"语法",[25,130166,130168],{"className":126803,"code":130167,"language":126805,"meta":30,"style":30},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[32,130169,130170,130175,130181,130198],{"__ignoreMap":30},[35,130171,130172],{"class":37,"line":38},[35,130173,130174],{"class":41},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[35,130176,130177,130179],{"class":37,"line":45},[35,130178,51937],{"class":51626},[35,130180,15906],{"class":359},[35,130182,130183,130185,130187,130189,130191,130193,130196],{"class":37,"line":55},[35,130184,71221],{"class":58},[35,130186,51763],{"class":359},[35,130188,713],{"class":58},[35,130190,51818],{"class":495},[35,130192,51847],{"class":58},[35,130194,130195],{"class":58}," #ccc",[35,130197,1655],{"class":359},[35,130199,130200],{"class":37,"line":65},[35,130201,1926],{"class":359},[633,130203,130204,130212],{},[636,130205,130206],{},[639,130207,130208,130210],{},[642,130209,129405],{"align":24070},[642,130211,103018],{"align":24070},[680,130213,130214,130222,130230],{},[639,130215,130216,130219],{},[685,130217,130218],{"align":24070},"border-width",[685,130220,130221],{"align":24070},"定义边框粗细，单位是px",[639,130223,130224,130227],{},[685,130225,130226],{"align":24070},"border-style",[685,130228,130229],{"align":24070},"边框的样式",[639,130231,130232,130235],{},[685,130233,130234],{"align":24070},"border-color",[685,130236,130237],{"align":24070},"边框的颜色",[21,130239,130240],{},"边框样式 border-style 可以设置如下值：",[1501,130242,130243,130246,130249,130252],{},[17,130244,130245],{},"none：没有边框即忽略所有边框的宽度（默认值）",[17,130247,130248],{},"solid：边框为单实线(最为常用的)",[17,130250,130251],{},"dashed：边框为虚线",[17,130253,130254],{},"dotted：边框为点线",[14,130256,130257],{"start":55},[17,130258,130259],{},"边框的合写分写",[25,130261,130262],{"className":126803,"code":130167,"language":126805,"meta":30,"style":30},[32,130263,130264,130268,130274,130290],{"__ignoreMap":30},[35,130265,130266],{"class":37,"line":38},[35,130267,130174],{"class":41},[35,130269,130270,130272],{"class":37,"line":45},[35,130271,51937],{"class":51626},[35,130273,15906],{"class":359},[35,130275,130276,130278,130280,130282,130284,130286,130288],{"class":37,"line":55},[35,130277,71221],{"class":58},[35,130279,51763],{"class":359},[35,130281,713],{"class":58},[35,130283,51818],{"class":495},[35,130285,51847],{"class":58},[35,130287,130195],{"class":58},[35,130289,1655],{"class":359},[35,130291,130292],{"class":37,"line":65},[35,130293,1926],{"class":359},[21,130295,130296],{},"边框分开写法：",[25,130298,130300],{"className":126803,"code":130299,"language":126805,"meta":30,"style":30},"\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",[32,130301,130302,130307,130313,130331,130349,130368,130386],{"__ignoreMap":30},[35,130303,130304],{"class":37,"line":38},[35,130305,130306],{"class":41},"\u002F* 边框分开写法 *\u002F\n",[35,130308,130309,130311],{"class":37,"line":45},[35,130310,51937],{"class":51626},[35,130312,15906],{"class":359},[35,130314,130315,130318,130320,130322,130324,130326,130329],{"class":37,"line":55},[35,130316,130317],{"class":58},"  border-top",[35,130319,51763],{"class":359},[35,130321,713],{"class":58},[35,130323,51818],{"class":495},[35,130325,51847],{"class":58},[35,130327,130328],{"class":58}," #000",[35,130330,1655],{"class":359},[35,130332,130333,130336,130338,130340,130342,130344,130347],{"class":37,"line":65},[35,130334,130335],{"class":58},"  border-right",[35,130337,51763],{"class":359},[35,130339,574],{"class":58},[35,130341,51818],{"class":495},[35,130343,62567],{"class":58},[35,130345,130346],{"class":58}," #333",[35,130348,1655],{"class":359},[35,130350,130351,130354,130356,130358,130360,130363,130366],{"class":37,"line":74},[35,130352,130353],{"class":58},"  border-bottom",[35,130355,51763],{"class":359},[35,130357,568],{"class":58},[35,130359,51818],{"class":495},[35,130361,130362],{"class":58}," dotted",[35,130364,130365],{"class":58}," #666",[35,130367,1655],{"class":359},[35,130369,130370,130373,130375,130377,130379,130381,130384],{"class":37,"line":83},[35,130371,130372],{"class":58},"  border-left",[35,130374,51763],{"class":359},[35,130376,713],{"class":58},[35,130378,51818],{"class":495},[35,130380,51847],{"class":58},[35,130382,130383],{"class":58}," #999",[35,130385,1655],{"class":359},[35,130387,130388],{"class":37,"line":92},[35,130389,1926],{"class":359},[14,130391,130392],{"start":65},[17,130393,130394],{},"表格的细线边框",[21,130396,130397],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[25,130399,130401],{"className":126803,"code":130400,"language":126805,"meta":30,"style":30},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[32,130402,130403,130408,130414,130424],{"__ignoreMap":30},[35,130404,130405],{"class":37,"line":38},[35,130406,130407],{"class":41},"\u002F* 表格细线边框合并 *\u002F\n",[35,130409,130410,130412],{"class":37,"line":45},[35,130411,633],{"class":51626},[35,130413,15906],{"class":359},[35,130415,130416,130418,130420,130422],{"class":37,"line":55},[35,130417,70903],{"class":58},[35,130419,51763],{"class":359},[35,130421,65361],{"class":58},[35,130423,1655],{"class":359},[35,130425,130426],{"class":37,"line":65},[35,130427,1926],{"class":359},[21,130429,130430],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[14,130432,130433],{"start":74},[17,130434,130435],{},"解决边框额外增加盒子的实际大小的方法：",[1501,130437,130438,130441],{},[17,130439,130440],{},"测量盒子大小的时候,不量边框",[17,130442,130443],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[465,130445,130447],{"id":130446},"_912-内边距","9.1.2 内边距",[14,130449,130450,130453],{},[17,130451,130452],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[17,130454,130164],{},[633,130456,130457,130467],{},[636,130458,130459],{},[639,130460,130461,130464],{},[642,130462,130463],{"align":24070},"值的个数",[642,130465,130466],{"align":24070},"表达意思",[680,130468,130469,130477,130485,130493],{},[639,130470,130471,130474],{},[685,130472,130473],{"align":24070},"padding: 5px;",[685,130475,130476],{"align":24070},"1个值，代表上下左右都有5个元素",[639,130478,130479,130482],{},[685,130480,130481],{"align":24070},"padding: 5px 10px;",[685,130483,130484],{"align":24070},"2个值，代表上下内边距为5像素，左右内边距为10像素",[639,130486,130487,130490],{},[685,130488,130489],{"align":24070},"padding: 5px 10px 20px;",[685,130491,130492],{"align":24070},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[639,130494,130495,130498],{},[685,130496,130497],{"align":24070},"padding: 5px 10px 20px 30px;",[685,130499,130500],{"align":24070},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[633,130502,130503,130511],{},[636,130504,130505],{},[639,130506,130507,130509],{},[642,130508,129405],{"align":24070},[642,130510,103018],{"align":24070},[680,130512,130513,130521,130529,130537],{},[639,130514,130515,130518],{},[685,130516,130517],{"align":24070},"padding-left",[685,130519,130520],{"align":24070},"左内边距",[639,130522,130523,130526],{},[685,130524,130525],{"align":24070},"padding-right",[685,130527,130528],{"align":24070},"右内边距",[639,130530,130531,130534],{},[685,130532,130533],{"align":24070},"padding-top",[685,130535,130536],{"align":24070},"上内边距",[639,130538,130539,130542],{},[685,130540,130541],{"align":24070},"padding-bottom",[685,130543,130544],{"align":24070},"下内边距",[14,130546,130547],{"start":55},[17,130548,130549],{},"内边距会影响盒子的实际大小",[21,130551,130552],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[21,130554,130555],{},"①内容和边框有了距离，添加了内边距",[21,130557,130558],{},"②padding影响了盒子实际大小",[21,130560,130561],{},"内边距对盒子大小的影响：",[21,130563,130564],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[21,130566,130567],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[21,130569,95545],{},[21,130571,130572],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[465,130574,130576],{"id":130575},"_913-外边距","9.1.3 外边距",[14,130578,130579],{},[17,130580,130581],{},"控制盒子与盒子之间的距离",[633,130583,130584,130592],{},[636,130585,130586],{},[639,130587,130588,130590],{},[642,130589,129405],{"align":24070},[642,130591,103018],{"align":24070},[680,130593,130594,130602,130610,130618],{},[639,130595,130596,130599],{},[685,130597,130598],{"align":24070},"margin-left",[685,130600,130601],{"align":24070},"左外边距",[639,130603,130604,130607],{},[685,130605,130606],{"align":24070},"margin-right",[685,130608,130609],{"align":24070},"右外边距",[639,130611,130612,130615],{},[685,130613,130614],{"align":24070},"margin-top",[685,130616,130617],{"align":24070},"上外边距",[639,130619,130620,130623],{},[685,130621,130622],{"align":24070},"margin-bottom",[685,130624,130625],{"align":24070},"下外边距",[14,130627,130628],{"start":45},[17,130629,130630],{},"外边距可以让块级盒子水平居中的两个条件：",[21,130632,130633],{},"①盒子必须指定了宽度（width）",[21,130635,130636],{},"②盒子左右的外边距都设置为 auto",[25,130638,130640],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,130641,130642,130647,130654,130670],{"__ignoreMap":30},[35,130643,130644],{"class":37,"line":38},[35,130645,130646],{"class":41},"\u002F* margin 复合写法（同上） *\u002F\n",[35,130648,130649,130652],{"class":37,"line":45},[35,130650,130651],{"class":48},".box",[35,130653,15906],{"class":359},[35,130655,130656,130658,130660,130662,130664,130667],{"class":37,"line":55},[35,130657,70795],{"class":58},[35,130659,51763],{"class":359},[35,130661,687],{"class":58},[35,130663,51882],{"class":58},[35,130665,130666],{"class":359},";  ",[35,130668,130669],{"class":41},"\u002F* 块级盒子水平居中 *\u002F\n",[35,130671,130672],{"class":37,"line":65},[35,130673,1926],{"class":359},[14,130675,130676],{"start":55},[17,130677,130678],{},"外边距塌陷问题",[21,130680,130681],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1823,130683],{"style":126659,"src":130684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[21,130686,130687],{},"解决方案：",[21,130689,130690],{},"①可以为父亲元素定义上边距",[25,130692,130693],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,130694,130695,130699,130705,130719],{"__ignoreMap":30},[35,130696,130697],{"class":37,"line":38},[35,130698,130646],{"class":41},[35,130700,130701,130703],{"class":37,"line":45},[35,130702,130651],{"class":48},[35,130704,15906],{"class":359},[35,130706,130707,130709,130711,130713,130715,130717],{"class":37,"line":55},[35,130708,70795],{"class":58},[35,130710,51763],{"class":359},[35,130712,687],{"class":58},[35,130714,51882],{"class":58},[35,130716,130666],{"class":359},[35,130718,130669],{"class":41},[35,130720,130721],{"class":37,"line":65},[35,130722,1926],{"class":359},[21,130724,130725],{},"②可以为父亲元素定义上内边距",[21,130727,130728],{},"③可以为父亲元素添加overflow:hidden",[1823,130730],{"style":126659,"src":130731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[25,130733,130734],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,130735,130736,130740,130746,130760],{"__ignoreMap":30},[35,130737,130738],{"class":37,"line":38},[35,130739,130646],{"class":41},[35,130741,130742,130744],{"class":37,"line":45},[35,130743,130651],{"class":48},[35,130745,15906],{"class":359},[35,130747,130748,130750,130752,130754,130756,130758],{"class":37,"line":55},[35,130749,70795],{"class":58},[35,130751,51763],{"class":359},[35,130753,687],{"class":58},[35,130755,51882],{"class":58},[35,130757,130666],{"class":359},[35,130759,130669],{"class":41},[35,130761,130762],{"class":37,"line":65},[35,130763,1926],{"class":359},[1823,130765],{"style":126659,"src":130766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[21,130768,130769],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[21,130771,130772],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[465,130774,130776],{"id":130775},"_914-清除内外边距","9.1.4 清除内外边距",[21,130778,130779],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[25,130781,130782],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,130783,130784,130788,130794,130808],{"__ignoreMap":30},[35,130785,130786],{"class":37,"line":38},[35,130787,130646],{"class":41},[35,130789,130790,130792],{"class":37,"line":45},[35,130791,130651],{"class":48},[35,130793,15906],{"class":359},[35,130795,130796,130798,130800,130802,130804,130806],{"class":37,"line":55},[35,130797,70795],{"class":58},[35,130799,51763],{"class":359},[35,130801,687],{"class":58},[35,130803,51882],{"class":58},[35,130805,130666],{"class":359},[35,130807,130669],{"class":41},[35,130809,130810],{"class":37,"line":65},[35,130811,1926],{"class":359},[21,130813,130814],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[465,130816,130818],{"id":130817},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1501,130820,130821,130824,130827,130830,130833,130836],{},[17,130822,130823],{},"文件→打开 ：可以打开我们要测量的图片",[17,130825,130826],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[17,130828,130829],{},"右击标尺，把里面的单位改为像素",[17,130831,130832],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[17,130834,130835],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[17,130837,130838],{},"用选区拖动 可以测量大小",[1823,130840],{"style":126659,"src":130841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1501,130843,130844,130847],{},[17,130845,130846],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[17,130848,130849],{},"吸管取色工具",[1823,130851],{"style":126659,"src":130852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[465,130854,130856],{"id":130855},"_916-案例","9.1.6 案例",[14,130858,130859],{},[17,130860,130861],{},"小米商品",[1823,130863],{"style":126659,"src":130864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[25,130866,130867],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,130868,130869,130873,130879,130893],{"__ignoreMap":30},[35,130870,130871],{"class":37,"line":38},[35,130872,130646],{"class":41},[35,130874,130875,130877],{"class":37,"line":45},[35,130876,130651],{"class":48},[35,130878,15906],{"class":359},[35,130880,130881,130883,130885,130887,130889,130891],{"class":37,"line":55},[35,130882,70795],{"class":58},[35,130884,51763],{"class":359},[35,130886,687],{"class":58},[35,130888,51882],{"class":58},[35,130890,130666],{"class":359},[35,130892,130669],{"class":41},[35,130894,130895],{"class":37,"line":65},[35,130896,1926],{"class":359},[14,130898,130899],{"start":45},[17,130900,130901],{},"快报模块",[1823,130903],{"style":126659,"src":130904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[25,130906,130908],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[32,130909,130910,130915,130930,130935],{"__ignoreMap":30},[35,130911,130912],{"class":37,"line":38},[35,130913,130914],{"class":41},"\u003C!-- HTML 代码示例 -->\n",[35,130916,130917,130919,130921,130923,130925,130928],{"class":37,"line":45},[35,130918,1404],{"class":359},[35,130920,51937],{"class":51626},[35,130922,53812],{"class":48},[35,130924,544],{"class":359},[35,130926,130927],{"class":306},"\"example\"",[35,130929,51633],{"class":359},[35,130931,130932],{"class":37,"line":55},[35,130933,130934],{"class":359},"  示例内容\n",[35,130936,130937,130939,130941],{"class":37,"line":65},[35,130938,52111],{"class":359},[35,130940,51937],{"class":51626},[35,130942,51633],{"class":359},[465,130944,130946],{"id":130945},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[14,130948,130949],{},[17,130950,130951],{},"圆角边框",[21,130953,130954],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1823,130956],{"style":126659,"src":130957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[25,130959,130961],{"className":126803,"code":130960,"language":126805,"meta":30,"style":30},"div {\n  border: 1px solid #ccc;\n}\n",[32,130962,130963,130969,130985],{"__ignoreMap":30},[35,130964,130965,130967],{"class":37,"line":38},[35,130966,51937],{"class":51626},[35,130968,15906],{"class":359},[35,130970,130971,130973,130975,130977,130979,130981,130983],{"class":37,"line":45},[35,130972,71221],{"class":58},[35,130974,51763],{"class":359},[35,130976,713],{"class":58},[35,130978,51818],{"class":495},[35,130980,51847],{"class":58},[35,130982,130195],{"class":58},[35,130984,1655],{"class":359},[35,130986,130987],{"class":37,"line":55},[35,130988,1926],{"class":359},[21,130990,130991],{},"解释:",[1501,130993,130994,130997,131000,131003,131006],{},[17,130995,130996],{},"参数值可以为数值或百分比的形式",[17,130998,130999],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[17,131001,131002],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[17,131004,131005],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[17,131007,131008],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[14,131010,131011],{"start":45},[17,131012,131013],{},"盒子阴影",[25,131015,131017],{"className":126803,"code":131016,"language":126805,"meta":30,"style":30},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[32,131018,131019,131025,131062],{"__ignoreMap":30},[35,131020,131021,131023],{"class":37,"line":38},[35,131022,51937],{"class":51626},[35,131024,15906],{"class":359},[35,131026,131027,131030,131032,131034,131036,131038,131040,131042,131044,131046,131048,131050,131052,131054,131056,131058,131060],{"class":37,"line":45},[35,131028,131029],{"class":58},"  box-shadow",[35,131031,51763],{"class":359},[35,131033,687],{"class":58},[35,131035,15089],{"class":58},[35,131037,51818],{"class":495},[35,131039,2379],{"class":58},[35,131041,51818],{"class":495},[35,131043,79092],{"class":58},[35,131045,499],{"class":359},[35,131047,687],{"class":58},[35,131049,12769],{"class":359},[35,131051,687],{"class":58},[35,131053,12769],{"class":359},[35,131055,687],{"class":58},[35,131057,12769],{"class":359},[35,131059,86535],{"class":58},[35,131061,3053],{"class":359},[35,131063,131064],{"class":37,"line":55},[35,131065,1926],{"class":359},[633,131067,131068,131076],{},[636,131069,131070],{},[639,131071,131072,131074],{},[642,131073,648],{"align":24070},[642,131075,27817],{"align":24070},[680,131077,131078,131086,131094,131102,131110,131118],{},[639,131079,131080,131083],{},[685,131081,131082],{"align":24070},"h-shadow",[685,131084,131085],{"align":24070},"必需,水平阴影的位置,允许负值",[639,131087,131088,131091],{},[685,131089,131090],{"align":24070},"v-shadow",[685,131092,131093],{"align":24070},"必需,垂直阴影的位置,允许负值",[639,131095,131096,131099],{},[685,131097,131098],{"align":24070},"blur",[685,131100,131101],{"align":24070},"可选,模糊距离,就是影子的虚实",[639,131103,131104,131107],{},[685,131105,131106],{"align":24070},"spread",[685,131108,131109],{"align":24070},"可选,阴影尺寸",[639,131111,131112,131115],{},[685,131113,131114],{"align":24070},"color",[685,131116,131117],{"align":24070},"可选,阴影的颜色",[639,131119,131120,131123],{},[685,131121,131122],{"align":24070},"inset",[685,131124,131125],{"align":24070},"可选,将外部阴影(outset)改为内部阴影",[14,131127,131128],{"start":55},[17,131129,131130],{},"文字阴影",[25,131132,131134],{"className":126803,"code":131133,"language":126805,"meta":30,"style":30},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[32,131135,131136,131142,131181],{"__ignoreMap":30},[35,131137,131138,131140],{"class":37,"line":38},[35,131139,21],{"class":51626},[35,131141,15906],{"class":359},[35,131143,131144,131147,131149,131151,131153,131155,131157,131159,131161,131163,131165,131167,131169,131171,131173,131175,131177,131179],{"class":37,"line":45},[35,131145,131146],{"class":58},"  text-shadow",[35,131148,51763],{"class":359},[35,131150,713],{"class":58},[35,131152,51818],{"class":495},[35,131154,25450],{"class":58},[35,131156,51818],{"class":495},[35,131158,15089],{"class":58},[35,131160,51818],{"class":495},[35,131162,79092],{"class":58},[35,131164,499],{"class":359},[35,131166,687],{"class":58},[35,131168,12769],{"class":359},[35,131170,687],{"class":58},[35,131172,12769],{"class":359},[35,131174,687],{"class":58},[35,131176,12769],{"class":359},[35,131178,100846],{"class":58},[35,131180,3053],{"class":359},[35,131182,131183],{"class":37,"line":55},[35,131184,1926],{"class":359},[633,131186,131187,131195],{},[636,131188,131189],{},[639,131190,131191,131193],{},[642,131192,648],{"align":24070},[642,131194,27817],{"align":24070},[680,131196,131197,131203,131210,131217],{},[639,131198,131199,131201],{},[685,131200,131082],{"align":24070},[685,131202,131085],{"align":24070},[639,131204,131205,131207],{},[685,131206,131090],{"align":24070},[685,131208,131209],{"align":24070},"必需,垂直阴影位置,允许负值",[639,131211,131212,131214],{},[685,131213,131098],{"align":24070},[685,131215,131216],{"align":24070},"可选,模糊的距离",[639,131218,131219,131221],{},[685,131220,131114],{"align":24070},[685,131222,131117],{"align":24070},[438,131224,131226],{"id":131225},"_92-浮动","9.2 浮动",[465,131228,131230],{"id":131229},"_921-浮动介绍","9.2.1 浮动介绍",[21,131232,131233],{},"在16.2中详细介绍",[465,131235,131237],{"id":131236},"_922-清除浮动","9.2.2 清除浮动",[14,131239,131240,131243],{},[17,131241,131242],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[17,131244,131245],{},"清除浮动的本质",[21,131247,131248],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[21,131250,9359],{},[1501,131252,131253,131256,131259],{},[17,131254,131255],{},"如果父盒子本身有高度，则不需要清除浮动",[17,131257,131258],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[17,131260,131261],{},"父级有了高度，就不会影响下面的标准流了",[14,131263,131264],{"start":55},[17,131265,131266],{},"清除浮动样式",[25,131268,131270],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[32,131271,131272,131279,131290,131294,131301,131311],{"__ignoreMap":30},[35,131273,131274,131277],{"class":37,"line":38},[35,131275,131276],{"class":48},".left",[35,131278,15906],{"class":359},[35,131280,131281,131284,131286,131288],{"class":37,"line":45},[35,131282,131283],{"class":58},"  float",[35,131285,51763],{"class":359},[35,131287,24070],{"class":58},[35,131289,1655],{"class":359},[35,131291,131292],{"class":37,"line":55},[35,131293,1926],{"class":359},[35,131295,131296,131299],{"class":37,"line":65},[35,131297,131298],{"class":48},".right",[35,131300,15906],{"class":359},[35,131302,131303,131305,131307,131309],{"class":37,"line":74},[35,131304,131283],{"class":58},[35,131306,51763],{"class":359},[35,131308,72847],{"class":58},[35,131310,1655],{"class":359},[35,131312,131313],{"class":37,"line":83},[35,131314,1926],{"class":359},[633,131316,131317,131325],{},[636,131318,131319],{},[639,131320,131321,131323],{},[642,131322,127267],{"align":24070},[642,131324,27817],{"align":24070},[680,131326,131327,131334,131341],{},[639,131328,131329,131331],{},[685,131330,24070],{"align":24070},[685,131332,131333],{"align":24070},"不允许左侧有浮动元素（清除左侧浮动的影响）",[639,131335,131336,131338],{},[685,131337,72847],{"align":24070},[685,131339,131340],{"align":24070},"不允许右侧有浮动元素（清除右侧浮动的影响）",[639,131342,131343,131346],{},[685,131344,131345],{"align":24070},"both",[685,131347,131348],{"align":24070},"同时清除左右侧浮动的影响",[21,131350,131351],{},"法一",[21,131353,131354],{},"额外标签法也称为隔墙法",[21,131356,131357],{},"使用方式：",[21,131359,131360],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[25,131362,131363],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,131364,131365,131371,131381,131385,131391,131401],{"__ignoreMap":30},[35,131366,131367,131369],{"class":37,"line":38},[35,131368,131276],{"class":48},[35,131370,15906],{"class":359},[35,131372,131373,131375,131377,131379],{"class":37,"line":45},[35,131374,131283],{"class":58},[35,131376,51763],{"class":359},[35,131378,24070],{"class":58},[35,131380,1655],{"class":359},[35,131382,131383],{"class":37,"line":55},[35,131384,1926],{"class":359},[35,131386,131387,131389],{"class":37,"line":65},[35,131388,131298],{"class":48},[35,131390,15906],{"class":359},[35,131392,131393,131395,131397,131399],{"class":37,"line":74},[35,131394,131283],{"class":58},[35,131396,51763],{"class":359},[35,131398,72847],{"class":58},[35,131400,1655],{"class":359},[35,131402,131403],{"class":37,"line":83},[35,131404,1926],{"class":359},[21,131406,131407],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[21,131409,131410],{},"优点： 通俗易懂，书写方便",[21,131412,131413],{},"缺点： 添加许多无意义的标签，结构化较差",[21,131415,131416],{},"注意： 要求这个新的空标签必须是块级元素。",[21,131418,131419],{},"法二",[21,131421,131422],{},"父级添加overflow属性",[25,131424,131425],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,131426,131427,131433,131443,131447,131453,131463],{"__ignoreMap":30},[35,131428,131429,131431],{"class":37,"line":38},[35,131430,131276],{"class":48},[35,131432,15906],{"class":359},[35,131434,131435,131437,131439,131441],{"class":37,"line":45},[35,131436,131283],{"class":58},[35,131438,51763],{"class":359},[35,131440,24070],{"class":58},[35,131442,1655],{"class":359},[35,131444,131445],{"class":37,"line":55},[35,131446,1926],{"class":359},[35,131448,131449,131451],{"class":37,"line":65},[35,131450,131298],{"class":48},[35,131452,15906],{"class":359},[35,131454,131455,131457,131459,131461],{"class":37,"line":74},[35,131456,131283],{"class":58},[35,131458,51763],{"class":359},[35,131460,72847],{"class":58},[35,131462,1655],{"class":359},[35,131464,131465],{"class":37,"line":83},[35,131466,1926],{"class":359},[21,131468,131469],{},"overflow: hidden;",[21,131471,131472],{},"优点：代码简洁",[21,131474,131475],{},"缺点：无法显示溢出的部分",[21,131477,131478],{},"注意：是给父元素添加代码",[21,131480,131481],{},"法三",[21,131483,131484],{},"父级添加after伪元素",[21,131486,131487,131490],{},[131488,131489],"after",{}," 方式是额外标签法的升级版",[21,131492,131493],{},"使用的时候复制就可以",[25,131495,131496],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,131497,131498,131504,131514,131518,131524,131534],{"__ignoreMap":30},[35,131499,131500,131502],{"class":37,"line":38},[35,131501,131276],{"class":48},[35,131503,15906],{"class":359},[35,131505,131506,131508,131510,131512],{"class":37,"line":45},[35,131507,131283],{"class":58},[35,131509,51763],{"class":359},[35,131511,24070],{"class":58},[35,131513,1655],{"class":359},[35,131515,131516],{"class":37,"line":55},[35,131517,1926],{"class":359},[35,131519,131520,131522],{"class":37,"line":65},[35,131521,131298],{"class":48},[35,131523,15906],{"class":359},[35,131525,131526,131528,131530,131532],{"class":37,"line":74},[35,131527,131283],{"class":58},[35,131529,51763],{"class":359},[35,131531,72847],{"class":58},[35,131533,1655],{"class":359},[35,131535,131536],{"class":37,"line":83},[35,131537,1926],{"class":359},[21,131539,131540],{},"优点：没有增加标签，结构更简单",[21,131542,131543],{},"缺点：照顾低版本浏览器",[21,131545,131546],{},"代表网站： 百度、淘宝网、网易等",[21,131548,131549],{},"法四",[21,131551,131552],{},"父级添加双伪元素",[25,131554,131555],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,131556,131557,131563,131573,131577,131583,131593],{"__ignoreMap":30},[35,131558,131559,131561],{"class":37,"line":38},[35,131560,131276],{"class":48},[35,131562,15906],{"class":359},[35,131564,131565,131567,131569,131571],{"class":37,"line":45},[35,131566,131283],{"class":58},[35,131568,51763],{"class":359},[35,131570,24070],{"class":58},[35,131572,1655],{"class":359},[35,131574,131575],{"class":37,"line":55},[35,131576,1926],{"class":359},[35,131578,131579,131581],{"class":37,"line":65},[35,131580,131298],{"class":48},[35,131582,15906],{"class":359},[35,131584,131585,131587,131589,131591],{"class":37,"line":74},[35,131586,131283],{"class":58},[35,131588,51763],{"class":359},[35,131590,72847],{"class":58},[35,131592,1655],{"class":359},[35,131594,131595],{"class":37,"line":83},[35,131596,1926],{"class":359},[21,131598,131599],{},"优点：代码更简洁",[21,131601,131543],{},[21,131603,131604],{},"代表网站：小米、腾讯等",[438,131606,131608],{"id":131607},"_93-ps切图","9.3 PS切图",[465,131610,131612],{"id":131611},"_931-常见图片格式","9.3.1 常见图片格式",[633,131614,131615,131625],{},[636,131616,131617],{},[639,131618,131619,131622],{},[642,131620,131621],{"align":24070},"jpg图像格式",[642,131623,131624],{"align":24070},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[680,131626,131627,131635,131643],{},[639,131628,131629,131632],{},[685,131630,131631],{"align":24070},"gif图像格式",[685,131633,131634],{"align":24070},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[639,131636,131637,131640],{},[685,131638,131639],{"align":24070},"png图像格式",[685,131641,131642],{"align":24070},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[639,131644,131645,131648],{},[685,131646,131647],{"align":24070},"PSD图像格式",[685,131649,131650],{"align":24070},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[465,131652,131654],{"id":131653},"_932-图层切图","9.3.2 图层切图",[21,131656,131657],{},"最简单的切图方式：右击图层 → 导出 → 切片",[21,131659,131660],{},"按住shift选中两个图层->图层菜单->合并图层",[465,131662,131664],{"id":131663},"_933-切片切图","9.3.3 切片切图",[1501,131666,131667,131670],{},[17,131668,131669],{},"利用切片工具手动划出",[17,131671,131672],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[465,131674,131676],{"id":131675},"_934-切图步骤","9.3.4 切图步骤",[21,131678,131679],{},"用切片工具选中：",[1823,131681],{"style":126659,"src":131682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[21,131684,131685],{},"文件 -> 导出",[1823,131687],{"style":126659,"src":131688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[416,131690,131691],{},"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":30,"searchDepth":45,"depth":45,"links":131693},[131694,131703,131707],{"id":130130,"depth":45,"text":130131,"children":131695},[131696,131697,131698,131699,131700,131701,131702],{"id":130155,"depth":55,"text":130156},{"id":130446,"depth":55,"text":130447},{"id":130575,"depth":55,"text":130576},{"id":130775,"depth":55,"text":130776},{"id":130817,"depth":55,"text":130818},{"id":130855,"depth":55,"text":130856},{"id":130945,"depth":55,"text":130946},{"id":131225,"depth":45,"text":131226,"children":131704},[131705,131706],{"id":131229,"depth":55,"text":131230},{"id":131236,"depth":55,"text":131237},{"id":131607,"depth":45,"text":131608,"children":131708},[131709,131710,131711,131712],{"id":131611,"depth":55,"text":131612},{"id":131653,"depth":55,"text":131654},{"id":131663,"depth":55,"text":131664},{"id":131675,"depth":55,"text":131676},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130122,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131719,"title":131720,"body":131721,"description":421,"extension":422,"meta":132362,"navigation":140,"path":132363,"seo":132364,"stem":132365,"__hash__":132366},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131722,"toc":132350},[131723,131726,131730,131756,131790,131794,131798,131801,131843,131850,131860,131868,131870,131873,131876,131879,131886,131900,131904,131907,131936,131940,131943,131957,131961,131964,131992,131996,131999,132025,132029,132034,132067,132072,132100,132104,132121,132167,132172,132216,132233,132340,132348],[10,131724,131720],{"id":131725},"_10-css规范与学成在线案例",[438,131727,131729],{"id":131728},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[14,131731,131732,131738,131744,131750],{},[17,131733,131734,131737],{},[645,131735,131736],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[17,131739,131740,131743],{},[645,131741,131742],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[17,131745,131746,131749],{},[645,131747,131748],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[17,131751,131752,131755],{},[645,131753,131754],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[25,131757,131758],{"className":126803,"code":130167,"language":126805,"meta":30,"style":30},[32,131759,131760,131764,131770,131786],{"__ignoreMap":30},[35,131761,131762],{"class":37,"line":38},[35,131763,130174],{"class":41},[35,131765,131766,131768],{"class":37,"line":45},[35,131767,51937],{"class":51626},[35,131769,15906],{"class":359},[35,131771,131772,131774,131776,131778,131780,131782,131784],{"class":37,"line":55},[35,131773,71221],{"class":58},[35,131775,51763],{"class":359},[35,131777,713],{"class":58},[35,131779,51818],{"class":495},[35,131781,51847],{"class":58},[35,131783,130195],{"class":58},[35,131785,1655],{"class":359},[35,131787,131788],{"class":37,"line":65},[35,131789,1926],{"class":359},[438,131791,131793],{"id":131792},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[465,131795,131797],{"id":131796},"_1021-header头部制作","10.2.1 header头部制作",[1823,131799],{"style":126659,"src":131800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1501,131802,131803,131810,131817,131823,131830,131837],{},[17,131804,131805,131806,131809],{},"1号是版心盒子 ",[645,131807,131808],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[17,131811,131812,131813,131816],{},"版心盒子 里面包含 2号盒子 ",[645,131814,131815],{},"logo"," 图标",[17,131818,131819,131820,131822],{},"版心盒子 里面包含 3号盒子 ",[645,131821,54039],{}," 导航栏",[17,131824,131825,131826,131829],{},"版心盒子 里面包含 4号盒子 ",[645,131827,131828],{},"search"," 搜索框",[17,131831,131832,131833,131836],{},"版心盒子 里面包含 5号盒子 ",[645,131834,131835],{},"user"," 个人信息",[17,131838,131839,131840],{},"注意，要求里面的 ",[645,131841,131842],{},"4个子盒子 必须都浮动",[14,131844,131845],{},[17,131846,131847],{},[645,131848,131849],{},"导航栏注意点:",[21,131851,131852,131853,131856,131857],{},"实际开发中， ",[645,131854,131855],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[645,131858,131859],{},"用 li 包含链接(li+a)的做法",[1501,131861,131862,131865],{},[17,131863,131864],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[17,131866,131867],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[21,131869,9359],{},[21,131871,131872],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[21,131874,131875],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[21,131877,131878],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[14,131880,131881],{"start":45},[17,131882,131883],{},[645,131884,131885],{},"4号盒子search的细节：",[1501,131887,131888,131891,131894],{},[17,131889,131890],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[17,131892,131893],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[17,131895,131896,131899],{},[32,131897,131898],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[465,131901,131903],{"id":131902},"_1022-banner制作","10.2.2 banner制作",[1823,131905],{"style":126659,"src":131906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1501,131908,131909,131916,131922,131929],{},[17,131910,131911,131912,131915],{},"1号盒子是通栏的大盒子 ",[645,131913,131914],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[17,131917,131918,131919,131921],{},"2号盒子是版心 ",[645,131920,1289],{}," ， 要水平居中对齐",[17,131923,131924,131925,131928],{},"3号盒子版心内，左对齐 ",[645,131926,131927],{},"subnav"," 侧导航栏",[17,131930,131931,131932,131935],{},"4号盒子版心内，右对齐 ",[645,131933,131934],{},"course"," 课程",[465,131937,131939],{"id":131938},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1823,131941],{"style":126659,"src":131942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1501,131944,131945,131948,131951,131954],{},[17,131946,131947],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[17,131949,131950],{},"1号盒子是标题 H3 左侧浮动",[17,131952,131953],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[17,131955,131956],{},"3号盒子 右浮动 mod 修改",[465,131958,131960],{"id":131959},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1823,131962],{"style":126659,"src":131963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1501,131965,131966,131972,131979,131986,131989],{},[17,131967,131968,131969,131971],{},"1号盒子为最大的盒子 ",[645,131970,54040],{}," 版心水平居中对齐",[17,131973,131974,131975,131978],{},"2号盒子为上面部分 ",[645,131976,131977],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[17,131980,131981,131982,131985],{},"3号盒子为底下部分 ",[645,131983,131984],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[17,131987,131988],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[17,131990,131991],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[465,131993,131995],{"id":131994},"_1025-底部模块制作","10.2.5 底部模块制作",[1823,131997],{"style":126659,"src":131998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1501,132000,132001,132008,132011,132018],{},[17,132002,132003,132004,132007],{},"1号盒子通栏大盒子 底部 ",[645,132005,132006],{},"footer"," 给高度 底色是白色",[17,132009,132010],{},"2号盒子版心水平居中",[17,132012,132013,132014,132017],{},"3号盒子版权 ",[645,132015,132016],{},"copyright"," 左对齐",[17,132019,132020,132021,132024],{},"4号盒子 链接组 ",[645,132022,132023],{},"links"," 右对齐",[465,132026,132028],{"id":132027},"_1026-代码模块","10.2.6 代码模块",[14,132030,132031],{},[17,132032,132033],{},"html部分",[25,132035,132037],{"className":127550,"code":132036,"language":127552,"meta":30,"style":30},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[32,132038,132039],{"__ignoreMap":30},[35,132040,132041,132043,132045,132047,132049,132052,132055,132057,132060,132063,132065],{"class":37,"line":38},[35,132042,1404],{"class":359},[35,132044,734],{"class":51626},[35,132046,61383],{"class":48},[35,132048,544],{"class":359},[35,132050,132051],{"class":306},"\"https:\u002F\u002Fexample.com\"",[35,132053,132054],{"class":48}," target",[35,132056,544],{"class":359},[35,132058,132059],{"class":306},"\"_blank\"",[35,132061,132062],{"class":359},">链接文字\u003C\u002F",[35,132064,734],{"class":51626},[35,132066,51633],{"class":359},[14,132068,132069],{"start":45},[17,132070,132071],{},"css部分",[25,132073,132074],{"className":127550,"code":132036,"language":127552,"meta":30,"style":30},[32,132075,132076],{"__ignoreMap":30},[35,132077,132078,132080,132082,132084,132086,132088,132090,132092,132094,132096,132098],{"class":37,"line":38},[35,132079,1404],{"class":359},[35,132081,734],{"class":51626},[35,132083,61383],{"class":48},[35,132085,544],{"class":359},[35,132087,132051],{"class":306},[35,132089,132054],{"class":48},[35,132091,544],{"class":359},[35,132093,132059],{"class":306},[35,132095,132062],{"class":359},[35,132097,734],{"class":51626},[35,132099,51633],{"class":359},[465,132101,132103],{"id":132102},"_1027-收获","10.2.7 收获",[14,132105,132106,132109,132112,132115,132118],{},[17,132107,132108],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[17,132110,132111],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[17,132113,132114],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[17,132116,132117],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[17,132119,132120],{},"遗忘代码",[25,132122,132124],{"className":126803,"code":132123,"language":126805,"meta":30,"style":30},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[32,132125,132126,132148,132153,132163],{"__ignoreMap":30},[35,132127,132128,132130,132132,132134,132136,132138,132140,132142,132144,132146],{"class":37,"line":38},[35,132129,51937],{"class":51626},[35,132131,12769],{"class":359},[35,132133,21],{"class":51626},[35,132135,12769],{"class":359},[35,132137,10],{"class":51626},[35,132139,12769],{"class":359},[35,132141,1501],{"class":51626},[35,132143,12769],{"class":359},[35,132145,17],{"class":51626},[35,132147,15906],{"class":359},[35,132149,132150],{"class":37,"line":45},[35,132151,132152],{"class":41},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[35,132154,132155,132157,132159,132161],{"class":37,"line":55},[35,132156,128419],{"class":58},[35,132158,51763],{"class":359},[35,132160,61195],{"class":58},[35,132162,1655],{"class":359},[35,132164,132165],{"class":37,"line":65},[35,132166,1926],{"class":359},[14,132168,132169],{"start":83},[17,132170,132171],{},"html引css的程序",[25,132173,132174],{"className":126803,"code":132123,"language":126805,"meta":30,"style":30},[32,132175,132176,132198,132202,132212],{"__ignoreMap":30},[35,132177,132178,132180,132182,132184,132186,132188,132190,132192,132194,132196],{"class":37,"line":38},[35,132179,51937],{"class":51626},[35,132181,12769],{"class":359},[35,132183,21],{"class":51626},[35,132185,12769],{"class":359},[35,132187,10],{"class":51626},[35,132189,12769],{"class":359},[35,132191,1501],{"class":51626},[35,132193,12769],{"class":359},[35,132195,17],{"class":51626},[35,132197,15906],{"class":359},[35,132199,132200],{"class":37,"line":45},[35,132201,132152],{"class":41},[35,132203,132204,132206,132208,132210],{"class":37,"line":55},[35,132205,128419],{"class":58},[35,132207,51763],{"class":359},[35,132209,61195],{"class":58},[35,132211,1655],{"class":359},[35,132213,132214],{"class":37,"line":65},[35,132215,1926],{"class":359},[14,132217,132218,132221,132224,132227,132230],{"start":92},[17,132219,132220],{},"浮动的盒子不会有外边距合并问题",[17,132222,132223],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[17,132225,132226],{},"ctrl+g快速定位行；shift+alt多个光标",[17,132228,132229],{},"学习上方各个模块的选择器起名方法，以后就这样用",[17,132231,132232],{},"在写选择器时尽量写全一些，例如",[25,132234,132236],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},"\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",[32,132237,132238,132243,132259,132264,132279,132284,132299,132304,132319,132324],{"__ignoreMap":30},[35,132239,132240],{"class":37,"line":38},[35,132241,132242],{"class":41},"\u002F* 静态定位（默认） *\u002F\n",[35,132244,132245,132248,132250,132252,132254,132257],{"class":37,"line":45},[35,132246,132247],{"class":48},".static",[35,132249,80132],{"class":359},[35,132251,129163],{"class":58},[35,132253,51763],{"class":359},[35,132255,132256],{"class":58},"static",[35,132258,129733],{"class":359},[35,132260,132261],{"class":37,"line":55},[35,132262,132263],{"class":41},"\u002F* 相对定位 *\u002F\n",[35,132265,132266,132269,132271,132273,132275,132277],{"class":37,"line":65},[35,132267,132268],{"class":48},".relative",[35,132270,80132],{"class":359},[35,132272,129163],{"class":58},[35,132274,51763],{"class":359},[35,132276,55090],{"class":58},[35,132278,129733],{"class":359},[35,132280,132281],{"class":37,"line":74},[35,132282,132283],{"class":41},"\u002F* 绝对定位 *\u002F\n",[35,132285,132286,132289,132291,132293,132295,132297],{"class":37,"line":83},[35,132287,132288],{"class":48},".absolute",[35,132290,80132],{"class":359},[35,132292,129163],{"class":58},[35,132294,51763],{"class":359},[35,132296,55157],{"class":58},[35,132298,129733],{"class":359},[35,132300,132301],{"class":37,"line":92},[35,132302,132303],{"class":41},"\u002F* 固定定位 *\u002F\n",[35,132305,132306,132309,132311,132313,132315,132317],{"class":37,"line":101},[35,132307,132308],{"class":48},".fixed",[35,132310,80132],{"class":359},[35,132312,129163],{"class":58},[35,132314,51763],{"class":359},[35,132316,86558],{"class":58},[35,132318,129733],{"class":359},[35,132320,132321],{"class":37,"line":110},[35,132322,132323],{"class":41},"\u002F* 粘性定位 *\u002F\n",[35,132325,132326,132329,132331,132333,132335,132338],{"class":37,"line":119},[35,132327,132328],{"class":48},".sticky",[35,132330,80132],{"class":359},[35,132332,129163],{"class":58},[35,132334,51763],{"class":359},[35,132336,132337],{"class":58},"sticky",[35,132339,129733],{"class":359},[14,132341,132342,132345],{"start":137},[17,132343,132344],{},"一定要用好注释",[17,132346,132347],{},"浮动的盒子不会有外边距合并的问题",[416,132349,131691],{},{"title":30,"searchDepth":45,"depth":45,"links":132351},[132352,132353],{"id":131728,"depth":45,"text":131729},{"id":131792,"depth":45,"text":131793,"children":132354},[132355,132356,132357,132358,132359,132360,132361],{"id":131796,"depth":55,"text":131797},{"id":131902,"depth":55,"text":131903},{"id":131938,"depth":55,"text":131939},{"id":131959,"depth":55,"text":131960},{"id":131994,"depth":55,"text":131995},{"id":132027,"depth":55,"text":132028},{"id":132102,"depth":55,"text":132103},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131720,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132368,"title":132369,"body":132370,"description":421,"extension":422,"meta":133856,"navigation":140,"path":133857,"seo":133858,"stem":133859,"__hash__":133860},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132371,"toc":133848},[132372,132375,132379,132383,132394,132398,132415,132459,132492,132495,132512,132515,132518,132562,132566,132570,132573,132576,132580,132583,132594,132657,132698,132701,132716,132770,132778,132781,132792,132846,132872,132875,132888,132942,132974,133028,133051,133105,133108,133111,133118,133172,133193,133247,133250,133253,133338,133346,133403,133426,133430,133433,133451,133455,133474,133528,133566,133570,133573,133576,133598,133602,133610,133613,133618,133629,133632,133636,133650,133694,133697,133701,133704,133709,133735,133740,133817,133820,133824,133827,133830,133833,133836,133839,133842,133845],[10,132373,132369],{"id":132374},"_11-传统布局与定位体系",[438,132376,132378],{"id":132377},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[465,132380,132382],{"id":132381},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1501,132384,132385,132388,132391],{},[17,132386,132387],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[17,132389,132390],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[17,132392,132393],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[465,132395,132397],{"id":132396},"_1112-浮动","11.1.2 浮动",[1501,132399,132400,132403,132406,132409,132412],{},[17,132401,132402],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[17,132404,132405],{},"浮动可以改变元素标签默认的排列方式",[17,132407,132408],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[17,132410,132411],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[17,132413,132414],{},"在使用行内块转换时盒子之间是有空隙的",[25,132416,132417],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,132418,132419,132425,132435,132439,132445,132455],{"__ignoreMap":30},[35,132420,132421,132423],{"class":37,"line":38},[35,132422,131276],{"class":48},[35,132424,15906],{"class":359},[35,132426,132427,132429,132431,132433],{"class":37,"line":45},[35,132428,131283],{"class":58},[35,132430,51763],{"class":359},[35,132432,24070],{"class":58},[35,132434,1655],{"class":359},[35,132436,132437],{"class":37,"line":55},[35,132438,1926],{"class":359},[35,132440,132441,132443],{"class":37,"line":65},[35,132442,131298],{"class":48},[35,132444,15906],{"class":359},[35,132446,132447,132449,132451,132453],{"class":37,"line":74},[35,132448,131283],{"class":58},[35,132450,51763],{"class":359},[35,132452,72847],{"class":58},[35,132454,1655],{"class":359},[35,132456,132457],{"class":37,"line":83},[35,132458,1926],{"class":359},[633,132460,132461,132469],{},[636,132462,132463],{},[639,132464,132465,132467],{},[642,132466,127267],{"align":24070},[642,132468,27817],{"align":24070},[680,132470,132471,132478,132485],{},[639,132472,132473,132475],{},[685,132474,55063],{"align":24070},[685,132476,132477],{"align":24070},"元素不浮动（默认值）",[639,132479,132480,132482],{},[685,132481,24070],{"align":24070},[685,132483,132484],{"align":24070},"元素向左浮动",[639,132486,132487,132489],{},[685,132488,72847],{"align":24070},[685,132490,132491],{"align":24070},"元素向右浮动",[21,132493,132494],{},"浮动重点：",[1501,132496,132497,132500,132503,132506,132509],{},[17,132498,132499],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[17,132501,132502],{},"浮动的元素会一行内显示并且元素顶部对齐",[17,132504,132505],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[17,132507,132508],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[17,132510,132511],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[21,132513,132514],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[21,132516,132517],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[25,132519,132520],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,132521,132522,132528,132538,132542,132548,132558],{"__ignoreMap":30},[35,132523,132524,132526],{"class":37,"line":38},[35,132525,131276],{"class":48},[35,132527,15906],{"class":359},[35,132529,132530,132532,132534,132536],{"class":37,"line":45},[35,132531,131283],{"class":58},[35,132533,51763],{"class":359},[35,132535,24070],{"class":58},[35,132537,1655],{"class":359},[35,132539,132540],{"class":37,"line":55},[35,132541,1926],{"class":359},[35,132543,132544,132546],{"class":37,"line":65},[35,132545,131298],{"class":48},[35,132547,15906],{"class":359},[35,132549,132550,132552,132554,132556],{"class":37,"line":74},[35,132551,131283],{"class":58},[35,132553,51763],{"class":359},[35,132555,72847],{"class":58},[35,132557,1655],{"class":359},[35,132559,132560],{"class":37,"line":83},[35,132561,1926],{"class":359},[465,132563,132565],{"id":132564},"_1113-定位","11.1.3 定位",[22332,132567,132569],{"id":132568},"_11131-使用场景","11.1.3.1 使用场景",[21,132571,132572],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[21,132574,132575],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22332,132577,132579],{"id":132578},"_11132-定位组成","11.1.3.2 定位组成",[21,132581,132582],{},"定位 = 定位模式 + 边偏移",[14,132584,132585],{},[17,132586,132587,132590,132591],{},[645,132588,132589],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[645,132592,132593],{},"定位模式",[25,132595,132597],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[32,132598,132599,132605,132619,132636,132653],{"__ignoreMap":30},[35,132600,132601,132603],{"class":37,"line":38},[35,132602,130651],{"class":48},[35,132604,15906],{"class":359},[35,132606,132607,132610,132612,132614,132616],{"class":37,"line":45},[35,132608,132609],{"class":58},"  position",[35,132611,51763],{"class":359},[35,132613,55090],{"class":58},[35,132615,130666],{"class":359},[35,132617,132618],{"class":41},"\u002F* 定位模式 *\u002F\n",[35,132620,132621,132624,132626,132628,132630,132633],{"class":37,"line":55},[35,132622,132623],{"class":58},"  top",[35,132625,51763],{"class":359},[35,132627,940],{"class":58},[35,132629,51818],{"class":495},[35,132631,132632],{"class":359},";           ",[35,132634,132635],{"class":41},"\u002F* 边偏移：上 *\u002F\n",[35,132637,132638,132641,132643,132645,132647,132650],{"class":37,"line":65},[35,132639,132640],{"class":58},"  left",[35,132642,51763],{"class":359},[35,132644,1194],{"class":58},[35,132646,51818],{"class":495},[35,132648,132649],{"class":359},";          ",[35,132651,132652],{"class":41},"\u002F* 边偏移：左 *\u002F\n",[35,132654,132655],{"class":37,"line":74},[35,132656,1926],{"class":359},[633,132658,132659,132668],{},[636,132660,132661],{},[639,132662,132663,132665],{},[642,132664,648],{"align":24070},[642,132666,132667],{"align":24070},"语义",[680,132669,132670,132677,132684,132691],{},[639,132671,132672,132674],{},[685,132673,132256],{"align":24070},[685,132675,132676],{"align":24070},"静态定位",[639,132678,132679,132681],{},[685,132680,55090],{"align":24070},[685,132682,132683],{"align":24070},"相对定位",[639,132685,132686,132688],{},[685,132687,55157],{"align":24070},[685,132689,132690],{"align":24070},"绝对定位",[639,132692,132693,132695],{},[685,132694,86558],{"align":24070},[685,132696,132697],{"align":24070},"固定定位",[21,132699,132700],{},"（1）静态定位：",[1501,132702,132703,132714],{},[17,132704,132705,132706,132709,132710,132713],{},"静态定位是元素的 ",[645,132707,132708],{},"默认定位方式"," ， ",[645,132711,132712],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[17,132715,5515],{},[25,132717,132718],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,132719,132720,132726,132738,132752,132766],{"__ignoreMap":30},[35,132721,132722,132724],{"class":37,"line":38},[35,132723,130651],{"class":48},[35,132725,15906],{"class":359},[35,132727,132728,132730,132732,132734,132736],{"class":37,"line":45},[35,132729,132609],{"class":58},[35,132731,51763],{"class":359},[35,132733,55090],{"class":58},[35,132735,130666],{"class":359},[35,132737,132618],{"class":41},[35,132739,132740,132742,132744,132746,132748,132750],{"class":37,"line":55},[35,132741,132623],{"class":58},[35,132743,51763],{"class":359},[35,132745,940],{"class":58},[35,132747,51818],{"class":495},[35,132749,132632],{"class":359},[35,132751,132635],{"class":41},[35,132753,132754,132756,132758,132760,132762,132764],{"class":37,"line":65},[35,132755,132640],{"class":58},[35,132757,51763],{"class":359},[35,132759,1194],{"class":58},[35,132761,51818],{"class":495},[35,132763,132649],{"class":359},[35,132765,132652],{"class":41},[35,132767,132768],{"class":37,"line":74},[35,132769,1926],{"class":359},[1501,132771,132772,132775],{},[17,132773,132774],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[17,132776,132777],{},"静态定位在布局时我们几乎不用的",[21,132779,132780],{},"（2）相对定位",[1501,132782,132783,132790],{},[17,132784,132785,132786,132789],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[645,132787,132788],{},"原来的位置"," 来说的（自恋型）",[17,132791,5515],{},[25,132793,132794],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,132795,132796,132802,132814,132828,132842],{"__ignoreMap":30},[35,132797,132798,132800],{"class":37,"line":38},[35,132799,130651],{"class":48},[35,132801,15906],{"class":359},[35,132803,132804,132806,132808,132810,132812],{"class":37,"line":45},[35,132805,132609],{"class":58},[35,132807,51763],{"class":359},[35,132809,55090],{"class":58},[35,132811,130666],{"class":359},[35,132813,132618],{"class":41},[35,132815,132816,132818,132820,132822,132824,132826],{"class":37,"line":55},[35,132817,132623],{"class":58},[35,132819,51763],{"class":359},[35,132821,940],{"class":58},[35,132823,51818],{"class":495},[35,132825,132632],{"class":359},[35,132827,132635],{"class":41},[35,132829,132830,132832,132834,132836,132838,132840],{"class":37,"line":65},[35,132831,132640],{"class":58},[35,132833,51763],{"class":359},[35,132835,1194],{"class":58},[35,132837,51818],{"class":495},[35,132839,132649],{"class":359},[35,132841,132652],{"class":41},[35,132843,132844],{"class":37,"line":74},[35,132845,1926],{"class":359},[1501,132847,132848],{},[17,132849,132850,132851,132853,132854,132856,132857,132860,132861,132864,132865,132867,132868,132871],{},"相对定位的特点：",[54042,132852],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54042,132855],{},"  ② ",[645,132858,132859],{},"原来"," 在标准流的 ",[645,132862,132863],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54042,132866],{},"  ③因此， ",[645,132869,132870],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[21,132873,132874],{},"（3）绝对定位",[1501,132876,132877,132886],{},[17,132878,132879,132881,132882,132885],{},[645,132880,132690],{}," 是元素在移动位置的时候，是相对于它 ",[645,132883,132884],{},"祖先元素"," 来说的（拼爹型）",[17,132887,5515],{},[25,132889,132890],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,132891,132892,132898,132910,132924,132938],{"__ignoreMap":30},[35,132893,132894,132896],{"class":37,"line":38},[35,132895,130651],{"class":48},[35,132897,15906],{"class":359},[35,132899,132900,132902,132904,132906,132908],{"class":37,"line":45},[35,132901,132609],{"class":58},[35,132903,51763],{"class":359},[35,132905,55090],{"class":58},[35,132907,130666],{"class":359},[35,132909,132618],{"class":41},[35,132911,132912,132914,132916,132918,132920,132922],{"class":37,"line":55},[35,132913,132623],{"class":58},[35,132915,51763],{"class":359},[35,132917,940],{"class":58},[35,132919,51818],{"class":495},[35,132921,132632],{"class":359},[35,132923,132635],{"class":41},[35,132925,132926,132928,132930,132932,132934,132936],{"class":37,"line":65},[35,132927,132640],{"class":58},[35,132929,51763],{"class":359},[35,132931,1194],{"class":58},[35,132933,51818],{"class":495},[35,132935,132649],{"class":359},[35,132937,132652],{"class":41},[35,132939,132940],{"class":37,"line":74},[35,132941,1926],{"class":359},[1501,132943,132944,132959,132968,132971],{},[17,132945,132946,132947,132949,132950,132952,132953,132955,132956,132958],{},"绝对定位的特点：",[54042,132948],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54042,132951],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54042,132954],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54042,132957],{},"  (4)固定定位",[17,132960,132961,132963,132964,132967],{},[645,132962,132697],{}," 是元素 ",[645,132965,132966],{},"固定于浏览器可视区的位置"," 。（认死理型）",[17,132969,132970],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[17,132972,132973],{},"语法:",[25,132975,132976],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,132977,132978,132984,132996,133010,133024],{"__ignoreMap":30},[35,132979,132980,132982],{"class":37,"line":38},[35,132981,130651],{"class":48},[35,132983,15906],{"class":359},[35,132985,132986,132988,132990,132992,132994],{"class":37,"line":45},[35,132987,132609],{"class":58},[35,132989,51763],{"class":359},[35,132991,55090],{"class":58},[35,132993,130666],{"class":359},[35,132995,132618],{"class":41},[35,132997,132998,133000,133002,133004,133006,133008],{"class":37,"line":55},[35,132999,132623],{"class":58},[35,133001,51763],{"class":359},[35,133003,940],{"class":58},[35,133005,51818],{"class":495},[35,133007,132632],{"class":359},[35,133009,132635],{"class":41},[35,133011,133012,133014,133016,133018,133020,133022],{"class":37,"line":65},[35,133013,132640],{"class":58},[35,133015,51763],{"class":359},[35,133017,1194],{"class":58},[35,133019,51818],{"class":495},[35,133021,132649],{"class":359},[35,133023,132652],{"class":41},[35,133025,133026],{"class":37,"line":74},[35,133027,1926],{"class":359},[1501,133029,133030,133039],{},[17,133031,133032,133033,133035,133036,133038],{},"特点:",[54042,133034],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54042,133037],{},"  ②固定定位不再占有原先的位置,完全脱标",[17,133040,133041,133042,133044,133045,133047,133048,133050],{},"固定在版心位置的方法:",[54042,133043],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54042,133046],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54042,133049],{},"  实例：",[25,133052,133053],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,133054,133055,133061,133073,133087,133101],{"__ignoreMap":30},[35,133056,133057,133059],{"class":37,"line":38},[35,133058,130651],{"class":48},[35,133060,15906],{"class":359},[35,133062,133063,133065,133067,133069,133071],{"class":37,"line":45},[35,133064,132609],{"class":58},[35,133066,51763],{"class":359},[35,133068,55090],{"class":58},[35,133070,130666],{"class":359},[35,133072,132618],{"class":41},[35,133074,133075,133077,133079,133081,133083,133085],{"class":37,"line":55},[35,133076,132623],{"class":58},[35,133078,51763],{"class":359},[35,133080,940],{"class":58},[35,133082,51818],{"class":495},[35,133084,132632],{"class":359},[35,133086,132635],{"class":41},[35,133088,133089,133091,133093,133095,133097,133099],{"class":37,"line":65},[35,133090,132640],{"class":58},[35,133092,51763],{"class":359},[35,133094,1194],{"class":58},[35,133096,51818],{"class":495},[35,133098,132649],{"class":359},[35,133100,132652],{"class":41},[35,133102,133103],{"class":37,"line":74},[35,133104,1926],{"class":359},[1823,133106],{"style":126659,"src":133107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[21,133109,133110],{},"(5)粘性定位",[1501,133112,133113,133116],{},[17,133114,133115],{},"粘性定位可以被认为是相对定位和固定定位的混合",[17,133117,5515],{},[25,133119,133120],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,133121,133122,133128,133140,133154,133168],{"__ignoreMap":30},[35,133123,133124,133126],{"class":37,"line":38},[35,133125,130651],{"class":48},[35,133127,15906],{"class":359},[35,133129,133130,133132,133134,133136,133138],{"class":37,"line":45},[35,133131,132609],{"class":58},[35,133133,51763],{"class":359},[35,133135,55090],{"class":58},[35,133137,130666],{"class":359},[35,133139,132618],{"class":41},[35,133141,133142,133144,133146,133148,133150,133152],{"class":37,"line":55},[35,133143,132623],{"class":58},[35,133145,51763],{"class":359},[35,133147,940],{"class":58},[35,133149,51818],{"class":495},[35,133151,132632],{"class":359},[35,133153,132635],{"class":41},[35,133155,133156,133158,133160,133162,133164,133166],{"class":37,"line":65},[35,133157,132640],{"class":58},[35,133159,51763],{"class":359},[35,133161,1194],{"class":58},[35,133163,51818],{"class":495},[35,133165,132649],{"class":359},[35,133167,132652],{"class":41},[35,133169,133170],{"class":37,"line":74},[35,133171,1926],{"class":359},[1501,133173,133174],{},[17,133175,133176,133177,133179,133180,133182,133183,133185,133186,133189,133190,133192],{},"粘性定位的特点：",[54042,133178],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54042,133181],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54042,133184],{},"  ③必须添加 top 、left、right、bottom ",[645,133187,133188],{},"其中一个"," 才有效",[54042,133191],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[25,133194,133195],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,133196,133197,133203,133215,133229,133243],{"__ignoreMap":30},[35,133198,133199,133201],{"class":37,"line":38},[35,133200,130651],{"class":48},[35,133202,15906],{"class":359},[35,133204,133205,133207,133209,133211,133213],{"class":37,"line":45},[35,133206,132609],{"class":58},[35,133208,51763],{"class":359},[35,133210,55090],{"class":58},[35,133212,130666],{"class":359},[35,133214,132618],{"class":41},[35,133216,133217,133219,133221,133223,133225,133227],{"class":37,"line":55},[35,133218,132623],{"class":58},[35,133220,51763],{"class":359},[35,133222,940],{"class":58},[35,133224,51818],{"class":495},[35,133226,132632],{"class":359},[35,133228,132635],{"class":41},[35,133230,133231,133233,133235,133237,133239,133241],{"class":37,"line":65},[35,133232,132640],{"class":58},[35,133234,51763],{"class":359},[35,133236,1194],{"class":58},[35,133238,51818],{"class":495},[35,133240,132649],{"class":359},[35,133242,132652],{"class":41},[35,133244,133245],{"class":37,"line":74},[35,133246,1926],{"class":359},[1823,133248],{"style":126659,"src":133249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[21,133251,133252],{},"(6)总结",[633,133254,133255,133270],{},[636,133256,133257],{},[639,133258,133259,133261,133264,133267],{},[642,133260,132593],{"align":24070},[642,133262,133263],{"align":24070},"是否脱标",[642,133265,133266],{"align":24070},"移动位置",[642,133268,133269],{"align":24070},"是否常用",[680,133271,133272,133285,133299,133313,133326],{},[639,133273,133274,133277,133279,133282],{},[685,133275,133276],{"align":24070},"Static 静态定位",[685,133278,105000],{"align":24070},[685,133280,133281],{"align":24070},"不能使用边偏移",[685,133283,133284],{"align":24070},"很少",[639,133286,133287,133290,133293,133296],{},[685,133288,133289],{"align":24070},"Relative 相对定位",[685,133291,133292],{"align":24070},"否(占有位置)",[685,133294,133295],{"align":24070},"相对于自身位置移动",[685,133297,133298],{"align":24070},"基本单独使用",[639,133300,133301,133304,133307,133310],{},[685,133302,133303],{"align":24070},"Absolute 绝对定位",[685,133305,133306],{"align":24070},"是(不占有位置)",[685,133308,133309],{"align":24070},"带有定位的父级",[685,133311,133312],{"align":24070},"要和定位父级元素搭配使用",[639,133314,133315,133318,133320,133323],{},[685,133316,133317],{"align":24070},"Fixed 固定定位",[685,133319,133306],{"align":24070},[685,133321,133322],{"align":24070},"浏览器可视区",[685,133324,133325],{"align":24070},"单独使用,不需要父级",[639,133327,133328,133331,133333,133335],{},[685,133329,133330],{"align":24070},"Sticky 粘性定位",[685,133332,133292],{"align":24070},[685,133334,133322],{"align":24070},[685,133336,133337],{"align":24070},"当前阶段少",[14,133339,133340],{"start":45},[17,133341,133342,133345],{},[645,133343,133344],{},"边偏移"," 则决定了该元素的最终位置",[633,133347,133348,133359],{},[636,133349,133350],{},[639,133351,133352,133355,133357],{},[642,133353,133354],{"align":24070},"边偏移属性",[642,133356,27820],{"align":24070},[642,133358,27817],{"align":24070},[680,133360,133361,133372,133383,133393],{},[639,133362,133363,133366,133369],{},[685,133364,133365],{"align":24070},"top",[685,133367,133368],{"align":24070},"top: 80px;",[685,133370,133371],{"align":24070},"顶端偏移量，定义元素相对于父元素上边线的距离",[639,133373,133374,133377,133380],{},[685,133375,133376],{"align":24070},"bottom",[685,133378,133379],{"align":24070},"bottom: 80px ;",[685,133381,133382],{"align":24070},"底部偏移量，定义元素相对于其父元素下边线的距离",[639,133384,133385,133387,133390],{},[685,133386,24070],{"align":24070},[685,133388,133389],{"align":24070},"left: 80px ;",[685,133391,133392],{"align":24070},"左侧偏移量，定义元素相对于其父元素左边线的距离",[639,133394,133395,133397,133400],{},[685,133396,72847],{"align":24070},[685,133398,133399],{"align":24070},"right: 80px ;",[685,133401,133402],{"align":24070},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1501,133404,133405],{},[17,133406,9359,133407,133409,133410,133412,133413,133415,133416,133419,133420,133422,133423,133425],{},[54042,133408],{},"  ① ",[645,133411,133344],{}," 需要和 ",[645,133414,132593],{}," 联合使用， ",[645,133417,133418],{},"单独使用无效"," ；",[54042,133421],{},"  ②top和bottom不要同时使用",[54042,133424],{},"  ③left和right不要同时使用",[22332,133427,133429],{"id":133428},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[21,133431,133432],{},"子级是绝对定位的话，父级要用相对定位",[1501,133434,133435,133438,133441,133444],{},[17,133436,133437],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[17,133439,133440],{},"父盒子需要加定位限制子盒子在父盒子内显示",[17,133442,133443],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[17,133445,133446,133447,133450],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[645,133448,133449],{},"子绝父绝"," 也会遇到",[22332,133452,133454],{"id":133453},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1501,133456,133457,133472],{},[17,133458,133459,133460,133463,133464,133467,133468,133471],{},"在使用 ",[645,133461,133462],{},"定位"," 布局时，可能会 ",[645,133465,133466],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[645,133469,133470],{},"z-index"," 来控制盒子的前后次序 (z轴)",[17,133473,5515],{},[25,133475,133476],{"className":126803,"code":132596,"language":126805,"meta":30,"style":30},[32,133477,133478,133484,133496,133510,133524],{"__ignoreMap":30},[35,133479,133480,133482],{"class":37,"line":38},[35,133481,130651],{"class":48},[35,133483,15906],{"class":359},[35,133485,133486,133488,133490,133492,133494],{"class":37,"line":45},[35,133487,132609],{"class":58},[35,133489,51763],{"class":359},[35,133491,55090],{"class":58},[35,133493,130666],{"class":359},[35,133495,132618],{"class":41},[35,133497,133498,133500,133502,133504,133506,133508],{"class":37,"line":55},[35,133499,132623],{"class":58},[35,133501,51763],{"class":359},[35,133503,940],{"class":58},[35,133505,51818],{"class":495},[35,133507,132632],{"class":359},[35,133509,132635],{"class":41},[35,133511,133512,133514,133516,133518,133520,133522],{"class":37,"line":65},[35,133513,132640],{"class":58},[35,133515,51763],{"class":359},[35,133517,1194],{"class":58},[35,133519,51818],{"class":495},[35,133521,132649],{"class":359},[35,133523,132652],{"class":41},[35,133525,133526],{"class":37,"line":74},[35,133527,1926],{"class":359},[1501,133529,133530],{},[17,133531,133532,133533,133409,133535,133537,133538,127966,133541,82864,133544,133546,133547,133549,133550,133553,133554,133419,133557,133559,133560,133563,133565],{},"z-index的特性",[54042,133534],{},[645,133536,127267],{}," ： ",[645,133539,133540],{},"正整数",[645,133542,133543],{},"负整数",[645,133545,687],{}," ，默认值是 0，数值越大，盒子越靠上；",[54042,133548],{},"  ②如果 ",[645,133551,133552],{},"属性值相同"," ，则按照书写顺序， ",[645,133555,133556],{},"后来居上",[54042,133558],{},"  ③数字后面 ",[645,133561,133562],{},"不能加单位",[54042,133564],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22332,133567,133569],{"id":133568},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[21,133571,133572],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[21,133574,133575],{},"方法:",[1501,133577,133578,133588],{},[17,133579,133580,133581,133584,133585],{},"left: 50%; 让 ",[645,133582,133583],{},"盒子的左侧"," 移动到 ",[645,133586,133587],{},"父级元素的水平中心位置",[17,133589,133590,133591,133594,133595],{},"margin-left: -100px; 让盒子 ",[645,133592,133593],{},"向左"," 移动 ",[645,133596,133597],{},"自身宽度的一半",[22332,133599,133601],{"id":133600},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[14,133603,133604,133607],{},[17,133605,133606],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[17,133608,133609],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[21,133611,133612],{},"也就是说绝对定位和固定定位和浮动类似",[14,133614,133615],{"start":55},[17,133616,133617],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1501,133619,133620,133623,133626],{},[17,133621,133622],{},"可以用inline-block 转换为行内块",[17,133624,133625],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[17,133627,133628],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[21,133630,133631],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22332,133633,133635],{"id":133634},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[14,133637,133638,133641,133644,133647],{},[17,133639,133640],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[17,133642,133643],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[17,133645,133646],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[17,133648,133649],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[25,133651,133652],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,133653,133654,133660,133670,133674,133680,133690],{"__ignoreMap":30},[35,133655,133656,133658],{"class":37,"line":38},[35,133657,131276],{"class":48},[35,133659,15906],{"class":359},[35,133661,133662,133664,133666,133668],{"class":37,"line":45},[35,133663,131283],{"class":58},[35,133665,51763],{"class":359},[35,133667,24070],{"class":58},[35,133669,1655],{"class":359},[35,133671,133672],{"class":37,"line":55},[35,133673,1926],{"class":359},[35,133675,133676,133678],{"class":37,"line":65},[35,133677,131298],{"class":48},[35,133679,15906],{"class":359},[35,133681,133682,133684,133686,133688],{"class":37,"line":74},[35,133683,131283],{"class":58},[35,133685,51763],{"class":359},[35,133687,72847],{"class":58},[35,133689,1655],{"class":359},[35,133691,133692],{"class":37,"line":83},[35,133693,1926],{"class":359},[1823,133695],{"style":126659,"src":133696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22332,133698,133700],{"id":133699},"_11138-轮播图","11.1.3.8 轮播图",[1823,133702],{"style":126659,"src":133703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[14,133705,133706],{},[17,133707,133708],{},"制作顺序:",[1501,133710,133711,133714,133717,133726],{},[17,133712,133713],{},"大盒子我们类名为： tb-promo 淘宝广告",[17,133715,133716],{},"里面先放一张图片",[17,133718,133719,133720,133722,133723,133725],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54042,133721],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54042,133724],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[17,133727,133728,133729,133731,133732,133734],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54042,133730],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54042,133733],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[14,133736,133737],{"start":45},[17,133738,133739],{},"代码模块",[25,133741,133743],{"className":126803,"code":133742,"language":126805,"meta":30,"style":30},"\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",[32,133744,133745,133750,133757,133767,133777,133787,133791,133796,133803,133813],{"__ignoreMap":30},[35,133746,133747],{"class":37,"line":38},[35,133748,133749],{"class":41},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[35,133751,133752,133755],{"class":37,"line":45},[35,133753,133754],{"class":48},".son",[35,133756,15906],{"class":359},[35,133758,133759,133761,133763,133765],{"class":37,"line":55},[35,133760,132609],{"class":58},[35,133762,51763],{"class":359},[35,133764,55157],{"class":58},[35,133766,1655],{"class":359},[35,133768,133769,133771,133773,133775],{"class":37,"line":65},[35,133770,132623],{"class":58},[35,133772,51763],{"class":359},[35,133774,687],{"class":58},[35,133776,1655],{"class":359},[35,133778,133779,133781,133783,133785],{"class":37,"line":74},[35,133780,132640],{"class":58},[35,133782,51763],{"class":359},[35,133784,687],{"class":58},[35,133786,1655],{"class":359},[35,133788,133789],{"class":37,"line":83},[35,133790,1926],{"class":359},[35,133792,133793],{"class":37,"line":92},[35,133794,133795],{"class":41},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[35,133797,133798,133801],{"class":37,"line":101},[35,133799,133800],{"class":48},".father",[35,133802,15906],{"class":359},[35,133804,133805,133807,133809,133811],{"class":37,"line":110},[35,133806,132609],{"class":58},[35,133808,51763],{"class":359},[35,133810,55090],{"class":58},[35,133812,1655],{"class":359},[35,133814,133815],{"class":37,"line":119},[35,133816,1926],{"class":359},[21,133818,133819],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[465,133821,133823],{"id":133822},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1823,133825],{"style":126659,"src":133826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[21,133828,133829],{},"✨ 黄金口诀：",[21,133831,133832],{},"\"TOP正下负上，LEFT正右负左\"",[21,133834,133835],{},"\"RIGHT正左负右，BOTTOM正上负下",[21,133837,133838],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[21,133840,133841],{},"✨ 简单记：",[21,133843,133844],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[416,133846,133847],{},"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":30,"searchDepth":45,"depth":45,"links":133849},[133850],{"id":132377,"depth":45,"text":132378,"children":133851},[133852,133853,133854,133855],{"id":132381,"depth":55,"text":132382},{"id":132396,"depth":55,"text":132397},{"id":132564,"depth":55,"text":132565},{"id":133822,"depth":55,"text":133823},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132369,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133862,"title":133863,"body":133864,"description":421,"extension":422,"meta":135287,"navigation":140,"path":135288,"seo":135289,"stem":135290,"__hash__":135291},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133865,"toc":135266},[133866,133869,133873,133881,133885,133890,133898,133910,133914,133919,133927,133938,133942,133947,133988,133996,134000,134003,134006,134009,134103,134106,134200,134203,134297,134300,134303,134338,134341,134344,134374,134377,134380,134383,134386,134389,134392,134395,134465,134468,134472,134476,134517,134521,134527,134530,134533,134537,134540,134543,134546,134627,134630,134633,134637,134641,134644,134647,134650,134653,134656,134662,134671,134675,134694,134698,134708,134711,134714,134717,134720,134723,134726,134729,134732,134741,134745,134754,134757,134762,134815,134820,134986,134989,134992,134997,135000,135003,135006,135009,135014,135162,135165,135168,135173,135176,135181,135215,135218,135221,135225,135228,135235,135238,135241,135244,135247,135250,135253,135256,135260,135263],[10,133867,133863],{"id":133868},"_12-显示隐藏与图形资源",[438,133870,133872],{"id":133871},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1501,133874,133875,133878],{},[17,133876,133877],{},"目的:让一个元素在页面中消失或者显示出来",[17,133879,133880],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[465,133882,133884],{"id":133883},"_1211-display-显示","12.1.1 display 显示",[14,133886,133887],{},[17,133888,133889],{},"display 设置或检索对象是否及如何显示",[1501,133891,133892,133895],{},[17,133893,133894],{},"display: none;隐藏对象",[17,133896,133897],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[14,133899,133900,133907],{"start":45},[17,133901,133902,133903,133906],{},"特点： display 隐藏元素后， ",[645,133904,133905],{},"不再占"," 有原来的位置",[17,133908,133909],{},"在js中使用非常的广泛",[465,133911,133913],{"id":133912},"_1212-visibility可见性","12.1.2 visibility可见性",[14,133915,133916],{},[17,133917,133918],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1501,133920,133921,133924],{},[17,133922,133923],{},"visibility： visible；元素可见",[17,133925,133926],{},"visibility：hidden；元素隐藏",[14,133928,133929,133932,133935],{"start":45},[17,133930,133931],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[17,133933,133934],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[17,133936,133937],{},"隐藏后继续占有原有位置",[465,133939,133941],{"id":133940},"_1213-overflow溢出","12.1.3 overflow溢出",[1501,133943,133944],{},[17,133945,133946],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[633,133948,133949,133957],{},[636,133950,133951],{},[639,133952,133953,133955],{},[642,133954,127267],{"align":24070},[642,133956,27817],{"align":24070},[680,133958,133959,133967,133974,133981],{},[639,133960,133961,133964],{},[685,133962,133963],{"align":24070},"visible",[685,133965,133966],{"align":24070},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[639,133968,133969,133971],{},[685,133970,62040],{"align":24070},[685,133972,133973],{"align":24070},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[639,133975,133976,133978],{},[685,133977,129223],{"align":24070},[685,133979,133980],{"align":24070},"不管超出内容否，总是显示滚动条",[639,133982,133983,133985],{},[685,133984,72988],{"align":24070},[685,133986,133987],{"align":24070},"超出自动显示滚动条，不超出不显示滚动条",[1501,133989,133990,133993],{},[17,133991,133992],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[17,133994,133995],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[465,133997,133999],{"id":133998},"_1214-案例收获","12.1.4 案例收获",[1823,134001],{"style":126659,"src":134002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[21,134004,134005],{},"问题：没做出来动态效果，使用hover没实现",[21,134007,134008],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[25,134010,134011],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,134012,134013,134017,134031,134035,134049,134053,134067,134071,134085,134089],{"__ignoreMap":30},[35,134014,134015],{"class":37,"line":38},[35,134016,132242],{"class":41},[35,134018,134019,134021,134023,134025,134027,134029],{"class":37,"line":45},[35,134020,132247],{"class":48},[35,134022,80132],{"class":359},[35,134024,129163],{"class":58},[35,134026,51763],{"class":359},[35,134028,132256],{"class":58},[35,134030,129733],{"class":359},[35,134032,134033],{"class":37,"line":55},[35,134034,132263],{"class":41},[35,134036,134037,134039,134041,134043,134045,134047],{"class":37,"line":65},[35,134038,132268],{"class":48},[35,134040,80132],{"class":359},[35,134042,129163],{"class":58},[35,134044,51763],{"class":359},[35,134046,55090],{"class":58},[35,134048,129733],{"class":359},[35,134050,134051],{"class":37,"line":74},[35,134052,132283],{"class":41},[35,134054,134055,134057,134059,134061,134063,134065],{"class":37,"line":83},[35,134056,132288],{"class":48},[35,134058,80132],{"class":359},[35,134060,129163],{"class":58},[35,134062,51763],{"class":359},[35,134064,55157],{"class":58},[35,134066,129733],{"class":359},[35,134068,134069],{"class":37,"line":92},[35,134070,132303],{"class":41},[35,134072,134073,134075,134077,134079,134081,134083],{"class":37,"line":101},[35,134074,132308],{"class":48},[35,134076,80132],{"class":359},[35,134078,129163],{"class":58},[35,134080,51763],{"class":359},[35,134082,86558],{"class":58},[35,134084,129733],{"class":359},[35,134086,134087],{"class":37,"line":110},[35,134088,132323],{"class":41},[35,134090,134091,134093,134095,134097,134099,134101],{"class":37,"line":119},[35,134092,132328],{"class":48},[35,134094,80132],{"class":359},[35,134096,129163],{"class":58},[35,134098,51763],{"class":359},[35,134100,132337],{"class":58},[35,134102,129733],{"class":359},[21,134104,134105],{},"完整代码：",[25,134107,134108],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,134109,134110,134114,134128,134132,134146,134150,134164,134168,134182,134186],{"__ignoreMap":30},[35,134111,134112],{"class":37,"line":38},[35,134113,132242],{"class":41},[35,134115,134116,134118,134120,134122,134124,134126],{"class":37,"line":45},[35,134117,132247],{"class":48},[35,134119,80132],{"class":359},[35,134121,129163],{"class":58},[35,134123,51763],{"class":359},[35,134125,132256],{"class":58},[35,134127,129733],{"class":359},[35,134129,134130],{"class":37,"line":55},[35,134131,132263],{"class":41},[35,134133,134134,134136,134138,134140,134142,134144],{"class":37,"line":65},[35,134135,132268],{"class":48},[35,134137,80132],{"class":359},[35,134139,129163],{"class":58},[35,134141,51763],{"class":359},[35,134143,55090],{"class":58},[35,134145,129733],{"class":359},[35,134147,134148],{"class":37,"line":74},[35,134149,132283],{"class":41},[35,134151,134152,134154,134156,134158,134160,134162],{"class":37,"line":83},[35,134153,132288],{"class":48},[35,134155,80132],{"class":359},[35,134157,129163],{"class":58},[35,134159,51763],{"class":359},[35,134161,55157],{"class":58},[35,134163,129733],{"class":359},[35,134165,134166],{"class":37,"line":92},[35,134167,132303],{"class":41},[35,134169,134170,134172,134174,134176,134178,134180],{"class":37,"line":101},[35,134171,132308],{"class":48},[35,134173,80132],{"class":359},[35,134175,129163],{"class":58},[35,134177,51763],{"class":359},[35,134179,86558],{"class":58},[35,134181,129733],{"class":359},[35,134183,134184],{"class":37,"line":110},[35,134185,132323],{"class":41},[35,134187,134188,134190,134192,134194,134196,134198],{"class":37,"line":119},[35,134189,132328],{"class":48},[35,134191,80132],{"class":359},[35,134193,129163],{"class":58},[35,134195,51763],{"class":359},[35,134197,132337],{"class":58},[35,134199,129733],{"class":359},[21,134201,134202],{},"分布思路重点详解：",[25,134204,134205],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,134206,134207,134211,134225,134229,134243,134247,134261,134265,134279,134283],{"__ignoreMap":30},[35,134208,134209],{"class":37,"line":38},[35,134210,132242],{"class":41},[35,134212,134213,134215,134217,134219,134221,134223],{"class":37,"line":45},[35,134214,132247],{"class":48},[35,134216,80132],{"class":359},[35,134218,129163],{"class":58},[35,134220,51763],{"class":359},[35,134222,132256],{"class":58},[35,134224,129733],{"class":359},[35,134226,134227],{"class":37,"line":55},[35,134228,132263],{"class":41},[35,134230,134231,134233,134235,134237,134239,134241],{"class":37,"line":65},[35,134232,132268],{"class":48},[35,134234,80132],{"class":359},[35,134236,129163],{"class":58},[35,134238,51763],{"class":359},[35,134240,55090],{"class":58},[35,134242,129733],{"class":359},[35,134244,134245],{"class":37,"line":74},[35,134246,132283],{"class":41},[35,134248,134249,134251,134253,134255,134257,134259],{"class":37,"line":83},[35,134250,132288],{"class":48},[35,134252,80132],{"class":359},[35,134254,129163],{"class":58},[35,134256,51763],{"class":359},[35,134258,55157],{"class":58},[35,134260,129733],{"class":359},[35,134262,134263],{"class":37,"line":92},[35,134264,132303],{"class":41},[35,134266,134267,134269,134271,134273,134275,134277],{"class":37,"line":101},[35,134268,132308],{"class":48},[35,134270,80132],{"class":359},[35,134272,129163],{"class":58},[35,134274,51763],{"class":359},[35,134276,86558],{"class":58},[35,134278,129733],{"class":359},[35,134280,134281],{"class":37,"line":110},[35,134282,132323],{"class":41},[35,134284,134285,134287,134289,134291,134293,134295],{"class":37,"line":119},[35,134286,132328],{"class":48},[35,134288,80132],{"class":359},[35,134290,129163],{"class":58},[35,134292,51763],{"class":359},[35,134294,132337],{"class":58},[35,134296,129733],{"class":359},[1823,134298],{"style":126659,"src":134299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[21,134301,134302],{},"图片太大，盒子太小，此时需要修改图片的大小",[25,134304,134306],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[32,134307,134308],{"__ignoreMap":30},[35,134309,134310,134312,134314,134316,134318,134321,134323,134325,134328,134331,134333,134336],{"class":37,"line":38},[35,134311,1404],{"class":359},[35,134313,1823],{"class":51626},[35,134315,55565],{"class":48},[35,134317,544],{"class":359},[35,134319,134320],{"class":306},"\"images\u002Fpic.jpg\"",[35,134322,55573],{"class":48},[35,134324,544],{"class":359},[35,134326,134327],{"class":306},"\"描述文字\"",[35,134329,134330],{"class":48}," title",[35,134332,544],{"class":359},[35,134334,134335],{"class":306},"\"悬停提示\"",[35,134337,51633],{"class":359},[1823,134339],{"style":126659,"src":134340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[21,134342,134343],{},"制造遮罩层",[25,134345,134346],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,134347,134348],{"__ignoreMap":30},[35,134349,134350,134352,134354,134356,134358,134360,134362,134364,134366,134368,134370,134372],{"class":37,"line":38},[35,134351,1404],{"class":359},[35,134353,1823],{"class":51626},[35,134355,55565],{"class":48},[35,134357,544],{"class":359},[35,134359,134320],{"class":306},[35,134361,55573],{"class":48},[35,134363,544],{"class":359},[35,134365,134327],{"class":306},[35,134367,134330],{"class":48},[35,134369,544],{"class":359},[35,134371,134335],{"class":306},[35,134373,51633],{"class":359},[21,134375,134376],{},"此时是这样的为标准流",[1823,134378],{"style":126659,"src":134379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[21,134381,134382],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[21,134384,134385],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[21,134387,134388],{},"让他在中间，用center(background-position)",[21,134390,134391],{},"将需要变的尽可能放到一个盒子中",[21,134393,134394],{},"放大盒子上内部盒子发生变化",[25,134396,134398],{"className":126803,"code":134397,"language":126805,"meta":30,"style":30},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[32,134399,134400,134406,134416,134420,134427,134437,134449,134461],{"__ignoreMap":30},[35,134401,134402,134404],{"class":37,"line":38},[35,134403,127870],{"class":48},[35,134405,15906],{"class":359},[35,134407,134408,134410,134412,134414],{"class":37,"line":45},[35,134409,132609],{"class":58},[35,134411,51763],{"class":359},[35,134413,55090],{"class":58},[35,134415,1655],{"class":359},[35,134417,134418],{"class":37,"line":55},[35,134419,1926],{"class":359},[35,134421,134422,134425],{"class":37,"line":65},[35,134423,134424],{"class":48},".child",[35,134426,15906],{"class":359},[35,134428,134429,134431,134433,134435],{"class":37,"line":74},[35,134430,132609],{"class":58},[35,134432,51763],{"class":359},[35,134434,55157],{"class":58},[35,134436,1655],{"class":359},[35,134438,134439,134441,134443,134445,134447],{"class":37,"line":83},[35,134440,132623],{"class":58},[35,134442,51763],{"class":359},[35,134444,1150],{"class":58},[35,134446,823],{"class":495},[35,134448,1655],{"class":359},[35,134450,134451,134453,134455,134457,134459],{"class":37,"line":92},[35,134452,132640],{"class":58},[35,134454,51763],{"class":359},[35,134456,1150],{"class":58},[35,134458,823],{"class":495},[35,134460,1655],{"class":359},[35,134462,134463],{"class":37,"line":101},[35,134464,1926],{"class":359},[21,134466,134467],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[438,134469,134471],{"id":134470},"_122-精灵图","12.2 精灵图",[465,134473,134475],{"id":134474},"_1221-理解","12.2.1 理解",[14,134477,134478,134496],{},[17,134479,134480,134481,132709,134484,134487,134488,134491,134492,134495],{},"目的： ",[645,134482,134483],{},"为了有效地减少服务器接收和发送请求的次数",[645,134485,134486],{},"提高"," 页面的 ",[645,134489,134490],{},"加载速度"," ，出现了 ",[645,134493,134494],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[17,134497,134498,134499,134501,134502,134504,134505,134507,134508,134510,134511,134513,134514,134516],{},"使用精灵图核心：",[54042,134500],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54042,134503],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54042,134506],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54042,134509],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54042,134512],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54042,134515],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[465,134518,134520],{"id":134519},"_1222-扒图","12.2.2 扒图",[25,134522,134525],{"className":134523,"code":134524,"language":5521},[5519],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[32,134526,134524],{"__ignoreMap":30},[1823,134528],{"style":126659,"src":134529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1823,134531],{"style":126659,"src":134532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[465,134534,134536],{"id":134535},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1823,134538],{"style":126659,"src":134539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[21,134541,134542],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1823,134544],{"style":126659,"src":134545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[25,134547,134549],{"className":126803,"code":134548,"language":126805,"meta":30,"style":30},"\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",[32,134550,134551,134556,134563,134575,134587,134606,134623],{"__ignoreMap":30},[35,134552,134553],{"class":37,"line":38},[35,134554,134555],{"class":41},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[35,134557,134558,134561],{"class":37,"line":45},[35,134559,134560],{"class":48},".icon",[35,134562,15906],{"class":359},[35,134564,134565,134567,134569,134571,134573],{"class":37,"line":55},[35,134566,70893],{"class":58},[35,134568,51763],{"class":359},[35,134570,1194],{"class":58},[35,134572,51818],{"class":495},[35,134574,1655],{"class":359},[35,134576,134577,134579,134581,134583,134585],{"class":37,"line":65},[35,134578,71113],{"class":58},[35,134580,51763],{"class":359},[35,134582,1194],{"class":58},[35,134584,51818],{"class":495},[35,134586,1655],{"class":359},[35,134588,134589,134591,134593,134595,134597,134600,134602,134604],{"class":37,"line":74},[35,134590,70936],{"class":58},[35,134592,51763],{"class":359},[35,134594,62052],{"class":58},[35,134596,499],{"class":359},[35,134598,134599],{"class":5550},"sprites.png",[35,134601,14048],{"class":359},[35,134603,62062],{"class":58},[35,134605,1655],{"class":359},[35,134607,134608,134610,134612,134614,134616,134619,134621],{"class":37,"line":83},[35,134609,129063],{"class":58},[35,134611,51763],{"class":359},[35,134613,52089],{"class":58},[35,134615,51818],{"class":495},[35,134617,134618],{"class":58}," -20",[35,134620,51818],{"class":495},[35,134622,1655],{"class":359},[35,134624,134625],{"class":37,"line":92},[35,134626,1926],{"class":359},[1823,134628],{"style":126659,"src":134629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[21,134631,134632],{},"在前端中坐标轴的正方向是右和下",[438,134634,134636],{"id":134635},"_123-字体图标","12.3 字体图标",[465,134638,134640],{"id":134639},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[21,134642,134643],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[21,134645,134646],{},"精灵图是有诸多优点的，但是缺点很明显。",[21,134648,134649],{},"1.图片文件还是比较大的。",[21,134651,134652],{},"2.图片本身放大和缩小会失真。",[21,134654,134655],{},"3.一旦图片制作完毕想要更换非常复杂。",[21,134657,134658,134659,26071],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[645,134660,134661],{},"字体图标 iconfont",[21,134663,134664,134667,134668,28711],{},[645,134665,134666],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[645,134669,134670],{},"展示的是图标，本质属于字体",[465,134672,134674],{"id":134673},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1501,134676,134677,134682,134685,134688,134691],{},[17,134678,134679,134681],{},[645,134680,26207],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[17,134683,134684],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[17,134686,134687],{},"兼容性：几乎支持所有的浏览器，请放心使用",[17,134689,134690],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[17,134692,134693],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[465,134695,134697],{"id":134696},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1501,134699,134700],{},[17,134701,134702,134703],{},"icomoon字体库：",[734,134704,134707],{"href":134705,"rel":134706},"http:\u002F\u002Ficomoon.io\u002F",[24198],"http:\u002F\u002Ficomoon.io",[21,134709,134710],{},"进去之后点icomoon app",[1823,134712],{"style":126659,"src":134713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[21,134715,134716],{},"可以对其编辑：",[1823,134718],{"style":126659,"src":134719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[21,134721,134722],{},"生成字体：",[1823,134724],{"style":126659,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[21,134727,134728],{},"下载：",[1823,134730],{"style":126659,"src":134731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1501,134733,134734],{},[17,134735,134736,134737],{},"阿里iconfont字体库： ",[734,134738,134739],{"href":134739,"rel":134740},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24198],[465,134742,134744],{"id":134743},"_1234-字体图标的引入","12.3.4 字体图标的引入",[14,134746,134747],{},[17,134748,134749,134750,134753],{},"把下载包里面的 ",[645,134751,134752],{},"fonts"," 文件夹放入页面根目录下",[1823,134755],{"style":126659,"src":134756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[14,134758,134759],{"start":45},[17,134760,134761],{},"字体文件格式",[633,134763,134764,134773],{},[636,134765,134766],{},[639,134767,134768,134771],{},[642,134769,134770],{"align":24070},"格式",[642,134772,24074],{"align":24070},[680,134774,134775,134785,134795,134805],{},[639,134776,134777,134782],{},[685,134778,134779],{"align":24070},[645,134780,134781],{},".ttf",[685,134783,134784],{"align":24070},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[639,134786,134787,134792],{},[685,134788,134789],{"align":24070},[645,134790,134791],{},".woff",[685,134793,134794],{"align":24070},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[639,134796,134797,134802],{},[685,134798,134799],{"align":24070},[645,134800,134801],{},".eot",[685,134803,134804],{"align":24070},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[639,134806,134807,134812],{},[685,134808,134809],{"align":24070},[645,134810,134811],{},"svg",[685,134813,134814],{"align":24070},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[14,134816,134817],{"start":55},[17,134818,134819],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[25,134821,134823],{"className":126803,"code":134822,"language":126805,"meta":30,"style":30},"\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",[32,134824,134825,134830,134837,134849,134865,134890,134911,134931,134951,134955,134961,134971,134982],{"__ignoreMap":30},[35,134826,134827],{"class":37,"line":38},[35,134828,134829],{"class":41},"\u002F* 引入字体图标 *\u002F\n",[35,134831,134832,134835],{"class":37,"line":45},[35,134833,134834],{"class":495},"@font-face",[35,134836,15906],{"class":359},[35,134838,134839,134842,134844,134847],{"class":37,"line":55},[35,134840,134841],{"class":58},"  font-family",[35,134843,51763],{"class":359},[35,134845,134846],{"class":306},"'icomoon'",[35,134848,1655],{"class":359},[35,134850,134851,134854,134856,134858,134860,134863],{"class":37,"line":65},[35,134852,134853],{"class":58},"  src",[35,134855,51763],{"class":359},[35,134857,62052],{"class":58},[35,134859,499],{"class":359},[35,134861,134862],{"class":306},"'fonts\u002Ficomoon.eot'",[35,134864,3053],{"class":359},[35,134866,134867,134869,134871,134873,134875,134878,134880,134883,134885,134888],{"class":37,"line":74},[35,134868,134853],{"class":58},[35,134870,51763],{"class":359},[35,134872,62052],{"class":58},[35,134874,499],{"class":359},[35,134876,134877],{"class":306},"'fonts\u002Ficomoon.eot?#iefix'",[35,134879,14048],{"class":359},[35,134881,134882],{"class":58},"format",[35,134884,499],{"class":359},[35,134886,134887],{"class":306},"'embedded-opentype'",[35,134889,38373],{"class":359},[35,134891,134892,134895,134897,134900,134902,134904,134906,134909],{"class":37,"line":83},[35,134893,134894],{"class":58},"       url",[35,134896,499],{"class":359},[35,134898,134899],{"class":306},"'fonts\u002Ficomoon.woff'",[35,134901,14048],{"class":359},[35,134903,134882],{"class":58},[35,134905,499],{"class":359},[35,134907,134908],{"class":306},"'woff'",[35,134910,38373],{"class":359},[35,134912,134913,134915,134917,134920,134922,134924,134926,134929],{"class":37,"line":92},[35,134914,134894],{"class":58},[35,134916,499],{"class":359},[35,134918,134919],{"class":306},"'fonts\u002Ficomoon.ttf'",[35,134921,14048],{"class":359},[35,134923,134882],{"class":58},[35,134925,499],{"class":359},[35,134927,134928],{"class":306},"'truetype'",[35,134930,38373],{"class":359},[35,134932,134933,134935,134937,134940,134942,134944,134946,134949],{"class":37,"line":101},[35,134934,134894],{"class":58},[35,134936,499],{"class":359},[35,134938,134939],{"class":306},"'fonts\u002Ficomoon.svg#icomoon'",[35,134941,14048],{"class":359},[35,134943,134882],{"class":58},[35,134945,499],{"class":359},[35,134947,134948],{"class":306},"'svg'",[35,134950,3053],{"class":359},[35,134952,134953],{"class":37,"line":110},[35,134954,1926],{"class":359},[35,134956,134957,134959],{"class":37,"line":119},[35,134958,134560],{"class":48},[35,134960,15906],{"class":359},[35,134962,134963,134965,134967,134969],{"class":37,"line":128},[35,134964,134841],{"class":58},[35,134966,51763],{"class":359},[35,134968,134846],{"class":306},[35,134970,1655],{"class":359},[35,134972,134973,134976,134978,134980],{"class":37,"line":137},[35,134974,134975],{"class":58},"  font-style",[35,134977,51763],{"class":359},[35,134979,64167],{"class":58},[35,134981,1655],{"class":359},[35,134983,134984],{"class":37,"line":144},[35,134985,1926],{"class":359},[21,134987,134988],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1823,134990],{"style":126659,"src":134991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[14,134993,134994],{"start":65},[17,134995,134996],{},"添加字体",[1823,134998],{"style":126659,"src":134999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[21,135001,135002],{},"复制：",[1823,135004],{"style":126659,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[21,135007,135008],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[14,135010,135011],{"start":74},[17,135012,135013],{},"代码展示：",[25,135015,135016],{"className":126803,"code":134822,"language":126805,"meta":30,"style":30},[32,135017,135018,135022,135028,135038,135052,135074,135092,135110,135128,135132,135138,135148,135158],{"__ignoreMap":30},[35,135019,135020],{"class":37,"line":38},[35,135021,134829],{"class":41},[35,135023,135024,135026],{"class":37,"line":45},[35,135025,134834],{"class":495},[35,135027,15906],{"class":359},[35,135029,135030,135032,135034,135036],{"class":37,"line":55},[35,135031,134841],{"class":58},[35,135033,51763],{"class":359},[35,135035,134846],{"class":306},[35,135037,1655],{"class":359},[35,135039,135040,135042,135044,135046,135048,135050],{"class":37,"line":65},[35,135041,134853],{"class":58},[35,135043,51763],{"class":359},[35,135045,62052],{"class":58},[35,135047,499],{"class":359},[35,135049,134862],{"class":306},[35,135051,3053],{"class":359},[35,135053,135054,135056,135058,135060,135062,135064,135066,135068,135070,135072],{"class":37,"line":74},[35,135055,134853],{"class":58},[35,135057,51763],{"class":359},[35,135059,62052],{"class":58},[35,135061,499],{"class":359},[35,135063,134877],{"class":306},[35,135065,14048],{"class":359},[35,135067,134882],{"class":58},[35,135069,499],{"class":359},[35,135071,134887],{"class":306},[35,135073,38373],{"class":359},[35,135075,135076,135078,135080,135082,135084,135086,135088,135090],{"class":37,"line":83},[35,135077,134894],{"class":58},[35,135079,499],{"class":359},[35,135081,134899],{"class":306},[35,135083,14048],{"class":359},[35,135085,134882],{"class":58},[35,135087,499],{"class":359},[35,135089,134908],{"class":306},[35,135091,38373],{"class":359},[35,135093,135094,135096,135098,135100,135102,135104,135106,135108],{"class":37,"line":92},[35,135095,134894],{"class":58},[35,135097,499],{"class":359},[35,135099,134919],{"class":306},[35,135101,14048],{"class":359},[35,135103,134882],{"class":58},[35,135105,499],{"class":359},[35,135107,134928],{"class":306},[35,135109,38373],{"class":359},[35,135111,135112,135114,135116,135118,135120,135122,135124,135126],{"class":37,"line":101},[35,135113,134894],{"class":58},[35,135115,499],{"class":359},[35,135117,134939],{"class":306},[35,135119,14048],{"class":359},[35,135121,134882],{"class":58},[35,135123,499],{"class":359},[35,135125,134948],{"class":306},[35,135127,3053],{"class":359},[35,135129,135130],{"class":37,"line":110},[35,135131,1926],{"class":359},[35,135133,135134,135136],{"class":37,"line":119},[35,135135,134560],{"class":48},[35,135137,15906],{"class":359},[35,135139,135140,135142,135144,135146],{"class":37,"line":128},[35,135141,134841],{"class":58},[35,135143,51763],{"class":359},[35,135145,134846],{"class":306},[35,135147,1655],{"class":359},[35,135149,135150,135152,135154,135156],{"class":37,"line":137},[35,135151,134975],{"class":58},[35,135153,51763],{"class":359},[35,135155,64167],{"class":58},[35,135157,1655],{"class":359},[35,135159,135160],{"class":37,"line":144},[35,135161,1926],{"class":359},[1823,135163],{"style":126659,"src":135164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[21,135166,135167],{},"更加细节展示：",[14,135169,135170],{},[17,135171,135172],{},"html 标签内添加小图标",[1823,135174],{"style":126659,"src":135175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[14,135177,135178],{"start":45},[17,135179,135180],{},"给标签定义字体",[25,135182,135183],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,135184,135185,135189,135203,135207],{"__ignoreMap":30},[35,135186,135187],{"class":37,"line":38},[35,135188,130914],{"class":41},[35,135190,135191,135193,135195,135197,135199,135201],{"class":37,"line":45},[35,135192,1404],{"class":359},[35,135194,51937],{"class":51626},[35,135196,53812],{"class":48},[35,135198,544],{"class":359},[35,135200,130927],{"class":306},[35,135202,51633],{"class":359},[35,135204,135205],{"class":37,"line":55},[35,135206,130934],{"class":359},[35,135208,135209,135211,135213],{"class":37,"line":65},[35,135210,52111],{"class":359},[35,135212,51937],{"class":51626},[35,135214,51633],{"class":359},[21,135216,135217],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1823,135219],{"style":126659,"src":135220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[465,135222,135224],{"id":135223},"_1235-字体图标的追加","12.3.5 字体图标的追加",[21,135226,135227],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[21,135229,135230,135231,135234],{},"把压缩包里面的 ",[645,135232,135233],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[21,135236,135237],{},"打开网站，点下方：",[1823,135239],{"style":126659,"src":135240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1823,135242],{"style":126659,"src":135243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1823,135245],{"style":126659,"src":135246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[21,135248,135249],{},"点yes重新加载",[21,135251,135252],{},"然后重复之前的操作就可以实现了",[21,135254,135255],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[465,135257,135259],{"id":135258},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1823,135261],{"style":126659,"src":135262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[416,135264,135265],{},"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":30,"searchDepth":45,"depth":45,"links":135267},[135268,135274,135279],{"id":133871,"depth":45,"text":133872,"children":135269},[135270,135271,135272,135273],{"id":133883,"depth":55,"text":133884},{"id":133912,"depth":55,"text":133913},{"id":133940,"depth":55,"text":133941},{"id":133998,"depth":55,"text":133999},{"id":134470,"depth":45,"text":134471,"children":135275},[135276,135277,135278],{"id":134474,"depth":55,"text":134475},{"id":134519,"depth":55,"text":134520},{"id":134535,"depth":55,"text":134536},{"id":134635,"depth":45,"text":134636,"children":135280},[135281,135282,135283,135284,135285,135286],{"id":134639,"depth":55,"text":134640},{"id":134673,"depth":55,"text":134674},{"id":134696,"depth":55,"text":134697},{"id":134743,"depth":55,"text":134744},{"id":135223,"depth":55,"text":135224},{"id":135258,"depth":55,"text":135259},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133863,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135293,"title":135294,"body":135295,"description":421,"extension":422,"meta":136522,"navigation":140,"path":136523,"seo":136524,"stem":136525,"__hash__":136526},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135296,"toc":136503},[135297,135300,135304,135307,135321,135389,135419,135422,135426,135430,135532,135579,135583,135586,135589,135623,135626,135629,135632,135635,135638,135641,135644,135646,135649,135652,135655,135658,135661,135664,135667,135695,135698,135702,135705,135712,135715,135718,135744,135747,135751,135754,135757,135764,135768,135771,135773,135805,135808,135811,135823,135829,135832,135835,135838,135840,135844,135847,135850,135853,135898,135902,135904,135907,135914,135956,135959,135963,135968,135982,135986,135989,135992,135995,135998,136001,136035,136038,136041,136095,136098,136101,136104,136107,136159,136162,136165,136214,136218,136220,136223,136226,136229,136232,136235,136293,136296,136302,136305,136308,136340,136343,136347,136351,136354,136386,136390,136393,136437,136441,136444,136447,136450,136453,136456,136459,136462,136464,136467,136469,136472,136475,136478,136481,136486,136489,136491,136494,136497,136500],[10,135298,135294],{"id":135299},"_13-界面样式与布局技巧",[438,135301,135303],{"id":135302},"_131-css三角","13.1 css三角",[21,135305,135306],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1501,135308,135309,135312,135315,135318],{},[17,135310,135311],{},"用css 边框可以模拟三角效果",[17,135313,135314],{},"宽度高度为0",[17,135316,135317],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[17,135319,135320],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[25,135322,135324],{"className":126803,"code":135323,"language":126805,"meta":30,"style":30},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[32,135325,135326,135331,135338,135348,135358,135374,135385],{"__ignoreMap":30},[35,135327,135328],{"class":37,"line":38},[35,135329,135330],{"class":41},"\u002F* CSS 实现三角形 *\u002F\n",[35,135332,135333,135336],{"class":37,"line":45},[35,135334,135335],{"class":48},".triangle",[35,135337,15906],{"class":359},[35,135339,135340,135342,135344,135346],{"class":37,"line":55},[35,135341,70893],{"class":58},[35,135343,51763],{"class":359},[35,135345,687],{"class":58},[35,135347,1655],{"class":359},[35,135349,135350,135352,135354,135356],{"class":37,"line":65},[35,135351,71113],{"class":58},[35,135353,51763],{"class":359},[35,135355,687],{"class":58},[35,135357,1655],{"class":359},[35,135359,135360,135362,135364,135366,135368,135370,135372],{"class":37,"line":74},[35,135361,71221],{"class":58},[35,135363,51763],{"class":359},[35,135365,940],{"class":58},[35,135367,51818],{"class":495},[35,135369,51847],{"class":58},[35,135371,64317],{"class":58},[35,135373,1655],{"class":359},[35,135375,135376,135379,135381,135383],{"class":37,"line":83},[35,135377,135378],{"class":58},"  border-bottom-color",[35,135380,51763],{"class":359},[35,135382,62695],{"class":58},[35,135384,1655],{"class":359},[35,135386,135387],{"class":37,"line":92},[35,135388,1926],{"class":359},[25,135390,135391],{"className":126803,"code":130960,"language":126805,"meta":30,"style":30},[32,135392,135393,135399,135415],{"__ignoreMap":30},[35,135394,135395,135397],{"class":37,"line":38},[35,135396,51937],{"class":51626},[35,135398,15906],{"class":359},[35,135400,135401,135403,135405,135407,135409,135411,135413],{"class":37,"line":45},[35,135402,71221],{"class":58},[35,135404,51763],{"class":359},[35,135406,713],{"class":58},[35,135408,51818],{"class":495},[35,135410,51847],{"class":58},[35,135412,130195],{"class":58},[35,135414,1655],{"class":359},[35,135416,135417],{"class":37,"line":55},[35,135418,1926],{"class":359},[1823,135420],{"style":126659,"src":135421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[438,135423,135425],{"id":135424},"_132-css用户界面样式","13.2 css用户界面样式",[465,135427,135429],{"id":135428},"_1321-鼠标样式","13.2.1 鼠标样式",[25,135431,135433],{"className":126803,"code":135432,"language":126805,"meta":30,"style":30},"\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",[32,135434,135435,135440,135459,135477,135496,135513],{"__ignoreMap":30},[35,135436,135437],{"class":37,"line":38},[35,135438,135439],{"class":41},"\u002F* 鼠标样式 *\u002F\n",[35,135441,135442,135444,135446,135449,135451,135453,135456],{"class":37,"line":45},[35,135443,51937],{"class":51626},[35,135445,80132],{"class":359},[35,135447,135448],{"class":58},"cursor",[35,135450,51763],{"class":359},[35,135452,62356],{"class":58},[35,135454,135455],{"class":359},"; }   ",[35,135457,135458],{"class":41},"\u002F* 手型 *\u002F\n",[35,135460,135461,135463,135465,135467,135469,135472,135474],{"class":37,"line":55},[35,135462,51937],{"class":51626},[35,135464,80132],{"class":359},[35,135466,135448],{"class":58},[35,135468,51763],{"class":359},[35,135470,135471],{"class":58},"default",[35,135473,135455],{"class":359},[35,135475,135476],{"class":41},"\u002F* 默认 *\u002F\n",[35,135478,135479,135481,135483,135485,135487,135490,135493],{"class":37,"line":65},[35,135480,51937],{"class":51626},[35,135482,80132],{"class":359},[35,135484,135448],{"class":58},[35,135486,51763],{"class":359},[35,135488,135489],{"class":58},"move",[35,135491,135492],{"class":359},"; }      ",[35,135494,135495],{"class":41},"\u002F* 移动 *\u002F\n",[35,135497,135498,135500,135502,135504,135506,135508,135510],{"class":37,"line":74},[35,135499,51937],{"class":51626},[35,135501,80132],{"class":359},[35,135503,135448],{"class":58},[35,135505,51763],{"class":359},[35,135507,5521],{"class":58},[35,135509,135492],{"class":359},[35,135511,135512],{"class":41},"\u002F* 文本 *\u002F\n",[35,135514,135515,135517,135519,135521,135523,135526,135529],{"class":37,"line":83},[35,135516,51937],{"class":51626},[35,135518,80132],{"class":359},[35,135520,135448],{"class":58},[35,135522,51763],{"class":359},[35,135524,135525],{"class":58},"not-allowed",[35,135527,135528],{"class":359},"; } ",[35,135530,135531],{"class":41},"\u002F* 禁止 *\u002F\n",[633,135533,135534,135542],{},[636,135535,135536],{},[639,135537,135538,135540],{},[642,135539,127267],{"align":24070},[642,135541,27817],{"align":24070},[680,135543,135544,135551,135558,135565,135572],{},[639,135545,135546,135548],{},[685,135547,135471],{"align":24070},[685,135549,135550],{"align":24070},"小白 默认",[639,135552,135553,135555],{},[685,135554,62356],{"align":24070},[685,135556,135557],{"align":24070},"小手",[639,135559,135560,135562],{},[685,135561,135489],{"align":24070},[685,135563,135564],{"align":24070},"移动",[639,135566,135567,135569],{},[685,135568,5521],{"align":24070},[685,135570,135571],{"align":24070},"文本",[639,135573,135574,135576],{},[685,135575,135525],{"align":24070},[685,135577,135578],{"align":24070},"禁止",[465,135580,135582],{"id":135581},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[21,135584,135585],{},"去除表单轮廓线",[21,135587,135588],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[25,135590,135591],{"className":126803,"code":130167,"language":126805,"meta":30,"style":30},[32,135592,135593,135597,135603,135619],{"__ignoreMap":30},[35,135594,135595],{"class":37,"line":38},[35,135596,130174],{"class":41},[35,135598,135599,135601],{"class":37,"line":45},[35,135600,51937],{"class":51626},[35,135602,15906],{"class":359},[35,135604,135605,135607,135609,135611,135613,135615,135617],{"class":37,"line":55},[35,135606,71221],{"class":58},[35,135608,51763],{"class":359},[35,135610,713],{"class":58},[35,135612,51818],{"class":495},[35,135614,51847],{"class":58},[35,135616,130195],{"class":58},[35,135618,1655],{"class":359},[35,135620,135621],{"class":37,"line":65},[35,135622,1926],{"class":359},[21,135624,135625],{},"文本域：",[1823,135627],{"style":126659,"src":135628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[21,135630,135631],{},"此时会有一个空白区域",[1823,135633],{"style":126659,"src":135634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[21,135636,135637],{},"写在同一行就不会出现这个问题",[1823,135639],{"style":126659,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[21,135642,135643],{},"文本域是行内块元素，一定记住！！！",[21,135645,98558],{},[1823,135647],{"style":126659,"src":135648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[21,135650,135651],{},"文本域尽量放在一行",[21,135653,135654],{},"知识回顾：cols是列，rols是行",[1823,135656],{"style":126659,"src":135657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[21,135659,135660],{},"它可以进行拖动，显然这是我们不愿意看到的",[1823,135662],{"style":126659,"src":135663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[21,135665,135666],{},"使用resize进行解决",[25,135668,135670],{"className":126803,"code":135669,"language":126805,"meta":30,"style":30},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[32,135671,135672,135678,135691],{"__ignoreMap":30},[35,135673,135674,135676],{"class":37,"line":38},[35,135675,54147],{"class":51626},[35,135677,15906],{"class":359},[35,135679,135680,135682,135684,135686,135688],{"class":37,"line":45},[35,135681,71123],{"class":58},[35,135683,51763],{"class":359},[35,135685,55063],{"class":58},[35,135687,130666],{"class":359},[35,135689,135690],{"class":41},"\u002F* 取消表单轮廓线 *\u002F\n",[35,135692,135693],{"class":37,"line":55},[35,135694,1926],{"class":359},[21,135696,135697],{},"此时就无法通过右下方实现拖动了",[465,135699,135701],{"id":135700},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[21,135703,135704],{},"实现一个盒子中的文字和图片对齐",[21,135706,135707,135708,135711],{},"用于设置一个元素的 ",[645,135709,135710],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[21,135713,135714],{},"图片和文字默认是基线对齐",[1823,135716],{"style":126659,"src":135717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[25,135719,135720],{"className":126803,"code":135669,"language":126805,"meta":30,"style":30},[32,135721,135722,135728,135740],{"__ignoreMap":30},[35,135723,135724,135726],{"class":37,"line":38},[35,135725,54147],{"class":51626},[35,135727,15906],{"class":359},[35,135729,135730,135732,135734,135736,135738],{"class":37,"line":45},[35,135731,71123],{"class":58},[35,135733,51763],{"class":359},[35,135735,55063],{"class":58},[35,135737,130666],{"class":359},[35,135739,135690],{"class":41},[35,135741,135742],{"class":37,"line":55},[35,135743,1926],{"class":359},[1823,135745],{"style":126659,"src":135746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22332,135748,135750],{"id":135749},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[21,135752,135753],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1823,135755],{"style":126659,"src":135756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[21,135758,135759,135760,135763],{},"此时可以给图片、表单这些行内块元素的 ",[645,135761,135762],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22332,135765,135767],{"id":135766},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[21,135769,135770],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[21,135772,14967],{},[25,135774,135776],{"className":126803,"code":135775,"language":126805,"meta":30,"style":30},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[32,135777,135778,135783,135789,135801],{"__ignoreMap":30},[35,135779,135780],{"class":37,"line":38},[35,135781,135782],{"class":41},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[35,135784,135785,135787],{"class":37,"line":45},[35,135786,1823],{"class":51626},[35,135788,15906],{"class":359},[35,135790,135791,135794,135796,135799],{"class":37,"line":55},[35,135792,135793],{"class":58},"  vertical-align",[35,135795,51763],{"class":359},[35,135797,135798],{"class":58},"middle",[35,135800,1655],{"class":359},[35,135802,135803],{"class":37,"line":65},[35,135804,1926],{"class":359},[1823,135806],{"style":126659,"src":135807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[21,135809,135810],{},"主要解决方法有两种：",[14,135812,135813],{},[17,135814,135815,135818,135819,135822],{},[645,135816,135817],{},"给图片"," 添加 ",[645,135820,135821],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[21,135824,135825,135826],{},"2.把图片转换为块级元素 ",[645,135827,135828],{},"display: block",[21,135830,135831],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[21,135833,135834],{},"img {",[21,135836,135837],{},"vertical-align:middle;",[21,135839,1440],{},[465,135841,135843],{"id":135842},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[21,135845,135846],{},"效果：",[1823,135848],{"style":126659,"src":135849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[21,135851,135852],{},"单行文本溢出显示省略号--必须满足三个条件：",[25,135854,135856],{"className":126803,"code":135855,"language":126805,"meta":30,"style":30},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[32,135857,135858,135863,135869,135879,135884,135894],{"__ignoreMap":30},[35,135859,135860],{"class":37,"line":38},[35,135861,135862],{"class":41},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[35,135864,135865,135867],{"class":37,"line":45},[35,135866,1823],{"class":51626},[35,135868,15906],{"class":359},[35,135870,135871,135873,135875,135877],{"class":37,"line":55},[35,135872,135793],{"class":58},[35,135874,51763],{"class":359},[35,135876,135798],{"class":58},[35,135878,1655],{"class":359},[35,135880,135881],{"class":37,"line":65},[35,135882,135883],{"class":41},"  \u002F* 或 *\u002F\n",[35,135885,135886,135888,135890,135892],{"class":37,"line":74},[35,135887,128419],{"class":58},[35,135889,51763],{"class":359},[35,135891,61195],{"class":58},[35,135893,1655],{"class":359},[35,135895,135896],{"class":37,"line":83},[35,135897,1926],{"class":359},[465,135899,135901],{"id":135900},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[21,135903,135846],{},[1823,135905],{"style":126659,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[21,135908,135909,135910,135913],{},"多行文本溢出显示省略号， ",[645,135911,135912],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[25,135915,135916],{"className":126803,"code":135855,"language":126805,"meta":30,"style":30},[32,135917,135918,135922,135928,135938,135942,135952],{"__ignoreMap":30},[35,135919,135920],{"class":37,"line":38},[35,135921,135862],{"class":41},[35,135923,135924,135926],{"class":37,"line":45},[35,135925,1823],{"class":51626},[35,135927,15906],{"class":359},[35,135929,135930,135932,135934,135936],{"class":37,"line":55},[35,135931,135793],{"class":58},[35,135933,51763],{"class":359},[35,135935,135798],{"class":58},[35,135937,1655],{"class":359},[35,135939,135940],{"class":37,"line":65},[35,135941,135883],{"class":41},[35,135943,135944,135946,135948,135950],{"class":37,"line":74},[35,135945,128419],{"class":58},[35,135947,51763],{"class":359},[35,135949,61195],{"class":58},[35,135951,1655],{"class":359},[35,135953,135954],{"class":37,"line":83},[35,135955,1926],{"class":359},[21,135957,135958],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[438,135960,135962],{"id":135961},"_133-常见布局技巧","13.3 常见布局技巧",[21,135964,135965],{},[645,135966,135967],{},"巧妙利用一个技术更快更好的布局：",[14,135969,135970,135973,135976,135979],{},[17,135971,135972],{},"margin负值的运用",[17,135974,135975],{},"文字围绕浮动元素",[17,135977,135978],{},"行内块的巧妙运用",[17,135980,135981],{},"CSS三角强化",[465,135983,135985],{"id":135984},"_1331-margin负值的运用","13.3.1 margin负值的运用",[21,135987,135988],{},"应用场景：",[1823,135990],{"style":126659,"src":135991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1823,135993],{"style":126659,"src":135994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[21,135996,135997],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[21,135999,136000],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[25,136002,136003],{"className":126803,"code":130167,"language":126805,"meta":30,"style":30},[32,136004,136005,136009,136015,136031],{"__ignoreMap":30},[35,136006,136007],{"class":37,"line":38},[35,136008,130174],{"class":41},[35,136010,136011,136013],{"class":37,"line":45},[35,136012,51937],{"class":51626},[35,136014,15906],{"class":359},[35,136016,136017,136019,136021,136023,136025,136027,136029],{"class":37,"line":55},[35,136018,71221],{"class":58},[35,136020,51763],{"class":359},[35,136022,713],{"class":58},[35,136024,51818],{"class":495},[35,136026,51847],{"class":58},[35,136028,130195],{"class":58},[35,136030,1655],{"class":359},[35,136032,136033],{"class":37,"line":65},[35,136034,1926],{"class":359},[1823,136036],{"style":126659,"src":136037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[21,136039,136040],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[25,136042,136044],{"className":126803,"code":136043,"language":126805,"meta":30,"style":30},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,136045,136046,136051,136057,136067,136079,136091],{"__ignoreMap":30},[35,136047,136048],{"class":37,"line":38},[35,136049,136050],{"class":41},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[35,136052,136053,136055],{"class":37,"line":45},[35,136054,130651],{"class":48},[35,136056,15906],{"class":359},[35,136058,136059,136061,136063,136065],{"class":37,"line":55},[35,136060,132609],{"class":58},[35,136062,51763],{"class":359},[35,136064,55090],{"class":58},[35,136066,1655],{"class":359},[35,136068,136069,136071,136073,136075,136077],{"class":37,"line":65},[35,136070,132623],{"class":58},[35,136072,51763],{"class":359},[35,136074,940],{"class":58},[35,136076,51818],{"class":495},[35,136078,1655],{"class":359},[35,136080,136081,136083,136085,136087,136089],{"class":37,"line":74},[35,136082,132640],{"class":58},[35,136084,51763],{"class":359},[35,136086,1194],{"class":58},[35,136088,51818],{"class":495},[35,136090,1655],{"class":359},[35,136092,136093],{"class":37,"line":83},[35,136094,1926],{"class":359},[21,136096,136097],{},"加上上述代码会发现：",[1823,136099],{"style":126659,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[21,136102,136103],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[21,136105,136106],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[25,136108,136109],{"className":126803,"code":136043,"language":126805,"meta":30,"style":30},[32,136110,136111,136115,136121,136131,136143,136155],{"__ignoreMap":30},[35,136112,136113],{"class":37,"line":38},[35,136114,136050],{"class":41},[35,136116,136117,136119],{"class":37,"line":45},[35,136118,130651],{"class":48},[35,136120,15906],{"class":359},[35,136122,136123,136125,136127,136129],{"class":37,"line":55},[35,136124,132609],{"class":58},[35,136126,51763],{"class":359},[35,136128,55090],{"class":58},[35,136130,1655],{"class":359},[35,136132,136133,136135,136137,136139,136141],{"class":37,"line":65},[35,136134,132623],{"class":58},[35,136136,51763],{"class":359},[35,136138,940],{"class":58},[35,136140,51818],{"class":495},[35,136142,1655],{"class":359},[35,136144,136145,136147,136149,136151,136153],{"class":37,"line":74},[35,136146,132640],{"class":58},[35,136148,51763],{"class":359},[35,136150,1194],{"class":58},[35,136152,51818],{"class":495},[35,136154,1655],{"class":359},[35,136156,136157],{"class":37,"line":83},[35,136158,1926],{"class":359},[21,136160,136161],{},"解决方式2：",[21,136163,136164],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[25,136166,136168],{"className":126803,"code":136167,"language":126805,"meta":30,"style":30},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,136169,136170,136176,136186,136198,136210],{"__ignoreMap":30},[35,136171,136172,136174],{"class":37,"line":38},[35,136173,51937],{"class":51626},[35,136175,15906],{"class":359},[35,136177,136178,136180,136182,136184],{"class":37,"line":45},[35,136179,132609],{"class":58},[35,136181,51763],{"class":359},[35,136183,55090],{"class":58},[35,136185,1655],{"class":359},[35,136187,136188,136190,136192,136194,136196],{"class":37,"line":55},[35,136189,132623],{"class":58},[35,136191,51763],{"class":359},[35,136193,940],{"class":58},[35,136195,51818],{"class":495},[35,136197,1655],{"class":359},[35,136199,136200,136202,136204,136206,136208],{"class":37,"line":65},[35,136201,132640],{"class":58},[35,136203,51763],{"class":359},[35,136205,1194],{"class":58},[35,136207,51818],{"class":495},[35,136209,1655],{"class":359},[35,136211,136212],{"class":37,"line":74},[35,136213,1926],{"class":359},[465,136215,136217],{"id":136216},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[21,136219,135988],{},[1823,136221],{"style":126659,"src":136222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[21,136224,136225],{},"实现结构图：",[1823,136227],{"style":126659,"src":136228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[21,136230,136231],{},"巧妙运用浮动元素不会压住文字的特性",[21,136233,136234],{},"代码显示：",[25,136236,136238],{"className":126803,"code":136237,"language":126805,"meta":30,"style":30},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,136239,136240,136246,136256,136260,136265,136269,136275,136289],{"__ignoreMap":30},[35,136241,136242,136244],{"class":37,"line":38},[35,136243,130651],{"class":48},[35,136245,15906],{"class":359},[35,136247,136248,136250,136252,136254],{"class":37,"line":45},[35,136249,131283],{"class":58},[35,136251,51763],{"class":359},[35,136253,24070],{"class":58},[35,136255,1655],{"class":359},[35,136257,136258],{"class":37,"line":55},[35,136259,1926],{"class":359},[35,136261,136262],{"class":37,"line":65},[35,136263,136264],{"class":359},"```Css\n",[35,136266,136267],{"class":37,"line":74},[35,136268,130646],{"class":41},[35,136270,136271,136273],{"class":37,"line":83},[35,136272,130651],{"class":48},[35,136274,15906],{"class":359},[35,136276,136277,136279,136281,136283,136285,136287],{"class":37,"line":92},[35,136278,70795],{"class":58},[35,136280,51763],{"class":359},[35,136282,687],{"class":58},[35,136284,51882],{"class":58},[35,136286,130666],{"class":359},[35,136288,130669],{"class":41},[35,136290,136291],{"class":37,"line":101},[35,136292,1926],{"class":359},[21,136294,136295],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[25,136297,136300],{"className":136298,"code":136299,"language":5521},[5519],"\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",[32,136301,136299],{"__ignoreMap":30},[1823,136303],{"style":126659,"src":136304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[21,136306,136307],{},"最终展示结果：",[25,136309,136310],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,136311,136312,136316,136322,136336],{"__ignoreMap":30},[35,136313,136314],{"class":37,"line":38},[35,136315,130646],{"class":41},[35,136317,136318,136320],{"class":37,"line":45},[35,136319,130651],{"class":48},[35,136321,15906],{"class":359},[35,136323,136324,136326,136328,136330,136332,136334],{"class":37,"line":55},[35,136325,70795],{"class":58},[35,136327,51763],{"class":359},[35,136329,687],{"class":58},[35,136331,51882],{"class":58},[35,136333,130666],{"class":359},[35,136335,130669],{"class":41},[35,136337,136338],{"class":37,"line":65},[35,136339,1926],{"class":359},[1823,136341],{"style":126659,"src":136342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[438,136344,136346],{"id":136345},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[465,136348,136350],{"id":136349},"_1341-原理","13.4.1 原理",[1823,136352],{"style":126659,"src":136353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[25,136355,136356],{"className":126803,"code":130639,"language":126805,"meta":30,"style":30},[32,136357,136358,136362,136368,136382],{"__ignoreMap":30},[35,136359,136360],{"class":37,"line":38},[35,136361,130646],{"class":41},[35,136363,136364,136366],{"class":37,"line":45},[35,136365,130651],{"class":48},[35,136367,15906],{"class":359},[35,136369,136370,136372,136374,136376,136378,136380],{"class":37,"line":55},[35,136371,70795],{"class":58},[35,136373,51763],{"class":359},[35,136375,687],{"class":58},[35,136377,51882],{"class":58},[35,136379,130666],{"class":359},[35,136381,130669],{"class":41},[35,136383,136384],{"class":37,"line":65},[35,136385,1926],{"class":359},[465,136387,136389],{"id":136388},"_1342-实例","13.4.2 实例",[1823,136391],{"style":126659,"src":136392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[25,136394,136395],{"className":126803,"code":131269,"language":126805,"meta":30,"style":30},[32,136396,136397,136403,136413,136417,136423,136433],{"__ignoreMap":30},[35,136398,136399,136401],{"class":37,"line":38},[35,136400,131276],{"class":48},[35,136402,15906],{"class":359},[35,136404,136405,136407,136409,136411],{"class":37,"line":45},[35,136406,131283],{"class":58},[35,136408,51763],{"class":359},[35,136410,24070],{"class":58},[35,136412,1655],{"class":359},[35,136414,136415],{"class":37,"line":55},[35,136416,1926],{"class":359},[35,136418,136419,136421],{"class":37,"line":65},[35,136420,131298],{"class":48},[35,136422,15906],{"class":359},[35,136424,136425,136427,136429,136431],{"class":37,"line":74},[35,136426,131283],{"class":58},[35,136428,51763],{"class":359},[35,136430,72847],{"class":58},[35,136432,1655],{"class":359},[35,136434,136435],{"class":37,"line":83},[35,136436,1926],{"class":359},[438,136438,136440],{"id":136439},"_135-css的初始化","13.5 css的初始化",[21,136442,136443],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[21,136445,136446],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[21,136448,136449],{},"每个网页都必须首先进行 CSS初始化。",[21,136451,136452],{},"这里我们以 京东CSS初始化代码为例。",[21,136454,136455],{},"在网页右键查看网页源代码",[21,136457,136458],{},"找到css的link引入语句",[21,136460,136461],{},"然后ctrl+f 输入body",[21,136463,77551],{},[1823,136465],{"style":126659,"src":136466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[21,136468,77574],{},[1823,136470],{"style":126659,"src":136471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[21,136473,136474],{},"③打开了网页上传压缩的代码",[1823,136476],{"style":126659,"src":136477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[21,136479,136480],{},"④从body前可以查看这个网页的初始化代码",[21,136482,136483],{},[645,136484,136485],{},"Unicode编码字体：",[21,136487,136488],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[21,136490,83532],{},[21,136492,136493],{},"黑体 \\9ED1\\4F53",[21,136495,136496],{},"宋体 \\5B8B\\4F53",[21,136498,136499],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[416,136501,136502],{},"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":30,"searchDepth":45,"depth":45,"links":136504},[136505,136506,136513,136517,136521],{"id":135302,"depth":45,"text":135303},{"id":135424,"depth":45,"text":135425,"children":136507},[136508,136509,136510,136511,136512],{"id":135428,"depth":55,"text":135429},{"id":135581,"depth":55,"text":135582},{"id":135700,"depth":55,"text":135701},{"id":135842,"depth":55,"text":135843},{"id":135900,"depth":55,"text":135901},{"id":135961,"depth":45,"text":135962,"children":136514},[136515,136516],{"id":135984,"depth":55,"text":135985},{"id":136216,"depth":55,"text":136217},{"id":136345,"depth":45,"text":136346,"children":136518},[136519,136520],{"id":136349,"depth":55,"text":136350},{"id":136388,"depth":55,"text":136389},{"id":136439,"depth":45,"text":136440},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135294,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136528,"title":136529,"body":136530,"description":421,"extension":422,"meta":138216,"navigation":140,"path":138217,"seo":138218,"stem":138219,"__hash__":138220},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136531,"toc":138205},[136532,136535,136539,136543,136546,136553,136556,136559,136597,136600,136602,136616,136620,136629,136633,136638,136641,136644,136647,136682,136687,136690,136720,136723,136728,136731,136734,136764,136767,136821,136824,136828,136833,136845,136848,136852,136882,136885,136890,136893,136923,136926,136930,136947,136951,136955,136958,136991,136994,136998,137001,137004,137007,137010,137013,137124,137127,137130,137133,137235,137238,137242,137246,137250,137253,137293,137296,137298,137314,137318,137321,137326,137407,137410,137413,137539,137544,137547,137555,137558,137563,137648,137651,137655,137658,137661,137665,137685,137690,137774,137777,137782,137785,137788,137866,137869,137872,137875,137878,137881,137886,137889,137892,137964,137967,137972,137975,138072,138075,138081,138084,138087,138090,138093,138096,138099,138102,138105,138109,138114,138117,138150,138155,138158,138199,138202],[10,136533,136529],{"id":136534},"_14-html5与css3新特性",[438,136536,136538],{"id":136537},"_141-html5的新特性","14.1 HTML5的新特性",[465,136540,136542],{"id":136541},"_1411-基本标签","14.1.1 基本标签",[21,136544,136545],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[21,136547,136548,136549,136552],{},"这些新特性都有兼容性问题，基本是 ",[645,136550,136551],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[21,136554,136555],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[21,136557,136558],{},"现在使用的是新特性：",[1501,136560,136561,136567,136573,136579,136585,136591],{},[17,136562,136563,136566],{},[32,136564,136565],{},"\u003Cheader>"," 头部标签",[17,136568,136569,136572],{},[32,136570,136571],{},"\u003Cnav>"," 导航标签",[17,136574,136575,136578],{},[32,136576,136577],{},"\u003Carticle>"," 内容标签",[17,136580,136581,136584],{},[32,136582,136583],{},"\u003Csection>"," 定义文档某个区域",[17,136586,136587,136590],{},[32,136588,136589],{},"\u003Caside>"," 侧边栏标签",[17,136592,136593,136596],{},[32,136594,136595],{},"\u003Cfooter>"," 尾部标签",[1823,136598],{"style":126659,"src":136599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[21,136601,528],{},[1501,136603,136604,136607,136610,136613],{},[17,136605,136606],{},"这种语义化标准主要是针对搜索引擎的",[17,136608,136609],{},"这些标签页面中可以经常使用",[17,136611,136612],{},"在IE9中，需要把这些元素转换为块级元素",[17,136614,136615],{},"移动端更喜欢使用这些标签",[465,136617,136619],{"id":136618},"_1412-多媒体标签","14.1.2 多媒体标签",[21,136621,136622,136623,136625,136626,136628],{},"音频 ",[645,136624,28501],{}," 和视频 ",[645,136627,28510],{}," 两个标签",[22332,136630,136632],{"id":136631},"_14121-视频标签-video","14.1.2.1 视频标签- video",[14,136634,136635],{},[17,136636,136637],{},"支持格式：",[1823,136639],{"style":126659,"src":136640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[21,136642,136643],{},"尽量使用MP4，兼容性好",[21,136645,136646],{},"用MP4就可以",[25,136648,136650],{"className":127550,"code":136649,"language":127552,"meta":30,"style":30},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[32,136651,136652],{"__ignoreMap":30},[35,136653,136654,136656,136658,136660,136662,136665,136667,136670,136673,136676,136678,136680],{"class":37,"line":38},[35,136655,1404],{"class":359},[35,136657,28510],{"class":51626},[35,136659,55565],{"class":48},[35,136661,544],{"class":359},[35,136663,136664],{"class":306},"\"movie.mp4\"",[35,136666,92748],{"class":48},[35,136668,136669],{"class":48}," autoplay",[35,136671,136672],{"class":48}," muted",[35,136674,136675],{"class":48}," loop",[35,136677,55640],{"class":359},[35,136679,28510],{"class":51626},[35,136681,51633],{"class":359},[14,136683,136684],{"start":45},[17,136685,136686],{},"兼容写法",[21,136688,136689],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[25,136691,136692],{"className":127550,"code":136649,"language":127552,"meta":30,"style":30},[32,136693,136694],{"__ignoreMap":30},[35,136695,136696,136698,136700,136702,136704,136706,136708,136710,136712,136714,136716,136718],{"class":37,"line":38},[35,136697,1404],{"class":359},[35,136699,28510],{"class":51626},[35,136701,55565],{"class":48},[35,136703,544],{"class":359},[35,136705,136664],{"class":306},[35,136707,92748],{"class":48},[35,136709,136669],{"class":48},[35,136711,136672],{"class":48},[35,136713,136675],{"class":48},[35,136715,55640],{"class":359},[35,136717,28510],{"class":51626},[35,136719,51633],{"class":359},[21,136721,136722],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[14,136724,136725],{"start":55},[17,136726,136727],{},"video常用属性",[1823,136729],{"style":126659,"src":136730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[21,136732,136733],{},"poster属性后面是跟的等待加载图片的地址",[25,136735,136736],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,136737,136738],{"__ignoreMap":30},[35,136739,136740,136742,136744,136746,136748,136750,136752,136754,136756,136758,136760,136762],{"class":37,"line":38},[35,136741,1404],{"class":359},[35,136743,1823],{"class":51626},[35,136745,55565],{"class":48},[35,136747,544],{"class":359},[35,136749,134320],{"class":306},[35,136751,55573],{"class":48},[35,136753,544],{"class":359},[35,136755,134327],{"class":306},[35,136757,134330],{"class":48},[35,136759,544],{"class":359},[35,136761,134335],{"class":306},[35,136763,51633],{"class":359},[21,136765,136766],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[25,136768,136770],{"className":126803,"code":136769,"language":126805,"meta":30,"style":30},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[32,136771,136772,136777,136783,136807,136812,136817],{"__ignoreMap":30},[35,136773,136774],{"class":37,"line":38},[35,136775,136776],{"class":41},"\u002F* 2D 位移 *\u002F\n",[35,136778,136779,136781],{"class":37,"line":45},[35,136780,51937],{"class":51626},[35,136782,15906],{"class":359},[35,136784,136785,136788,136790,136793,136795,136797,136799,136801,136803,136805],{"class":37,"line":55},[35,136786,136787],{"class":58},"  transform",[35,136789,51763],{"class":359},[35,136791,136792],{"class":58},"translate",[35,136794,499],{"class":359},[35,136796,807],{"class":58},[35,136798,51818],{"class":495},[35,136800,12769],{"class":359},[35,136802,1150],{"class":58},[35,136804,51818],{"class":495},[35,136806,3053],{"class":359},[35,136808,136809],{"class":37,"line":65},[35,136810,136811],{"class":41},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[35,136813,136814],{"class":37,"line":74},[35,136815,136816],{"class":41},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[35,136818,136819],{"class":37,"line":83},[35,136820,1926],{"class":359},[21,136822,136823],{},"muted:自动静音属性",[22332,136825,136827],{"id":136826},"_14122-音频标签audio","14.1.2.2 音频标签audio",[14,136829,136830],{},[17,136831,136832],{},"基本使用",[21,136834,136835,136836,136841,136842],{},"当前 ",[645,136837,136838],{},[32,136839,136840],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[645,136843,136844],{},"mp3格式",[1823,136846],{"style":126659,"src":136847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[14,136849,136850],{"start":45},[17,136851,136686],{},[25,136853,136854],{"className":127550,"code":136649,"language":127552,"meta":30,"style":30},[32,136855,136856],{"__ignoreMap":30},[35,136857,136858,136860,136862,136864,136866,136868,136870,136872,136874,136876,136878,136880],{"class":37,"line":38},[35,136859,1404],{"class":359},[35,136861,28510],{"class":51626},[35,136863,55565],{"class":48},[35,136865,544],{"class":359},[35,136867,136664],{"class":306},[35,136869,92748],{"class":48},[35,136871,136669],{"class":48},[35,136873,136672],{"class":48},[35,136875,136675],{"class":48},[35,136877,55640],{"class":359},[35,136879,28510],{"class":51626},[35,136881,51633],{"class":359},[21,136883,136884],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[14,136886,136887],{"start":55},[17,136888,136889],{},"常用属性",[1823,136891],{"style":126659,"src":136892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[25,136894,136895],{"className":127550,"code":136649,"language":127552,"meta":30,"style":30},[32,136896,136897],{"__ignoreMap":30},[35,136898,136899,136901,136903,136905,136907,136909,136911,136913,136915,136917,136919,136921],{"class":37,"line":38},[35,136900,1404],{"class":359},[35,136902,28510],{"class":51626},[35,136904,55565],{"class":48},[35,136906,544],{"class":359},[35,136908,136664],{"class":306},[35,136910,92748],{"class":48},[35,136912,136669],{"class":48},[35,136914,136672],{"class":48},[35,136916,136675],{"class":48},[35,136918,55640],{"class":359},[35,136920,28510],{"class":51626},[35,136922,51633],{"class":359},[21,136924,136925],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22332,136927,136929],{"id":136928},"_14123-总结","14.1.2.3 总结",[1501,136931,136932,136935,136938,136941,136944],{},[17,136933,136934],{},"音频标签和视频标签使用方式基本一致",[17,136936,136937],{},"浏览器支持情况不同",[17,136939,136940],{},"谷歌浏览器把音频和视频自动播放禁止了",[17,136942,136943],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[17,136945,136946],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[465,136948,136950],{"id":136949},"_1413-表单元素","14.1.3 表单元素",[22332,136952,136954],{"id":136953},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1823,136956],{"style":126659,"src":136957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[25,136959,136961],{"className":127550,"code":136960,"language":127552,"meta":30,"style":30},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[32,136962,136963],{"__ignoreMap":30},[35,136964,136965,136967,136969,136971,136973,136975,136977,136979,136982,136984,136986,136989],{"class":37,"line":38},[35,136966,1404],{"class":359},[35,136968,54147],{"class":51626},[35,136970,54150],{"class":48},[35,136972,544],{"class":359},[35,136974,63025],{"class":306},[35,136976,15254],{"class":48},[35,136978,544],{"class":359},[35,136980,136981],{"class":306},"\"username\"",[35,136983,61346],{"class":48},[35,136985,544],{"class":359},[35,136987,136988],{"class":306},"\"请输入用户名\"",[35,136990,51633],{"class":359},[1823,136992],{"style":126659,"src":136993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22332,136995,136997],{"id":136996},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1823,136999],{"style":126659,"src":137000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[21,137002,137003],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[21,137005,137006],{},"快捷操作：",[1823,137008],{"style":126659,"src":137009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[21,137011,137012],{},"例子1：",[25,137014,137016],{"className":127550,"code":137015,"language":127552,"meta":30,"style":30},"\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",[32,137017,137018,137041,137068,137097,137116],{"__ignoreMap":30},[35,137019,137020,137022,137024,137026,137028,137031,137034,137036,137039],{"class":37,"line":38},[35,137021,1404],{"class":359},[35,137023,66951],{"class":51626},[35,137025,66954],{"class":48},[35,137027,544],{"class":359},[35,137029,137030],{"class":306},"\"\u002Fsubmit\"",[35,137032,137033],{"class":48}," method",[35,137035,544],{"class":359},[35,137037,137038],{"class":306},"\"post\"",[35,137040,51633],{"class":359},[35,137042,137043,137045,137047,137049,137051,137053,137055,137057,137059,137061,137063,137066],{"class":37,"line":45},[35,137044,52470],{"class":359},[35,137046,54147],{"class":51626},[35,137048,54150],{"class":48},[35,137050,544],{"class":359},[35,137052,63025],{"class":306},[35,137054,15254],{"class":48},[35,137056,544],{"class":359},[35,137058,136981],{"class":306},[35,137060,61346],{"class":48},[35,137062,544],{"class":359},[35,137064,137065],{"class":306},"\"用户名\"",[35,137067,51633],{"class":359},[35,137069,137070,137072,137074,137076,137078,137081,137083,137085,137088,137090,137092,137095],{"class":37,"line":55},[35,137071,52470],{"class":359},[35,137073,54147],{"class":51626},[35,137075,54150],{"class":48},[35,137077,544],{"class":359},[35,137079,137080],{"class":306},"\"password\"",[35,137082,15254],{"class":48},[35,137084,544],{"class":359},[35,137086,137087],{"class":306},"\"pwd\"",[35,137089,61346],{"class":48},[35,137091,544],{"class":359},[35,137093,137094],{"class":306},"\"密码\"",[35,137096,51633],{"class":359},[35,137098,137099,137101,137103,137105,137107,137109,137112,137114],{"class":37,"line":65},[35,137100,52470],{"class":359},[35,137102,54213],{"class":51626},[35,137104,54150],{"class":48},[35,137106,544],{"class":359},[35,137108,66974],{"class":306},[35,137110,137111],{"class":359},">提交\u003C\u002F",[35,137113,54213],{"class":51626},[35,137115,51633],{"class":359},[35,137117,137118,137120,137122],{"class":37,"line":74},[35,137119,52111],{"class":359},[35,137121,66951],{"class":51626},[35,137123,51633],{"class":359},[1823,137125],{"style":126659,"src":137126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[21,137128,137129],{},"value是表单域的内容",[21,137131,137132],{},"例子2：",[25,137134,137135],{"className":127550,"code":137015,"language":127552,"meta":30,"style":30},[32,137136,137137,137157,137183,137209,137227],{"__ignoreMap":30},[35,137138,137139,137141,137143,137145,137147,137149,137151,137153,137155],{"class":37,"line":38},[35,137140,1404],{"class":359},[35,137142,66951],{"class":51626},[35,137144,66954],{"class":48},[35,137146,544],{"class":359},[35,137148,137030],{"class":306},[35,137150,137033],{"class":48},[35,137152,544],{"class":359},[35,137154,137038],{"class":306},[35,137156,51633],{"class":359},[35,137158,137159,137161,137163,137165,137167,137169,137171,137173,137175,137177,137179,137181],{"class":37,"line":45},[35,137160,52470],{"class":359},[35,137162,54147],{"class":51626},[35,137164,54150],{"class":48},[35,137166,544],{"class":359},[35,137168,63025],{"class":306},[35,137170,15254],{"class":48},[35,137172,544],{"class":359},[35,137174,136981],{"class":306},[35,137176,61346],{"class":48},[35,137178,544],{"class":359},[35,137180,137065],{"class":306},[35,137182,51633],{"class":359},[35,137184,137185,137187,137189,137191,137193,137195,137197,137199,137201,137203,137205,137207],{"class":37,"line":55},[35,137186,52470],{"class":359},[35,137188,54147],{"class":51626},[35,137190,54150],{"class":48},[35,137192,544],{"class":359},[35,137194,137080],{"class":306},[35,137196,15254],{"class":48},[35,137198,544],{"class":359},[35,137200,137087],{"class":306},[35,137202,61346],{"class":48},[35,137204,544],{"class":359},[35,137206,137094],{"class":306},[35,137208,51633],{"class":359},[35,137210,137211,137213,137215,137217,137219,137221,137223,137225],{"class":37,"line":65},[35,137212,52470],{"class":359},[35,137214,54213],{"class":51626},[35,137216,54150],{"class":48},[35,137218,544],{"class":359},[35,137220,66974],{"class":306},[35,137222,137111],{"class":359},[35,137224,54213],{"class":51626},[35,137226,51633],{"class":359},[35,137228,137229,137231,137233],{"class":37,"line":74},[35,137230,52111],{"class":359},[35,137232,66951],{"class":51626},[35,137234,51633],{"class":359},[1823,137236],{"style":126659,"src":137237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[438,137239,137241],{"id":137240},"_142-css新特性","14.2 CSS新特性",[465,137243,137245],{"id":137244},"_1421-新增选择器","14.2.1 新增选择器",[22332,137247,137249],{"id":137248},"_14211-属性选择器","14.2.1.1 属性选择器",[1823,137251],{"style":126659,"src":137252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[25,137254,137256],{"className":126803,"code":137255,"language":126805,"meta":30,"style":30},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[32,137257,137258,137273,137289],{"__ignoreMap":30},[35,137259,137260,137262,137264,137266,137268,137270],{"class":37,"line":38},[35,137261,54147],{"class":51626},[35,137263,1384],{"class":359},[35,137265,103429],{"class":48},[35,137267,544],{"class":495},[35,137269,63025],{"class":306},[35,137271,137272],{"class":359},"] {\n",[35,137274,137275,137277,137279,137281,137283,137285,137287],{"class":37,"line":45},[35,137276,71221],{"class":58},[35,137278,51763],{"class":359},[35,137280,713],{"class":58},[35,137282,51818],{"class":495},[35,137284,51847],{"class":58},[35,137286,130383],{"class":58},[35,137288,1655],{"class":359},[35,137290,137291],{"class":37,"line":55},[35,137292,1926],{"class":359},[1823,137294],{"style":126659,"src":137295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[21,137297,528],{},[1501,137299,137300,137303,137306,137309],{},[17,137301,137302],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[17,137304,137305],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[17,137307,137308],{},"属性选择器也可以选择出来自定义的属性",[17,137310,137311,137313],{},[645,137312,9359],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22332,137315,137317],{"id":137316},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1823,137319],{"style":126659,"src":137320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[14,137322,137323],{},[17,137324,137325],{},"fist-child",[25,137327,137329],{"className":126803,"code":137328,"language":126805,"meta":30,"style":30},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[32,137330,137331,137336,137351,137371,137389],{"__ignoreMap":30},[35,137332,137333],{"class":37,"line":38},[35,137334,137335],{"class":41},"\u002F* 属性选择器 *\u002F\n",[35,137337,137338,137340,137342,137344,137346,137348],{"class":37,"line":45},[35,137339,54147],{"class":51626},[35,137341,1384],{"class":359},[35,137343,103429],{"class":48},[35,137345,544],{"class":495},[35,137347,63025],{"class":306},[35,137349,137350],{"class":359},"] { }\n",[35,137352,137353,137355,137357,137359,137362,137365,137368],{"class":37,"line":55},[35,137354,54147],{"class":51626},[35,137356,1384],{"class":359},[35,137358,15028],{"class":48},[35,137360,137361],{"class":495},"^=",[35,137363,137364],{"class":306},"\"icon\"",[35,137366,137367],{"class":359},"] { }  ",[35,137369,137370],{"class":41},"\u002F* 以 icon 开头 *\u002F\n",[35,137372,137373,137375,137377,137379,137382,137384,137386],{"class":37,"line":65},[35,137374,54147],{"class":51626},[35,137376,1384],{"class":359},[35,137378,15028],{"class":48},[35,137380,137381],{"class":495},"$=",[35,137383,137364],{"class":306},[35,137385,137367],{"class":359},[35,137387,137388],{"class":41},"\u002F* 以 icon 结尾 *\u002F\n",[35,137390,137391,137393,137395,137397,137400,137402,137404],{"class":37,"line":74},[35,137392,54147],{"class":51626},[35,137394,1384],{"class":359},[35,137396,15028],{"class":48},[35,137398,137399],{"class":495},"*=",[35,137401,137364],{"class":306},[35,137403,137367],{"class":359},[35,137405,137406],{"class":41},"\u002F* 包含 icon *\u002F\n",[21,137408,137409],{},"ul的第一个儿子文本为红色",[21,137411,137412],{},"一定要在冒号前加空格，不然就是选中所有的了",[25,137414,137416],{"className":126803,"code":137415,"language":126805,"meta":30,"style":30},".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",[32,137417,137418,137424,137434,137438,137442,137447,137460,137473,137489,137506,137523],{"__ignoreMap":30},[35,137419,137420,137422],{"class":37,"line":38},[35,137421,127094],{"class":48},[35,137423,15906],{"class":359},[35,137425,137426,137428,137430,137432],{"class":37,"line":45},[35,137427,71230],{"class":58},[35,137429,51763],{"class":359},[35,137431,57747],{"class":58},[35,137433,1655],{"class":359},[35,137435,137436],{"class":37,"line":55},[35,137437,1926],{"class":359},[35,137439,137440],{"class":37,"line":65},[35,137441,136264],{"class":359},[35,137443,137444],{"class":37,"line":74},[35,137445,137446],{"class":41},"\u002F* 结构伪类选择器 *\u002F\n",[35,137448,137449,137451,137454,137457],{"class":37,"line":83},[35,137450,17],{"class":51626},[35,137452,137453],{"class":48},":first-child",[35,137455,137456],{"class":359}," { }           ",[35,137458,137459],{"class":41},"\u002F* 第一个 *\u002F\n",[35,137461,137462,137464,137467,137470],{"class":37,"line":92},[35,137463,17],{"class":51626},[35,137465,137466],{"class":48},":last-child",[35,137468,137469],{"class":359}," { }            ",[35,137471,137472],{"class":41},"\u002F* 最后一个 *\u002F\n",[35,137474,137475,137477,137479,137481,137483,137486],{"class":37,"line":101},[35,137476,17],{"class":51626},[35,137478,129717],{"class":48},[35,137480,499],{"class":359},[35,137482,574],{"class":58},[35,137484,137485],{"class":359},") { }          ",[35,137487,137488],{"class":41},"\u002F* 第2个 *\u002F\n",[35,137490,137491,137493,137495,137497,137500,137503],{"class":37,"line":110},[35,137492,17],{"class":51626},[35,137494,129717],{"class":48},[35,137496,499],{"class":359},[35,137498,137499],{"class":58},"2n",[35,137501,137502],{"class":359},") { }         ",[35,137504,137505],{"class":41},"\u002F* 偶数 *\u002F\n",[35,137507,137508,137510,137512,137514,137517,137520],{"class":37,"line":119},[35,137509,17],{"class":51626},[35,137511,129717],{"class":48},[35,137513,499],{"class":359},[35,137515,137516],{"class":58},"2n+1",[35,137518,137519],{"class":359},") { }       ",[35,137521,137522],{"class":41},"\u002F* 奇数 *\u002F\n",[35,137524,137525,137527,137529,137531,137534,137536],{"class":37,"line":128},[35,137526,17],{"class":51626},[35,137528,129717],{"class":48},[35,137530,499],{"class":359},[35,137532,137533],{"class":58},"-n+3",[35,137535,137519],{"class":359},[35,137537,137538],{"class":41},"\u002F* 前3个 *\u002F\n",[51937,137540,137543],{"className":137541},[137542],"example","\n  示例内容\n",[21,137545,137546],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1501,137548,137549],{},[17,137550,137551,137554],{},[32,137552,137553],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[21,137556,137557],{},"也就是说它选择的是熊大",[14,137559,137560],{"start":83},[17,137561,137562],{},"权重",[25,137564,137566],{"className":126803,"code":137565,"language":126805,"meta":30,"style":30},"\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",[32,137567,137568,137572,137582,137592,137606,137620,137634],{"__ignoreMap":30},[35,137569,137570],{"class":37,"line":38},[35,137571,137446],{"class":41},[35,137573,137574,137576,137578,137580],{"class":37,"line":45},[35,137575,17],{"class":51626},[35,137577,137453],{"class":48},[35,137579,137456],{"class":359},[35,137581,137459],{"class":41},[35,137583,137584,137586,137588,137590],{"class":37,"line":55},[35,137585,17],{"class":51626},[35,137587,137466],{"class":48},[35,137589,137469],{"class":359},[35,137591,137472],{"class":41},[35,137593,137594,137596,137598,137600,137602,137604],{"class":37,"line":65},[35,137595,17],{"class":51626},[35,137597,129717],{"class":48},[35,137599,499],{"class":359},[35,137601,574],{"class":58},[35,137603,137485],{"class":359},[35,137605,137488],{"class":41},[35,137607,137608,137610,137612,137614,137616,137618],{"class":37,"line":74},[35,137609,17],{"class":51626},[35,137611,129717],{"class":48},[35,137613,499],{"class":359},[35,137615,137499],{"class":58},[35,137617,137502],{"class":359},[35,137619,137505],{"class":41},[35,137621,137622,137624,137626,137628,137630,137632],{"class":37,"line":83},[35,137623,17],{"class":51626},[35,137625,129717],{"class":48},[35,137627,499],{"class":359},[35,137629,137516],{"class":58},[35,137631,137519],{"class":359},[35,137633,137522],{"class":41},[35,137635,137636,137638,137640,137642,137644,137646],{"class":37,"line":92},[35,137637,17],{"class":51626},[35,137639,129717],{"class":48},[35,137641,499],{"class":359},[35,137643,137533],{"class":58},[35,137645,137519],{"class":359},[35,137647,137538],{"class":41},[21,137649,137650],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22332,137652,137654],{"id":137653},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[21,137656,137657],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1823,137659],{"style":126659,"src":137660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[14,137662,137663],{},[17,137664,528],{},[1501,137666,137667,137670,137673,137676,137679,137682],{},[17,137668,137669],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[17,137671,137672],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[17,137674,137675],{},"语法： element::before {}",[17,137677,137678],{},"before 和 after 必须有 content 属性",[17,137680,137681],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[17,137683,137684],{},"伪元素选择器和标签选择器一样，权重为 1",[14,137686,137687],{"start":45},[17,137688,137689],{},"实例",[25,137691,137692],{"className":126803,"code":137565,"language":126805,"meta":30,"style":30},[32,137693,137694,137698,137708,137718,137732,137746,137760],{"__ignoreMap":30},[35,137695,137696],{"class":37,"line":38},[35,137697,137446],{"class":41},[35,137699,137700,137702,137704,137706],{"class":37,"line":45},[35,137701,17],{"class":51626},[35,137703,137453],{"class":48},[35,137705,137456],{"class":359},[35,137707,137459],{"class":41},[35,137709,137710,137712,137714,137716],{"class":37,"line":55},[35,137711,17],{"class":51626},[35,137713,137466],{"class":48},[35,137715,137469],{"class":359},[35,137717,137472],{"class":41},[35,137719,137720,137722,137724,137726,137728,137730],{"class":37,"line":65},[35,137721,17],{"class":51626},[35,137723,129717],{"class":48},[35,137725,499],{"class":359},[35,137727,574],{"class":58},[35,137729,137485],{"class":359},[35,137731,137488],{"class":41},[35,137733,137734,137736,137738,137740,137742,137744],{"class":37,"line":74},[35,137735,17],{"class":51626},[35,137737,129717],{"class":48},[35,137739,499],{"class":359},[35,137741,137499],{"class":58},[35,137743,137502],{"class":359},[35,137745,137505],{"class":41},[35,137747,137748,137750,137752,137754,137756,137758],{"class":37,"line":83},[35,137749,17],{"class":51626},[35,137751,129717],{"class":48},[35,137753,499],{"class":359},[35,137755,137516],{"class":58},[35,137757,137519],{"class":359},[35,137759,137522],{"class":41},[35,137761,137762,137764,137766,137768,137770,137772],{"class":37,"line":92},[35,137763,17],{"class":51626},[35,137765,129717],{"class":48},[35,137767,499],{"class":359},[35,137769,137533],{"class":58},[35,137771,137519],{"class":359},[35,137773,137538],{"class":41},[1823,137775],{"style":126659,"src":137776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[14,137778,137779],{"start":55},[17,137780,137781],{},"使用场景1",[1823,137783],{"style":126659,"src":137784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[21,137786,137787],{},"不需要再加盒子来整红色那部分了",[25,137789,137791],{"className":126803,"code":137790,"language":126805,"meta":30,"style":30},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[32,137792,137793,137798,137807,137818,137828,137832,137841,137852,137862],{"__ignoreMap":30},[35,137794,137795],{"class":37,"line":38},[35,137796,137797],{"class":41},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[35,137799,137800,137802,137805],{"class":37,"line":45},[35,137801,51937],{"class":51626},[35,137803,137804],{"class":48},"::before",[35,137806,15906],{"class":359},[35,137808,137809,137812,137814,137816],{"class":37,"line":55},[35,137810,137811],{"class":58},"  content",[35,137813,51763],{"class":359},[35,137815,7986],{"class":306},[35,137817,1655],{"class":359},[35,137819,137820,137822,137824,137826],{"class":37,"line":65},[35,137821,128419],{"class":58},[35,137823,51763],{"class":359},[35,137825,61195],{"class":58},[35,137827,1655],{"class":359},[35,137829,137830],{"class":37,"line":74},[35,137831,1926],{"class":359},[35,137833,137834,137836,137839],{"class":37,"line":83},[35,137835,51937],{"class":51626},[35,137837,137838],{"class":48},"::after",[35,137840,15906],{"class":359},[35,137842,137843,137845,137847,137850],{"class":37,"line":92},[35,137844,137811],{"class":58},[35,137846,51763],{"class":359},[35,137848,137849],{"class":306},"\"→\"",[35,137851,1655],{"class":359},[35,137853,137854,137856,137858,137860],{"class":37,"line":101},[35,137855,71230],{"class":58},[35,137857,51763],{"class":359},[35,137859,62396],{"class":58},[35,137861,1655],{"class":359},[35,137863,137864],{"class":37,"line":110},[35,137865,1926],{"class":359},[1823,137867],{"style":126659,"src":137868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[21,137870,137871],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1823,137873],{"style":126659,"src":137874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[21,137876,137877],{},"但是在引用时需要先转义一下",[21,137879,137880],{},"content='\\e930'",[14,137882,137883],{"start":65},[17,137884,137885],{},"使用场景2",[21,137887,137888],{},"仿土豆效果",[21,137890,137891],{},"通过使用伪元素选择器可以减少body中盒子的数量",[25,137893,137894],{"className":126803,"code":137790,"language":126805,"meta":30,"style":30},[32,137895,137896,137900,137908,137918,137928,137932,137940,137950,137960],{"__ignoreMap":30},[35,137897,137898],{"class":37,"line":38},[35,137899,137797],{"class":41},[35,137901,137902,137904,137906],{"class":37,"line":45},[35,137903,51937],{"class":51626},[35,137905,137804],{"class":48},[35,137907,15906],{"class":359},[35,137909,137910,137912,137914,137916],{"class":37,"line":55},[35,137911,137811],{"class":58},[35,137913,51763],{"class":359},[35,137915,7986],{"class":306},[35,137917,1655],{"class":359},[35,137919,137920,137922,137924,137926],{"class":37,"line":65},[35,137921,128419],{"class":58},[35,137923,51763],{"class":359},[35,137925,61195],{"class":58},[35,137927,1655],{"class":359},[35,137929,137930],{"class":37,"line":74},[35,137931,1926],{"class":359},[35,137933,137934,137936,137938],{"class":37,"line":83},[35,137935,51937],{"class":51626},[35,137937,137838],{"class":48},[35,137939,15906],{"class":359},[35,137941,137942,137944,137946,137948],{"class":37,"line":92},[35,137943,137811],{"class":58},[35,137945,51763],{"class":359},[35,137947,137849],{"class":306},[35,137949,1655],{"class":359},[35,137951,137952,137954,137956,137958],{"class":37,"line":101},[35,137953,71230],{"class":58},[35,137955,51763],{"class":359},[35,137957,62396],{"class":58},[35,137959,1655],{"class":359},[35,137961,137962],{"class":37,"line":110},[35,137963,1926],{"class":359},[1823,137965],{"style":126659,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[14,137968,137969],{"start":74},[17,137970,137971],{},"使用场景3",[21,137973,137974],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[25,137976,137978],{"className":126803,"code":137977,"language":126805,"meta":30,"style":30},".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",[32,137979,137980,137986,137996,138000,138004,138008,138016,138026,138036,138040,138048,138058,138068],{"__ignoreMap":30},[35,137981,137982,137984],{"class":37,"line":38},[35,137983,130651],{"class":48},[35,137985,15906],{"class":359},[35,137987,137988,137990,137992,137994],{"class":37,"line":45},[35,137989,131283],{"class":58},[35,137991,51763],{"class":359},[35,137993,24070],{"class":58},[35,137995,1655],{"class":359},[35,137997,137998],{"class":37,"line":55},[35,137999,1926],{"class":359},[35,138001,138002],{"class":37,"line":65},[35,138003,136264],{"class":359},[35,138005,138006],{"class":37,"line":74},[35,138007,137797],{"class":41},[35,138009,138010,138012,138014],{"class":37,"line":83},[35,138011,51937],{"class":51626},[35,138013,137804],{"class":48},[35,138015,15906],{"class":359},[35,138017,138018,138020,138022,138024],{"class":37,"line":92},[35,138019,137811],{"class":58},[35,138021,51763],{"class":359},[35,138023,7986],{"class":306},[35,138025,1655],{"class":359},[35,138027,138028,138030,138032,138034],{"class":37,"line":101},[35,138029,128419],{"class":58},[35,138031,51763],{"class":359},[35,138033,61195],{"class":58},[35,138035,1655],{"class":359},[35,138037,138038],{"class":37,"line":110},[35,138039,1926],{"class":359},[35,138041,138042,138044,138046],{"class":37,"line":119},[35,138043,51937],{"class":51626},[35,138045,137838],{"class":48},[35,138047,15906],{"class":359},[35,138049,138050,138052,138054,138056],{"class":37,"line":128},[35,138051,137811],{"class":58},[35,138053,51763],{"class":359},[35,138055,137849],{"class":306},[35,138057,1655],{"class":359},[35,138059,138060,138062,138064,138066],{"class":37,"line":137},[35,138061,71230],{"class":58},[35,138063,51763],{"class":359},[35,138065,62396],{"class":58},[35,138067,1655],{"class":359},[35,138069,138070],{"class":37,"line":144},[35,138071,1926],{"class":359},[21,138073,138074],{},"div {\nmargin: 0 auto;\n}",[25,138076,138079],{"className":138077,"code":138078,"language":5521},[5519],"\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",[32,138080,138078],{"__ignoreMap":30},[21,138082,138083],{},"如果想让多个元素都发生变化",[21,138085,138086],{},"不能如下操作：",[21,138088,138089],{},"transition: width 2s ease 0.5s;",[21,138091,138092],{},"transition: height 2s ease 0.5s;不对！！！",[21,138094,138095],{},"上方会样式冲突，导致不显示任何过渡效果",[21,138097,138098],{},"使用如下：加逗号隔开",[21,138100,138101],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[21,138103,138104],{},"transition all 2s ease;",[465,138106,138108],{"id":138107},"_1426-过渡练习","14.2.6 过渡练习",[14,138110,138111],{},[17,138112,138113],{},"进度条",[1823,138115],{"style":126659,"src":138116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[25,138118,138120],{"className":126803,"code":138119,"language":126805,"meta":30,"style":30},"div {\n  transition: all 0.3s ease;\n}\n",[32,138121,138122,138128,138146],{"__ignoreMap":30},[35,138123,138124,138126],{"class":37,"line":38},[35,138125,51937],{"class":51626},[35,138127,15906],{"class":359},[35,138129,138130,138133,138135,138137,138140,138142,138144],{"class":37,"line":45},[35,138131,138132],{"class":58},"  transition",[35,138134,51763],{"class":359},[35,138136,28449],{"class":58},[35,138138,138139],{"class":58}," 0.3",[35,138141,1189],{"class":495},[35,138143,79005],{"class":58},[35,138145,1655],{"class":359},[35,138147,138148],{"class":37,"line":55},[35,138149,1926],{"class":359},[14,138151,138152],{"start":45},[17,138153,138154],{},"小米logo",[21,138156,138157],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[25,138159,138161],{"className":126803,"code":138160,"language":126805,"meta":30,"style":30},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[32,138162,138163,138168,138174,138190,138195],{"__ignoreMap":30},[35,138164,138165],{"class":37,"line":38},[35,138166,138167],{"class":41},"\u002F* CSS3 过渡 *\u002F\n",[35,138169,138170,138172],{"class":37,"line":45},[35,138171,51937],{"class":51626},[35,138173,15906],{"class":359},[35,138175,138176,138178,138180,138182,138184,138186,138188],{"class":37,"line":55},[35,138177,138132],{"class":58},[35,138179,51763],{"class":359},[35,138181,28449],{"class":58},[35,138183,138139],{"class":58},[35,138185,1189],{"class":495},[35,138187,79005],{"class":58},[35,138189,1655],{"class":359},[35,138191,138192],{"class":37,"line":65},[35,138193,138194],{"class":41},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[35,138196,138197],{"class":37,"line":74},[35,138198,1926],{"class":359},[21,138200,138201],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[416,138203,138204],{},"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":30,"searchDepth":45,"depth":45,"links":138206},[138207,138212],{"id":136537,"depth":45,"text":136538,"children":138208},[138209,138210,138211],{"id":136541,"depth":55,"text":136542},{"id":136618,"depth":55,"text":136619},{"id":136949,"depth":55,"text":136950},{"id":137240,"depth":45,"text":137241,"children":138213},[138214,138215],{"id":137244,"depth":55,"text":137245},{"id":138107,"depth":55,"text":138108},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136529,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138222,"title":138223,"body":138224,"description":421,"extension":422,"meta":139968,"navigation":140,"path":139969,"seo":139970,"stem":139971,"__hash__":139972},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138225,"toc":139949},[138226,138229,138233,138236,138242,138248,138252,138254,138257,138260,138263,138266,138269,138272,138275,138279,138283,138286,138289,138292,138296,138299,138302,138307,138310,138313,138316,138320,138323,138332,138335,138338,138342,138345,138348,138353,138360,138374,138382,138389,138394,138397,138400,138403,138410,138414,138420,138426,138429,138432,138437,138443,138445,138453,138458,138461,138467,138469,138474,138479,138482,138484,138489,138492,138497,138502,138536,138540,138544,138547,138551,138554,138640,138643,138680,138683,138719,138723,138728,138741,138795,138797,138825,138827,138855,138861,138875,138877,138921,138923,138967,138970,138977,138988,138990,139017,139019,139045,139052,139068,139070,139164,139166,139260,139267,139270,139275,139281,139355,139358,139360,139396,139398,139434,139437,139444,139463,139466,139469,139471,139496,139498,139522,139525,139528,139558,139562,139565,139628,139630,139696,139698,139762,139765,139797,139799,139825,139827,139853,139856,139887,139889,139915,139917,139943,139946],[10,138227,138223],{"id":138228},"_15-品优购项目上篇-搭建与公共模块",[438,138230,138232],{"id":138231},"_151-项目规划","15.1 项目规划",[1823,138234],{"style":126659,"src":138235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[21,138237,138238,138241],{},[645,138239,138240],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[21,138243,138244,138247],{},[645,138245,138246],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[438,138249,138251],{"id":138250},"_152-项目介绍","15.2 项目介绍",[21,138253,138240],{},[1823,138255],{"style":126659,"src":138256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[21,138258,138259],{},"主页：",[1823,138261],{"style":126659,"src":138262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[21,138264,138265],{},"列表页：",[1823,138267],{"style":126659,"src":138268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[21,138270,138271],{},"注册页：",[1823,138273],{"style":126659,"src":138274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[438,138276,138278],{"id":138277},"_153-项目搭建工作","15.3 项目搭建工作",[465,138280,138282],{"id":138281},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1823,138284],{"style":126659,"src":138285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[21,138287,138288],{},"经常更换的图片要放到upload文件夹中",[21,138290,138291],{},"不经常换的放到images文件夹中",[465,138293,138295],{"id":138294},"_1532-创建文件如下","15.3.2 创建文件如下",[1823,138297],{"style":126659,"src":138298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1823,138300],{"style":126659,"src":138301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[21,138303,138304],{},[645,138305,138306],{},"初始化样式：",[21,138308,138309],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[21,138311,138312],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[21,138314,138315],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[465,138317,138319],{"id":138318},"_1533-项目模块化开发","15.3.3 项目模块化开发",[21,138321,138322],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[21,138324,138325,138326,138331],{},"这里最典型的应用就是 ",[645,138327,138328],{},[32,138329,138330],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1823,138333],{"style":126659,"src":138334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[21,138336,138337],{},"通过link方法来引入",[465,138339,138341],{"id":138340},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1823,138343],{"style":126659,"src":138344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[21,138346,138347],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[14,138349,138350],{},[17,138351,138352],{},"制作favicon图标",[21,138354,138355,138356,138359],{},"①把品优购图标切成 ",[32,138357,138358],{},"png"," 图片",[21,138361,138362,138363,138365,138366,138369,138370],{},"②把 ",[32,138364,138358],{}," 图片转换为 ",[32,138367,138368],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[734,138371,138372],{"href":138372,"rel":138373},"http:\u002F\u002Fwww.bitbug.net\u002F",[24198],[14,138375,138376,138379],{"start":45},[17,138377,138378],{},"favicon图标放到网站根目录下",[17,138380,138381],{},"HTML页面引入favicon",[21,138383,138384,138385,138388],{},"在html 页面里面的 ",[32,138386,138387],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[21,138390,138391],{},[32,138392,138393],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[21,138395,138396],{},"复制这行代码或者在生成这个的网站进行复制",[1823,138398],{"style":126659,"src":138399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[21,138401,138402],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[21,138404,138405,138406],{},"例如:",[734,138407,138408],{"href":138408,"rel":138409},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24198],[465,138411,138413],{"id":138412},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[21,138415,138416,138419],{},[645,138417,138418],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[21,138421,138422,138425],{},[645,138423,138424],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[21,138427,138428],{},"页面必须有三个标签用来符合 SEO 优化",[1823,138430],{"style":126659,"src":138431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[14,138433,138434],{},[17,138435,138436],{},"title网站标题",[21,138438,138439,138442],{},[645,138440,138441],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[21,138444,69116],{},[1501,138446,138447,138450],{},[17,138448,138449],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[17,138451,138452],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[14,138454,138455],{"start":45},[17,138456,138457],{},"description网站描述",[21,138459,138460],{},"简要说明我们网站主要是做什么的",[21,138462,138463,138466],{},[645,138464,138465],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[21,138468,69116],{},[21,138470,138471],{},[32,138472,138473],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[14,138475,138476],{"start":55},[17,138477,138478],{},"keywords关键词",[21,138480,138481],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[21,138483,69116],{},[21,138485,138486],{},[32,138487,138488],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[21,138490,138491],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[21,138493,138494],{},[645,138495,138496],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[14,138498,138499],{"start":65},[17,138500,138501],{},"代码总结",[25,138503,138504],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,138505,138506,138510,138524,138528],{"__ignoreMap":30},[35,138507,138508],{"class":37,"line":38},[35,138509,130914],{"class":41},[35,138511,138512,138514,138516,138518,138520,138522],{"class":37,"line":45},[35,138513,1404],{"class":359},[35,138515,51937],{"class":51626},[35,138517,53812],{"class":48},[35,138519,544],{"class":359},[35,138521,130927],{"class":306},[35,138523,51633],{"class":359},[35,138525,138526],{"class":37,"line":55},[35,138527,130934],{"class":359},[35,138529,138530,138532,138534],{"class":37,"line":65},[35,138531,52111],{"class":359},[35,138533,51937],{"class":51626},[35,138535,51633],{"class":359},[438,138537,138539],{"id":138538},"_154-项目公共部分制作","15.4 项目公共部分制作",[465,138541,138543],{"id":138542},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1823,138545],{"style":126659,"src":138546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[465,138548,138550],{"id":138549},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[21,138552,138553],{},"布局思路：",[1501,138555,138556,138559,138562,138584,138617],{},[17,138557,138558],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[17,138560,138561],{},"里面包含版心的盒子",[17,138563,138564,138565],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1501,138566,138567,138575,138581],{},[17,138568,138569,138570,21834,138572,138574],{},"1 号盒子 里面包含一个",[32,138571,1501],{},[32,138573,1501],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[17,138576,138577,138578,138580],{},"里面的内容是水平排列，所以需要给",[32,138579,17],{},"设置浮动",[17,138582,138583],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[17,138585,138586,138587],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1501,138588,138589,138603,138608],{},[17,138590,138591,138592,21834,138594,138596,138597,138599,138600,138602],{},"2 号盒子 里面包含一个",[32,138593,1501],{},[32,138595,1501],{},"包裹",[32,138598,17],{},"，中间的",[32,138601,1415],{},"可以用样式去设置，也可以用字符 |",[17,138604,138605,138606,138580],{},"里面内容水平排列，给",[32,138607,17],{},[17,138609,138610,138611,138613,138614,138616],{},"找到里面所有偶数的 ",[32,138612,17],{}," 设置样式（偶数的 ",[32,138615,17],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[17,138618,138619,138620],{},"需要用到字体图标",[1501,138621,138622,138628,138631,138634,138637],{},[17,138623,138624,138625],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[32,138626,138627],{},"arrow-icon",[17,138629,138630],{},"先要引入字体图片的资源",[17,138632,138633],{},"在样式里面利用 font-face 来进行声明",[17,138635,138636],{},"在伪元素的 content属性设置 图标的编码",[17,138638,138639],{},"给伪元素设置font-family属性",[21,138641,138642],{},"结构实例代码：",[25,138644,138646],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},"div::before {\n  content: \"\";\n  display: block;\n}\n",[32,138647,138648,138656,138666,138676],{"__ignoreMap":30},[35,138649,138650,138652,138654],{"class":37,"line":38},[35,138651,51937],{"class":51626},[35,138653,137804],{"class":48},[35,138655,15906],{"class":359},[35,138657,138658,138660,138662,138664],{"class":37,"line":45},[35,138659,137811],{"class":58},[35,138661,51763],{"class":359},[35,138663,7986],{"class":306},[35,138665,1655],{"class":359},[35,138667,138668,138670,138672,138674],{"class":37,"line":55},[35,138669,128419],{"class":58},[35,138671,51763],{"class":359},[35,138673,61195],{"class":58},[35,138675,1655],{"class":359},[35,138677,138678],{"class":37,"line":65},[35,138679,1926],{"class":359},[21,138681,138682],{},"样式实例代码：",[25,138684,138685],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,138686,138687,138695,138705,138715],{"__ignoreMap":30},[35,138688,138689,138691,138693],{"class":37,"line":38},[35,138690,51937],{"class":51626},[35,138692,137804],{"class":48},[35,138694,15906],{"class":359},[35,138696,138697,138699,138701,138703],{"class":37,"line":45},[35,138698,137811],{"class":58},[35,138700,51763],{"class":359},[35,138702,7986],{"class":306},[35,138704,1655],{"class":359},[35,138706,138707,138709,138711,138713],{"class":37,"line":55},[35,138708,128419],{"class":58},[35,138710,51763],{"class":359},[35,138712,61195],{"class":58},[35,138714,1655],{"class":359},[35,138716,138717],{"class":37,"line":65},[35,138718,1926],{"class":359},[465,138720,138722],{"id":138721},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1501,138724,138725],{},[17,138726,138727],{},"header 盒子必须要有高度",[21,138729,138730,138731,138733,138734],{},"1 号盒子是 ",[32,138732,131815],{}," 标志定位，在正常开发过程中， ",[645,138735,138736,138737,138740],{},"logo的布局其实是有讲究的，需要进行 ",[32,138738,138739],{},"logoSEO","的优化 （★★★）",[1501,138742,138743,138751,138759,138786],{},[17,138744,138745,138747,138748,138750],{},[32,138746,131815],{}," 里面首先放一个 ",[32,138749,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[17,138752,138753,138755,138756,138758],{},[32,138754,10],{}," 里面再放一个链接，可以返回首页的，把 ",[32,138757,131815],{}," 的背景图片给链接即可",[17,138760,138761,138762],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1501,138763,138764,138779],{},[17,138765,138766,138767,138770,138771,138774,138775,138778],{},"方法1：",[32,138768,138769],{},"text-indent"," 移到盒子外面（",[32,138772,138773],{},"text-indent: -9999px",") ，然后 ",[32,138776,138777],{},"overflow:hidden"," ，淘宝的做法",[17,138780,138781,138782,138785],{},"方法2：直接给 ",[32,138783,138784],{},"font-size: 0;"," 就看不到文字了，京东的做法",[17,138787,138788,138789,138791,138792,138794],{},"最后给链接一个 ",[32,138790,51733],{}," 属性，这样鼠标放到 ",[32,138793,131815],{}," 上就可以看到提示文字了",[21,138796,138642],{},[25,138798,138799],{"className":127550,"code":132036,"language":127552,"meta":30,"style":30},[32,138800,138801],{"__ignoreMap":30},[35,138802,138803,138805,138807,138809,138811,138813,138815,138817,138819,138821,138823],{"class":37,"line":38},[35,138804,1404],{"class":359},[35,138806,734],{"class":51626},[35,138808,61383],{"class":48},[35,138810,544],{"class":359},[35,138812,132051],{"class":306},[35,138814,132054],{"class":48},[35,138816,544],{"class":359},[35,138818,132059],{"class":306},[35,138820,132062],{"class":359},[35,138822,734],{"class":51626},[35,138824,51633],{"class":359},[21,138826,138682],{},[25,138828,138829],{"className":127550,"code":132036,"language":127552,"meta":30,"style":30},[32,138830,138831],{"__ignoreMap":30},[35,138832,138833,138835,138837,138839,138841,138843,138845,138847,138849,138851,138853],{"class":37,"line":38},[35,138834,1404],{"class":359},[35,138836,734],{"class":51626},[35,138838,61383],{"class":48},[35,138840,544],{"class":359},[35,138842,132051],{"class":306},[35,138844,132054],{"class":48},[35,138846,544],{"class":359},[35,138848,132059],{"class":306},[35,138850,132062],{"class":359},[35,138852,734],{"class":51626},[35,138854,51633],{"class":359},[21,138856,138857,138858,138860],{},"2 号盒子是 ",[32,138859,131828],{}," 搜索模块定位",[1501,138862,138863,138866,138869,138872],{},[17,138864,138865],{},"search盒子利用定位的方式放在对应的位置",[17,138867,138868],{},"search盒子设置绝对定位，header盒子设置相对定位",[17,138870,138871],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[17,138873,138874],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[21,138876,138642],{},[25,138878,138879],{"className":126803,"code":132123,"language":126805,"meta":30,"style":30},[32,138880,138881,138903,138907,138917],{"__ignoreMap":30},[35,138882,138883,138885,138887,138889,138891,138893,138895,138897,138899,138901],{"class":37,"line":38},[35,138884,51937],{"class":51626},[35,138886,12769],{"class":359},[35,138888,21],{"class":51626},[35,138890,12769],{"class":359},[35,138892,10],{"class":51626},[35,138894,12769],{"class":359},[35,138896,1501],{"class":51626},[35,138898,12769],{"class":359},[35,138900,17],{"class":51626},[35,138902,15906],{"class":359},[35,138904,138905],{"class":37,"line":45},[35,138906,132152],{"class":41},[35,138908,138909,138911,138913,138915],{"class":37,"line":55},[35,138910,128419],{"class":58},[35,138912,51763],{"class":359},[35,138914,61195],{"class":58},[35,138916,1655],{"class":359},[35,138918,138919],{"class":37,"line":65},[35,138920,1926],{"class":359},[21,138922,138682],{},[25,138924,138925],{"className":126803,"code":132123,"language":126805,"meta":30,"style":30},[32,138926,138927,138949,138953,138963],{"__ignoreMap":30},[35,138928,138929,138931,138933,138935,138937,138939,138941,138943,138945,138947],{"class":37,"line":38},[35,138930,51937],{"class":51626},[35,138932,12769],{"class":359},[35,138934,21],{"class":51626},[35,138936,12769],{"class":359},[35,138938,10],{"class":51626},[35,138940,12769],{"class":359},[35,138942,1501],{"class":51626},[35,138944,12769],{"class":359},[35,138946,17],{"class":51626},[35,138948,15906],{"class":359},[35,138950,138951],{"class":37,"line":45},[35,138952,132152],{"class":41},[35,138954,138955,138957,138959,138961],{"class":37,"line":55},[35,138956,128419],{"class":58},[35,138958,51763],{"class":359},[35,138960,61195],{"class":58},[35,138962,1655],{"class":359},[35,138964,138965],{"class":37,"line":65},[35,138966,1926],{"class":359},[21,138968,138969],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[21,138971,138972,138973,138976],{},"3 号盒子是 ",[32,138974,138975],{},"hotwords"," 热词模块定位",[1501,138978,138979,138982,138985],{},[17,138980,138981],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[17,138983,138984],{},"给里面所有的a标签设置 左右10px的外边距",[17,138986,138987],{},"给第一个a标签设置文字变红色（#c81623）",[21,138989,138642],{},[25,138991,138993],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},"div {\n  margin: 0 auto;\n}\n",[32,138994,138995,139001,139013],{"__ignoreMap":30},[35,138996,138997,138999],{"class":37,"line":38},[35,138998,51937],{"class":51626},[35,139000,15906],{"class":359},[35,139002,139003,139005,139007,139009,139011],{"class":37,"line":45},[35,139004,70795],{"class":58},[35,139006,51763],{"class":359},[35,139008,687],{"class":58},[35,139010,51882],{"class":58},[35,139012,1655],{"class":359},[35,139014,139015],{"class":37,"line":55},[35,139016,1926],{"class":359},[21,139018,138682],{},[25,139020,139021],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,139022,139023,139029,139041],{"__ignoreMap":30},[35,139024,139025,139027],{"class":37,"line":38},[35,139026,51937],{"class":51626},[35,139028,15906],{"class":359},[35,139030,139031,139033,139035,139037,139039],{"class":37,"line":45},[35,139032,70795],{"class":58},[35,139034,51763],{"class":359},[35,139036,687],{"class":58},[35,139038,51882],{"class":58},[35,139040,1655],{"class":359},[35,139042,139043],{"class":37,"line":55},[35,139044,1926],{"class":359},[21,139046,139047,139048,139051],{},"4 号盒子是 ",[32,139049,139050],{},"shopcar"," 购物车模块",[1501,139053,139054,139059,139062,139065],{},[17,139055,123586,139056,139058],{},[32,139057,139050],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[17,139060,139061],{},"count 统计部分用绝对定位做",[17,139063,139064],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[17,139066,139067],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[21,139069,138642],{},[25,139071,139072],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,139073,139074,139078,139092,139096,139110,139114,139128,139132,139146,139150],{"__ignoreMap":30},[35,139075,139076],{"class":37,"line":38},[35,139077,132242],{"class":41},[35,139079,139080,139082,139084,139086,139088,139090],{"class":37,"line":45},[35,139081,132247],{"class":48},[35,139083,80132],{"class":359},[35,139085,129163],{"class":58},[35,139087,51763],{"class":359},[35,139089,132256],{"class":58},[35,139091,129733],{"class":359},[35,139093,139094],{"class":37,"line":55},[35,139095,132263],{"class":41},[35,139097,139098,139100,139102,139104,139106,139108],{"class":37,"line":65},[35,139099,132268],{"class":48},[35,139101,80132],{"class":359},[35,139103,129163],{"class":58},[35,139105,51763],{"class":359},[35,139107,55090],{"class":58},[35,139109,129733],{"class":359},[35,139111,139112],{"class":37,"line":74},[35,139113,132283],{"class":41},[35,139115,139116,139118,139120,139122,139124,139126],{"class":37,"line":83},[35,139117,132288],{"class":48},[35,139119,80132],{"class":359},[35,139121,129163],{"class":58},[35,139123,51763],{"class":359},[35,139125,55157],{"class":58},[35,139127,129733],{"class":359},[35,139129,139130],{"class":37,"line":92},[35,139131,132303],{"class":41},[35,139133,139134,139136,139138,139140,139142,139144],{"class":37,"line":101},[35,139135,132308],{"class":48},[35,139137,80132],{"class":359},[35,139139,129163],{"class":58},[35,139141,51763],{"class":359},[35,139143,86558],{"class":58},[35,139145,129733],{"class":359},[35,139147,139148],{"class":37,"line":110},[35,139149,132323],{"class":41},[35,139151,139152,139154,139156,139158,139160,139162],{"class":37,"line":119},[35,139153,132328],{"class":48},[35,139155,80132],{"class":359},[35,139157,129163],{"class":58},[35,139159,51763],{"class":359},[35,139161,132337],{"class":58},[35,139163,129733],{"class":359},[21,139165,138682],{},[25,139167,139168],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,139169,139170,139174,139188,139192,139206,139210,139224,139228,139242,139246],{"__ignoreMap":30},[35,139171,139172],{"class":37,"line":38},[35,139173,132242],{"class":41},[35,139175,139176,139178,139180,139182,139184,139186],{"class":37,"line":45},[35,139177,132247],{"class":48},[35,139179,80132],{"class":359},[35,139181,129163],{"class":58},[35,139183,51763],{"class":359},[35,139185,132256],{"class":58},[35,139187,129733],{"class":359},[35,139189,139190],{"class":37,"line":55},[35,139191,132263],{"class":41},[35,139193,139194,139196,139198,139200,139202,139204],{"class":37,"line":65},[35,139195,132268],{"class":48},[35,139197,80132],{"class":359},[35,139199,129163],{"class":58},[35,139201,51763],{"class":359},[35,139203,55090],{"class":58},[35,139205,129733],{"class":359},[35,139207,139208],{"class":37,"line":74},[35,139209,132283],{"class":41},[35,139211,139212,139214,139216,139218,139220,139222],{"class":37,"line":83},[35,139213,132288],{"class":48},[35,139215,80132],{"class":359},[35,139217,129163],{"class":58},[35,139219,51763],{"class":359},[35,139221,55157],{"class":58},[35,139223,129733],{"class":359},[35,139225,139226],{"class":37,"line":92},[35,139227,132303],{"class":41},[35,139229,139230,139232,139234,139236,139238,139240],{"class":37,"line":101},[35,139231,132308],{"class":48},[35,139233,80132],{"class":359},[35,139235,129163],{"class":58},[35,139237,51763],{"class":359},[35,139239,86558],{"class":58},[35,139241,129733],{"class":359},[35,139243,139244],{"class":37,"line":110},[35,139245,132323],{"class":41},[35,139247,139248,139250,139252,139254,139256,139258],{"class":37,"line":119},[35,139249,132328],{"class":48},[35,139251,80132],{"class":359},[35,139253,129163],{"class":58},[35,139255,51763],{"class":359},[35,139257,132337],{"class":58},[35,139259,129733],{"class":359},[465,139261,139263,139264,139266],{"id":139262},"_1544-nav导航模块制作","15.4.4 ",[32,139265,54039],{},"导航模块制作",[1823,139268],{"style":126659,"src":139269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[21,139271,139272,139274],{},[32,139273,54039],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[21,139276,139277,139278],{},"1 号盒子左侧浮动，",[32,139279,139280],{},"dropdown",[1501,139282,139283,139293,139301,139307,139315,139325,139333,139344],{},[17,139284,139285,139286,101343,139289,139292],{},"1号盒子有讲究，根据相关性 里面包含 ",[32,139287,139288],{},".dt",[32,139290,139291],{},".dd"," 两个盒子",[17,139294,139295,139297,139298,139300],{},[32,139296,139288],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[32,139299,139291],{}," 挤到下面去了",[17,139302,139303,139304,139306],{},"给 ",[32,139305,139291],{}," 盒子设置宽度 和 高度，以及背景颜色",[17,139308,139303,139309,139311,139312,120555],{},[32,139310,139291],{}," 盒子里面定义 无序列表 （",[32,139313,139314],{},"ul > li > a",[17,139316,139317,139318,139320,139321,139324],{},"每个 ",[32,139319,17],{}," 都有一个高度（",[32,139322,139323],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[17,139326,139303,139327,139329,139330,120555],{},[32,139328,17],{}," 里面的a设置文字大小（",[32,139331,139332],{},"14px",[17,139334,139303,139335,139337,139338,139340,139341,139343],{},[32,139336,17],{}," 设置 ",[32,139339,127964],{},"，当鼠标移入的时候，让",[32,139342,17],{},"的背景变成白色，让里面的文字变成红色",[17,139345,139346,139348,139349,139351,139352,139354],{},[32,139347,17],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[32,139350,17],{},"的右侧，那么给",[32,139353,17],{},"设置相对定位",[21,139356,139357],{},"一定要注意相关性",[21,139359,138642],{},[25,139361,139362],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,139363,139364,139372,139382,139392],{"__ignoreMap":30},[35,139365,139366,139368,139370],{"class":37,"line":38},[35,139367,51937],{"class":51626},[35,139369,137804],{"class":48},[35,139371,15906],{"class":359},[35,139373,139374,139376,139378,139380],{"class":37,"line":45},[35,139375,137811],{"class":58},[35,139377,51763],{"class":359},[35,139379,7986],{"class":306},[35,139381,1655],{"class":359},[35,139383,139384,139386,139388,139390],{"class":37,"line":55},[35,139385,128419],{"class":58},[35,139387,51763],{"class":359},[35,139389,61195],{"class":58},[35,139391,1655],{"class":359},[35,139393,139394],{"class":37,"line":65},[35,139395,1926],{"class":359},[21,139397,138682],{},[25,139399,139400],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,139401,139402,139410,139420,139430],{"__ignoreMap":30},[35,139403,139404,139406,139408],{"class":37,"line":38},[35,139405,51937],{"class":51626},[35,139407,137804],{"class":48},[35,139409,15906],{"class":359},[35,139411,139412,139414,139416,139418],{"class":37,"line":45},[35,139413,137811],{"class":58},[35,139415,51763],{"class":359},[35,139417,7986],{"class":306},[35,139419,1655],{"class":359},[35,139421,139422,139424,139426,139428],{"class":37,"line":55},[35,139423,128419],{"class":58},[35,139425,51763],{"class":359},[35,139427,61195],{"class":58},[35,139429,1655],{"class":359},[35,139431,139432],{"class":37,"line":65},[35,139433,1926],{"class":359},[21,139435,139436],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[21,139438,139439,139440,139443],{},"2 号盒子左侧浮动，",[32,139441,139442],{},"navitems"," 导航栏组",[1501,139445,139446,139451,139460],{},[17,139447,139448,139449],{},"里面结构是 ",[32,139450,139314],{},[17,139452,139453,139454,139456,139457,139459],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[32,139455,734],{},"左右的",[32,139458,31209],{},"把两侧撑开",[17,139461,139462],{},"让文字垂直居中（行高等于高度）",[1823,139464],{"style":126659,"src":139465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[21,139467,139468],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[21,139470,138642],{},[25,139472,139474],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},".box {\n  float: left;\n}\n",[32,139475,139476,139482,139492],{"__ignoreMap":30},[35,139477,139478,139480],{"class":37,"line":38},[35,139479,130651],{"class":48},[35,139481,15906],{"class":359},[35,139483,139484,139486,139488,139490],{"class":37,"line":45},[35,139485,131283],{"class":58},[35,139487,51763],{"class":359},[35,139489,24070],{"class":58},[35,139491,1655],{"class":359},[35,139493,139494],{"class":37,"line":55},[35,139495,1926],{"class":359},[21,139497,138682],{},[25,139499,139500],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,139501,139502,139508,139518],{"__ignoreMap":30},[35,139503,139504,139506],{"class":37,"line":38},[35,139505,130651],{"class":48},[35,139507,15906],{"class":359},[35,139509,139510,139512,139514,139516],{"class":37,"line":45},[35,139511,131283],{"class":58},[35,139513,51763],{"class":359},[35,139515,24070],{"class":58},[35,139517,1655],{"class":359},[35,139519,139520],{"class":37,"line":55},[35,139521,1926],{"class":359},[21,139523,139524],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1823,139526],{"style":126659,"src":139527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[25,139529,139530],{"className":126803,"code":130960,"language":126805,"meta":30,"style":30},[32,139531,139532,139538,139554],{"__ignoreMap":30},[35,139533,139534,139536],{"class":37,"line":38},[35,139535,51937],{"class":51626},[35,139537,15906],{"class":359},[35,139539,139540,139542,139544,139546,139548,139550,139552],{"class":37,"line":45},[35,139541,71221],{"class":58},[35,139543,51763],{"class":359},[35,139545,713],{"class":58},[35,139547,51818],{"class":495},[35,139549,51847],{"class":58},[35,139551,130195],{"class":58},[35,139553,1655],{"class":359},[35,139555,139556],{"class":37,"line":55},[35,139557,1926],{"class":359},[465,139559,139561],{"id":139560},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1823,139563],{"style":126659,"src":139564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1501,139566,139567,139572,139577],{},[17,139568,139569,139571],{},[32,139570,132006],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[17,139573,139574,139576],{},[32,139575,132006],{}," 里面有一个大的版心",[17,139578,139579,139580,139583,139584],{},"版心里面包含 1 号盒子，",[32,139581,139582],{},"mod_service"," 是服务模块，mod 是模块的意思",[1501,139585,139586,139591,139604,139620,139625],{},[17,139587,139303,139588,139590],{},[32,139589,139582],{}," 设置高度（80px）和下边框",[17,139592,139593,139594,139597,139598,139600,139601,139603],{},"在里面定义 ",[32,139595,139596],{},"ul > li"," ,每个",[32,139599,17],{}," 宽度是300px 高度是 50px，给每个",[32,139602,17],{},"设置35px的左内边距",[17,139605,139606,139607,139609,139610,139612,139613,139615,139616,18744,139618,120555],{},"在每个",[32,139608,17],{},"里面，放一个 ",[32,139611,23244],{},"（里面放图标），一个",[32,139614,51937],{},"（里面放",[32,139617,51937],{},[32,139619,21],{},[17,139621,139303,139622,139624],{},[32,139623,23244],{},"设置浮动，让h5与这个div左右排列",[17,139626,139627],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[21,139629,138642],{},[25,139631,139633],{"className":126803,"code":139632,"language":126805,"meta":30,"style":30},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[32,139634,139635,139641,139653,139665,139692],{"__ignoreMap":30},[35,139636,139637,139639],{"class":37,"line":38},[35,139638,134560],{"class":48},[35,139640,15906],{"class":359},[35,139642,139643,139645,139647,139649,139651],{"class":37,"line":45},[35,139644,70893],{"class":58},[35,139646,51763],{"class":359},[35,139648,1194],{"class":58},[35,139650,51818],{"class":495},[35,139652,1655],{"class":359},[35,139654,139655,139657,139659,139661,139663],{"class":37,"line":55},[35,139656,71113],{"class":58},[35,139658,51763],{"class":359},[35,139660,1194],{"class":58},[35,139662,51818],{"class":495},[35,139664,1655],{"class":359},[35,139666,139667,139669,139671,139673,139675,139677,139679,139681,139684,139686,139688,139690],{"class":37,"line":65},[35,139668,70936],{"class":58},[35,139670,51763],{"class":359},[35,139672,62052],{"class":58},[35,139674,499],{"class":359},[35,139676,134599],{"class":5550},[35,139678,14048],{"class":359},[35,139680,62062],{"class":58},[35,139682,139683],{"class":58}," -10",[35,139685,51818],{"class":495},[35,139687,134618],{"class":58},[35,139689,51818],{"class":495},[35,139691,1655],{"class":359},[35,139693,139694],{"class":37,"line":74},[35,139695,1926],{"class":359},[21,139697,138682],{},[25,139699,139700],{"className":126803,"code":139632,"language":126805,"meta":30,"style":30},[32,139701,139702,139708,139720,139732,139758],{"__ignoreMap":30},[35,139703,139704,139706],{"class":37,"line":38},[35,139705,134560],{"class":48},[35,139707,15906],{"class":359},[35,139709,139710,139712,139714,139716,139718],{"class":37,"line":45},[35,139711,70893],{"class":58},[35,139713,51763],{"class":359},[35,139715,1194],{"class":58},[35,139717,51818],{"class":495},[35,139719,1655],{"class":359},[35,139721,139722,139724,139726,139728,139730],{"class":37,"line":55},[35,139723,71113],{"class":58},[35,139725,51763],{"class":359},[35,139727,1194],{"class":58},[35,139729,51818],{"class":495},[35,139731,1655],{"class":359},[35,139733,139734,139736,139738,139740,139742,139744,139746,139748,139750,139752,139754,139756],{"class":37,"line":65},[35,139735,70936],{"class":58},[35,139737,51763],{"class":359},[35,139739,62052],{"class":58},[35,139741,499],{"class":359},[35,139743,134599],{"class":5550},[35,139745,14048],{"class":359},[35,139747,62062],{"class":58},[35,139749,139683],{"class":58},[35,139751,51818],{"class":495},[35,139753,134618],{"class":58},[35,139755,51818],{"class":495},[35,139757,1655],{"class":359},[35,139759,139760],{"class":37,"line":74},[35,139761,1926],{"class":359},[21,139763,139764],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1501,139766,139767,139770,139776,139782,139794],{},[17,139768,139769],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[17,139771,139772,139773,120555],{},"里面的布局利用 自定义列表来实现（",[32,139774,139775],{},"dl > dt + dd",[17,139777,139303,139778,139781],{},[32,139779,139780],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[17,139783,139303,139784,139787,139788,18744,139790,139793],{},[32,139785,139786],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[32,139789,139786],{},[32,139791,139792],{},"dd","之间有些距离",[17,139795,139796],{},"最后一个 dl 结构和样式不一样，需要单独设置",[21,139798,138642],{},[25,139800,139801],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,139802,139803,139809,139821],{"__ignoreMap":30},[35,139804,139805,139807],{"class":37,"line":38},[35,139806,51937],{"class":51626},[35,139808,15906],{"class":359},[35,139810,139811,139813,139815,139817,139819],{"class":37,"line":45},[35,139812,70795],{"class":58},[35,139814,51763],{"class":359},[35,139816,687],{"class":58},[35,139818,51882],{"class":58},[35,139820,1655],{"class":359},[35,139822,139823],{"class":37,"line":55},[35,139824,1926],{"class":359},[21,139826,138682],{},[25,139828,139829],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,139830,139831,139837,139849],{"__ignoreMap":30},[35,139832,139833,139835],{"class":37,"line":38},[35,139834,51937],{"class":51626},[35,139836,15906],{"class":359},[35,139838,139839,139841,139843,139845,139847],{"class":37,"line":45},[35,139840,70795],{"class":58},[35,139842,51763],{"class":359},[35,139844,687],{"class":58},[35,139846,51882],{"class":58},[35,139848,1655],{"class":359},[35,139850,139851],{"class":37,"line":55},[35,139852,1926],{"class":359},[21,139854,139855],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1501,139857,139858,139867,139870,139881],{},[17,139859,139860,139861,139863,139864,139866],{},"分为上下两块，上面是 ",[32,139862,132023],{}," 友情链接，下面是 ",[32,139865,132016],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[17,139868,139869],{},"把内容分别复制到相应模块中",[17,139871,139303,139872,139874,139875,139877,139878,139880],{},[32,139873,132023],{}," 设置 15px 的下外边距，给",[32,139876,132023],{}," 里面 的 ",[32,139879,734],{}," 标签设置 左右 3px 的外边距",[17,139882,139883,139884,139886],{},"给",[32,139885,132016],{}," 设置 20px 的行高",[21,139888,138642],{},[25,139890,139891],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,139892,139893,139899,139911],{"__ignoreMap":30},[35,139894,139895,139897],{"class":37,"line":38},[35,139896,51937],{"class":51626},[35,139898,15906],{"class":359},[35,139900,139901,139903,139905,139907,139909],{"class":37,"line":45},[35,139902,70795],{"class":58},[35,139904,51763],{"class":359},[35,139906,687],{"class":58},[35,139908,51882],{"class":58},[35,139910,1655],{"class":359},[35,139912,139913],{"class":37,"line":55},[35,139914,1926],{"class":359},[21,139916,138682],{},[25,139918,139919],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,139920,139921,139927,139939],{"__ignoreMap":30},[35,139922,139923,139925],{"class":37,"line":38},[35,139924,51937],{"class":51626},[35,139926,15906],{"class":359},[35,139928,139929,139931,139933,139935,139937],{"class":37,"line":45},[35,139930,70795],{"class":58},[35,139932,51763],{"class":359},[35,139934,687],{"class":58},[35,139936,51882],{"class":58},[35,139938,1655],{"class":359},[35,139940,139941],{"class":37,"line":55},[35,139942,1926],{"class":359},[21,139944,139945],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[416,139947,139948],{},"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":30,"searchDepth":45,"depth":45,"links":139950},[139951,139952,139953,139960],{"id":138231,"depth":45,"text":138232},{"id":138250,"depth":45,"text":138251},{"id":138277,"depth":45,"text":138278,"children":139954},[139955,139956,139957,139958,139959],{"id":138281,"depth":55,"text":138282},{"id":138294,"depth":55,"text":138295},{"id":138318,"depth":55,"text":138319},{"id":138340,"depth":55,"text":138341},{"id":138412,"depth":55,"text":138413},{"id":138538,"depth":45,"text":138539,"children":139961},[139962,139963,139964,139965,139967],{"id":138542,"depth":55,"text":138543},{"id":138549,"depth":55,"text":138550},{"id":138721,"depth":55,"text":138722},{"id":139262,"depth":55,"text":139966},"15.4.4 nav导航模块制作",{"id":139560,"depth":55,"text":139561},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138223,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139974,"title":139975,"body":139976,"description":421,"extension":422,"meta":142378,"navigation":140,"path":142379,"seo":142380,"stem":142381,"__hash__":142382},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139977,"toc":142355},[139978,139981,139985,139989,140001,140004,140007,140010,140021,140023,140047,140049,140073,140078,140081,140083,140119,140121,140157,140160,140165,140168,140171,140174,140204,140211,140214,140224,140226,140260,140263,140297,140303,140320,140322,140358,140360,140396,140401,140426,140428,140454,140456,140480,140487,140490,140554,140556,140598,140600,140640,140647,140652,140654,140684,140686,140716,140720,140723,140730,140742,140744,140770,140772,140796,140799,140801,140825,140831,140841,140843,140873,140875,140905,140912,140953,140955,140991,140993,141029,141033,141036,141039,141042,141048,141053,141056,141079,141082,141106,141109,141133,141138,141141,141144,141147,141150,141153,141227,141229,141259,141261,141291,141294,141297,141329,141333,141337,141351,141360,141363,141368,141370,141464,141466,141560,141583,141585,141609,141611,141635,141642,141645,141655,141657,141681,141686,141694,141696,141726,141731,141771,141773,141799,141801,141827,141831,141834,141839,141842,141846,141854,141861,141869,141871,141901,141903,141933,141941,141944,141947,141949,141979,141981,142011,142014,142019,142021,142045,142047,142071,142074,142159,142161,142185,142187,142211,142215,142217,142241,142243,142277,142281,142295,142298,142303,142306,142311,142314,142344,142352],[10,139979,139975],{"id":139980},"_16-品优购项目下篇-主体与页面开发",[438,139982,139984],{"id":139983},"_161-项目主体模块制作","16.1 项目主体模块制作",[465,139986,139988],{"id":139987},"_1611-首页制作","16.1.1 首页制作",[21,139990,139991,139993,139994,139996,139997,140000],{},[645,139992,102380],{}," 主体模块是 ",[645,139995,74383],{}," 里面专有的，注意需要新的样式文件 ",[645,139998,139999],{},"index.css，"," 就不要写在common.css中了",[1823,140002],{"style":126659,"src":140003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1823,140005],{"style":126659,"src":140006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[21,140008,140009],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1501,140011,140012,140015,140018],{},[17,140013,140014],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[17,140016,140017],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[17,140019,140020],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[21,140022,138642],{},[25,140024,140025],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,140026,140027,140033,140043],{"__ignoreMap":30},[35,140028,140029,140031],{"class":37,"line":38},[35,140030,130651],{"class":48},[35,140032,15906],{"class":359},[35,140034,140035,140037,140039,140041],{"class":37,"line":45},[35,140036,131283],{"class":58},[35,140038,51763],{"class":359},[35,140040,24070],{"class":58},[35,140042,1655],{"class":359},[35,140044,140045],{"class":37,"line":55},[35,140046,1926],{"class":359},[21,140048,138682],{},[25,140050,140051],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,140052,140053,140059,140069],{"__ignoreMap":30},[35,140054,140055,140057],{"class":37,"line":38},[35,140056,130651],{"class":48},[35,140058,15906],{"class":359},[35,140060,140061,140063,140065,140067],{"class":37,"line":45},[35,140062,131283],{"class":58},[35,140064,51763],{"class":359},[35,140066,24070],{"class":58},[35,140068,1655],{"class":359},[35,140070,140071],{"class":37,"line":55},[35,140072,1926],{"class":359},[14,140074,140075],{},[17,140076,140077],{},"左侧focus模块制作",[1823,140079],{"style":126659,"src":140080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[21,140082,138642],{},[25,140084,140085],{"className":126803,"code":128126,"language":126805,"meta":30,"style":30},[32,140086,140087,140095,140105,140115],{"__ignoreMap":30},[35,140088,140089,140091,140093],{"class":37,"line":38},[35,140090,54147],{"class":51626},[35,140092,62226],{"class":48},[35,140094,15906],{"class":359},[35,140096,140097,140099,140101,140103],{"class":37,"line":45},[35,140098,128141],{"class":58},[35,140100,51763],{"class":359},[35,140102,55215],{"class":58},[35,140104,1655],{"class":359},[35,140106,140107,140109,140111,140113],{"class":37,"line":55},[35,140108,71123],{"class":58},[35,140110,51763],{"class":359},[35,140112,55063],{"class":58},[35,140114,1655],{"class":359},[35,140116,140117],{"class":37,"line":65},[35,140118,1926],{"class":359},[21,140120,138682],{},[25,140122,140123],{"className":126803,"code":128126,"language":126805,"meta":30,"style":30},[32,140124,140125,140133,140143,140153],{"__ignoreMap":30},[35,140126,140127,140129,140131],{"class":37,"line":38},[35,140128,54147],{"class":51626},[35,140130,62226],{"class":48},[35,140132,15906],{"class":359},[35,140134,140135,140137,140139,140141],{"class":37,"line":45},[35,140136,128141],{"class":58},[35,140138,51763],{"class":359},[35,140140,55215],{"class":58},[35,140142,1655],{"class":359},[35,140144,140145,140147,140149,140151],{"class":37,"line":55},[35,140146,71123],{"class":58},[35,140148,51763],{"class":359},[35,140150,55063],{"class":58},[35,140152,1655],{"class":359},[35,140154,140155],{"class":37,"line":65},[35,140156,1926],{"class":359},[21,140158,140159],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[14,140161,140162],{"start":45},[17,140163,140164],{},"右侧newsflash模块制作",[1823,140166],{"style":126659,"src":140167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[21,140169,140170],{},"右侧的模块 分为上中下三个盒子",[21,140172,140173],{},"结构代码：",[25,140175,140176],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,140177,140178],{"__ignoreMap":30},[35,140179,140180,140182,140184,140186,140188,140190,140192,140194,140196,140198,140200,140202],{"class":37,"line":38},[35,140181,1404],{"class":359},[35,140183,1823],{"class":51626},[35,140185,55565],{"class":48},[35,140187,544],{"class":359},[35,140189,134320],{"class":306},[35,140191,55573],{"class":48},[35,140193,544],{"class":359},[35,140195,134327],{"class":306},[35,140197,134330],{"class":48},[35,140199,544],{"class":359},[35,140201,134335],{"class":306},[35,140203,51633],{"class":359},[21,140205,140206,140207,140210],{},"1 号盒子为 ",[32,140208,140209],{},"news"," 新闻模块 高度为 165px",[1823,140212],{"style":126659,"src":140213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[21,140215,140216,140217,140220,140221],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[32,140218,140219],{},"news-hd","，下面是 ",[32,140222,140223],{},"news-bd",[21,140225,140173],{},[25,140227,140228],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,140229,140230,140234,140248,140252],{"__ignoreMap":30},[35,140231,140232],{"class":37,"line":38},[35,140233,130914],{"class":41},[35,140235,140236,140238,140240,140242,140244,140246],{"class":37,"line":45},[35,140237,1404],{"class":359},[35,140239,51937],{"class":51626},[35,140241,53812],{"class":48},[35,140243,544],{"class":359},[35,140245,130927],{"class":306},[35,140247,51633],{"class":359},[35,140249,140250],{"class":37,"line":55},[35,140251,130934],{"class":359},[35,140253,140254,140256,140258],{"class":37,"line":65},[35,140255,52111],{"class":359},[35,140257,51937],{"class":51626},[35,140259,51633],{"class":359},[21,140261,140262],{},"样式代码：",[25,140264,140265],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,140266,140267,140271,140285,140289],{"__ignoreMap":30},[35,140268,140269],{"class":37,"line":38},[35,140270,130914],{"class":41},[35,140272,140273,140275,140277,140279,140281,140283],{"class":37,"line":45},[35,140274,1404],{"class":359},[35,140276,51937],{"class":51626},[35,140278,53812],{"class":48},[35,140280,544],{"class":359},[35,140282,130927],{"class":306},[35,140284,51633],{"class":359},[35,140286,140287],{"class":37,"line":55},[35,140288,130934],{"class":359},[35,140290,140291,140293,140295],{"class":37,"line":65},[35,140292,52111],{"class":359},[35,140294,51937],{"class":51626},[35,140296,51633],{"class":359},[21,140298,140299,140300,140302],{},"上面是",[32,140301,140219],{},"，设置高度是 33px，设置下边框",[1501,140304,140305,140311],{},[17,140306,140307,140308,140310],{},"里面放一个",[32,140309,23244],{}," 标题",[17,140312,140313,140314,140316,140317,140319],{},"放一个a",[32,140315,103015],{},"，内容是 更多，然后让 ",[32,140318,734],{}," 进行右浮动，三角用伪元素设置字体图标就好",[21,140321,140173],{},[25,140323,140324],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,140325,140326,140334,140344,140354],{"__ignoreMap":30},[35,140327,140328,140330,140332],{"class":37,"line":38},[35,140329,51937],{"class":51626},[35,140331,137804],{"class":48},[35,140333,15906],{"class":359},[35,140335,140336,140338,140340,140342],{"class":37,"line":45},[35,140337,137811],{"class":58},[35,140339,51763],{"class":359},[35,140341,7986],{"class":306},[35,140343,1655],{"class":359},[35,140345,140346,140348,140350,140352],{"class":37,"line":55},[35,140347,128419],{"class":58},[35,140349,51763],{"class":359},[35,140351,61195],{"class":58},[35,140353,1655],{"class":359},[35,140355,140356],{"class":37,"line":65},[35,140357,1926],{"class":359},[21,140359,140262],{},[25,140361,140362],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,140363,140364,140372,140382,140392],{"__ignoreMap":30},[35,140365,140366,140368,140370],{"class":37,"line":38},[35,140367,51937],{"class":51626},[35,140369,137804],{"class":48},[35,140371,15906],{"class":359},[35,140373,140374,140376,140378,140380],{"class":37,"line":45},[35,140375,137811],{"class":58},[35,140377,51763],{"class":359},[35,140379,7986],{"class":306},[35,140381,1655],{"class":359},[35,140383,140384,140386,140388,140390],{"class":37,"line":55},[35,140385,128419],{"class":58},[35,140387,51763],{"class":359},[35,140389,61195],{"class":58},[35,140391,1655],{"class":359},[35,140393,140394],{"class":37,"line":65},[35,140395,1926],{"class":359},[21,140397,140398,140399],{},"下面是",[32,140400,140223],{},[1501,140402,140403,140411],{},[17,140404,140405,140406,101343,140408,140410],{},"里面包含 ",[32,140407,1501],{},[32,140409,17],{}," 还有链接",[17,140412,139883,140413,140415,140416,140418,140419,140422,140423],{},[32,140414,17],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[32,140417,131469],{}," 2.设置 ",[32,140420,140421],{},"white-space: nowrap;"," 3. 设置 ",[32,140424,140425],{},"text-overflow: ellipsis;",[21,140427,140173],{},[25,140429,140431],{"className":126803,"code":140430,"language":126805,"meta":30,"style":30},"div {\n  overflow: hidden;\n}\n",[32,140432,140433,140439,140450],{"__ignoreMap":30},[35,140434,140435,140437],{"class":37,"line":38},[35,140436,51937],{"class":51626},[35,140438,15906],{"class":359},[35,140440,140441,140444,140446,140448],{"class":37,"line":45},[35,140442,140443],{"class":58},"  overflow",[35,140445,51763],{"class":359},[35,140447,62040],{"class":58},[35,140449,1655],{"class":359},[35,140451,140452],{"class":37,"line":55},[35,140453,1926],{"class":359},[21,140455,140262],{},[25,140457,140458],{"className":126803,"code":140430,"language":126805,"meta":30,"style":30},[32,140459,140460,140466,140476],{"__ignoreMap":30},[35,140461,140462,140464],{"class":37,"line":38},[35,140463,51937],{"class":51626},[35,140465,15906],{"class":359},[35,140467,140468,140470,140472,140474],{"class":37,"line":45},[35,140469,140443],{"class":58},[35,140471,51763],{"class":359},[35,140473,62040],{"class":58},[35,140475,1655],{"class":359},[35,140477,140478],{"class":37,"line":55},[35,140479,1926],{"class":359},[21,140481,140482,140483,140486],{},"2 号盒子为 ",[32,140484,140485],{},"lifeservice"," 生活服务模块 高度为 209px",[1823,140488],{"style":126659,"src":140489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1501,140491,140492,140495,140505,140529,140540],{},[17,140493,140494],{},"设置边框（左右下边框）",[17,140496,140497,140498,140501,140502,140504],{},"里面的内容 是 ",[32,140499,140500],{},"ul > 12*li","，给",[32,140503,17],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[17,140506,140507,140508],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1501,140509,140510,140515,140524],{},[17,140511,140512,140514],{},[32,140513,140485],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[17,140516,140517,140518,140520,140521,140523],{},"可以让 ",[32,140519,140485],{}," 里面的 ",[32,140522,1501],{}," 宽度为 252，就可以装的下 4 个 小 li",[17,140525,140526,140528],{},[32,140527,140485],{}," 盒子 overflow 隐藏多余的部分就可以了",[17,140530,116789,140531,140533,140534,140536,140537,140539],{},[32,140532,17],{}," 里面放一个 ",[32,140535,935],{},"（里面放图标），下面的文本用 ",[32,140538,21],{}," 标签包裹",[17,140541,139303,140542,140544,140545,140547,140548,139337,140550,140553],{},[32,140543,935],{}," 设置 24px宽和28px的高（注意 ",[32,140546,935],{}," 是行内元素， 转成行内块），给 ",[32,140549,17],{},[32,140551,140552],{},"text-align:center"," 让里面内容居中显示",[21,140555,140173],{},[25,140557,140559],{"className":126803,"code":140558,"language":126805,"meta":30,"style":30},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[32,140560,140561,140579,140584,140594],{"__ignoreMap":30},[35,140562,140563,140565,140567,140569,140571,140573,140575,140577],{"class":37,"line":38},[35,140564,35],{"class":51626},[35,140566,12769],{"class":359},[35,140568,734],{"class":51626},[35,140570,12769],{"class":359},[35,140572,23887],{"class":51626},[35,140574,12769],{"class":359},[35,140576,645],{"class":51626},[35,140578,15906],{"class":359},[35,140580,140581],{"class":37,"line":45},[35,140582,140583],{"class":41},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[35,140585,140586,140588,140590,140592],{"class":37,"line":55},[35,140587,128419],{"class":58},[35,140589,51763],{"class":359},[35,140591,128481],{"class":58},[35,140593,1655],{"class":359},[35,140595,140596],{"class":37,"line":65},[35,140597,1926],{"class":359},[21,140599,140262],{},[25,140601,140602],{"className":126803,"code":140558,"language":126805,"meta":30,"style":30},[32,140603,140604,140622,140626,140636],{"__ignoreMap":30},[35,140605,140606,140608,140610,140612,140614,140616,140618,140620],{"class":37,"line":38},[35,140607,35],{"class":51626},[35,140609,12769],{"class":359},[35,140611,734],{"class":51626},[35,140613,12769],{"class":359},[35,140615,23887],{"class":51626},[35,140617,12769],{"class":359},[35,140619,645],{"class":51626},[35,140621,15906],{"class":359},[35,140623,140624],{"class":37,"line":45},[35,140625,140583],{"class":41},[35,140627,140628,140630,140632,140634],{"class":37,"line":55},[35,140629,128419],{"class":58},[35,140631,51763],{"class":359},[35,140633,128481],{"class":58},[35,140635,1655],{"class":359},[35,140637,140638],{"class":37,"line":65},[35,140639,1926],{"class":359},[21,140641,140642,140643,140646],{},"3 号盒子为 ",[32,140644,140645],{},"bargain"," 特价商品",[1501,140648,140649],{},[17,140650,140651],{},"这个比较简单，直接插入一张图片即可",[21,140653,140173],{},[25,140655,140656],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,140657,140658],{"__ignoreMap":30},[35,140659,140660,140662,140664,140666,140668,140670,140672,140674,140676,140678,140680,140682],{"class":37,"line":38},[35,140661,1404],{"class":359},[35,140663,1823],{"class":51626},[35,140665,55565],{"class":48},[35,140667,544],{"class":359},[35,140669,134320],{"class":306},[35,140671,55573],{"class":48},[35,140673,544],{"class":359},[35,140675,134327],{"class":306},[35,140677,134330],{"class":48},[35,140679,544],{"class":359},[35,140681,134335],{"class":306},[35,140683,51633],{"class":359},[21,140685,140262],{},[25,140687,140688],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,140689,140690],{"__ignoreMap":30},[35,140691,140692,140694,140696,140698,140700,140702,140704,140706,140708,140710,140712,140714],{"class":37,"line":38},[35,140693,1404],{"class":359},[35,140695,1823],{"class":51626},[35,140697,55565],{"class":48},[35,140699,544],{"class":359},[35,140701,134320],{"class":306},[35,140703,55573],{"class":48},[35,140705,544],{"class":359},[35,140707,134327],{"class":306},[35,140709,134330],{"class":48},[35,140711,544],{"class":359},[35,140713,134335],{"class":306},[35,140715,51633],{"class":359},[465,140717,140719],{"id":140718},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1823,140721],{"style":126659,"src":140722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[21,140724,140725,140726,140729],{},"大盒子 ",[32,140727,140728],{},"recom"," 推荐模块 recommend",[1501,140731,140732],{},[17,140733,140734,140735,140737,140738,140741],{},"给这个 ",[32,140736,140728],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[32,140739,140740],{},"#ebebeb","），设置距离上边 12px",[21,140743,140173],{},[25,140745,140747],{"className":126803,"code":140746,"language":126805,"meta":30,"style":30},"div {\n  background-color: #f0f0f0;\n}\n",[32,140748,140749,140755,140766],{"__ignoreMap":30},[35,140750,140751,140753],{"class":37,"line":38},[35,140752,51937],{"class":51626},[35,140754,15906],{"class":359},[35,140756,140757,140759,140761,140764],{"class":37,"line":45},[35,140758,71203],{"class":58},[35,140760,51763],{"class":359},[35,140762,140763],{"class":58},"#f0f0f0",[35,140765,1655],{"class":359},[35,140767,140768],{"class":37,"line":55},[35,140769,1926],{"class":359},[21,140771,140262],{},[25,140773,140774],{"className":126803,"code":140746,"language":126805,"meta":30,"style":30},[32,140775,140776,140782,140792],{"__ignoreMap":30},[35,140777,140778,140780],{"class":37,"line":38},[35,140779,51937],{"class":51626},[35,140781,15906],{"class":359},[35,140783,140784,140786,140788,140790],{"class":37,"line":45},[35,140785,71203],{"class":58},[35,140787,51763],{"class":359},[35,140789,140763],{"class":58},[35,140791,1655],{"class":359},[35,140793,140794],{"class":37,"line":55},[35,140795,1926],{"class":359},[21,140797,140798],{},"里面包含 2 个盒子， 浮动即可",[21,140800,140173],{},[25,140802,140803],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,140804,140805,140811,140821],{"__ignoreMap":30},[35,140806,140807,140809],{"class":37,"line":38},[35,140808,130651],{"class":48},[35,140810,15906],{"class":359},[35,140812,140813,140815,140817,140819],{"class":37,"line":45},[35,140814,131283],{"class":58},[35,140816,51763],{"class":359},[35,140818,24070],{"class":58},[35,140820,1655],{"class":359},[35,140822,140823],{"class":37,"line":55},[35,140824,1926],{"class":359},[21,140826,140827,140828],{},"1 号盒子 ",[32,140829,140830],{},"recom_hd",[1501,140832,140833,140836],{},[17,140834,140835],{},"设置宽度205px，高度163px",[17,140837,140307,140838,140840],{},[32,140839,1823],{},"标签，插入图片即可",[21,140842,140173],{},[25,140844,140845],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,140846,140847],{"__ignoreMap":30},[35,140848,140849,140851,140853,140855,140857,140859,140861,140863,140865,140867,140869,140871],{"class":37,"line":38},[35,140850,1404],{"class":359},[35,140852,1823],{"class":51626},[35,140854,55565],{"class":48},[35,140856,544],{"class":359},[35,140858,134320],{"class":306},[35,140860,55573],{"class":48},[35,140862,544],{"class":359},[35,140864,134327],{"class":306},[35,140866,134330],{"class":48},[35,140868,544],{"class":359},[35,140870,134335],{"class":306},[35,140872,51633],{"class":359},[21,140874,140262],{},[25,140876,140877],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,140878,140879],{"__ignoreMap":30},[35,140880,140881,140883,140885,140887,140889,140891,140893,140895,140897,140899,140901,140903],{"class":37,"line":38},[35,140882,1404],{"class":359},[35,140884,1823],{"class":51626},[35,140886,55565],{"class":48},[35,140888,544],{"class":359},[35,140890,134320],{"class":306},[35,140892,55573],{"class":48},[35,140894,544],{"class":359},[35,140896,134327],{"class":306},[35,140898,134330],{"class":48},[35,140900,544],{"class":359},[35,140902,134335],{"class":306},[35,140904,51633],{"class":359},[21,140906,140907,140908,140911],{},"2 号盒子 ",[32,140909,140910],{},"recom_bd"," ，注意里面的小竖线",[1501,140913,140914,140925,140928,140933,140938],{},[17,140915,140916,140917,140919,140920,140922,140923],{},"右侧结构里面放 ",[32,140918,1501],{}," 包含 4个 ",[32,140921,17],{},"，每个li里面包含一个",[32,140924,1823],{},[17,140926,140927],{},"直接利用切片工具把里面的内容当成一张图片",[17,140929,139303,140930,140932],{},[32,140931,17],{}," 设置浮动",[17,140934,139303,140935,140937],{},[32,140936,1823],{}," 设置宽高，宽度 248px，高度 163px",[17,140939,140940,140941,140501,140944,140946,140947,140949,140950],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[32,140942,140943],{},"top 10px",[32,140945,17],{},"设置相对定位（注意，最后一个",[32,140948,17],{},"不用设置伪元素），可以利用 ",[32,140951,140952],{},"nth-child(-n+3){...}",[21,140954,140173],{},[25,140956,140957],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,140958,140959,140967,140977,140987],{"__ignoreMap":30},[35,140960,140961,140963,140965],{"class":37,"line":38},[35,140962,51937],{"class":51626},[35,140964,137804],{"class":48},[35,140966,15906],{"class":359},[35,140968,140969,140971,140973,140975],{"class":37,"line":45},[35,140970,137811],{"class":58},[35,140972,51763],{"class":359},[35,140974,7986],{"class":306},[35,140976,1655],{"class":359},[35,140978,140979,140981,140983,140985],{"class":37,"line":55},[35,140980,128419],{"class":58},[35,140982,51763],{"class":359},[35,140984,61195],{"class":58},[35,140986,1655],{"class":359},[35,140988,140989],{"class":37,"line":65},[35,140990,1926],{"class":359},[21,140992,140262],{},[25,140994,140995],{"className":126803,"code":138645,"language":126805,"meta":30,"style":30},[32,140996,140997,141005,141015,141025],{"__ignoreMap":30},[35,140998,140999,141001,141003],{"class":37,"line":38},[35,141000,51937],{"class":51626},[35,141002,137804],{"class":48},[35,141004,15906],{"class":359},[35,141006,141007,141009,141011,141013],{"class":37,"line":45},[35,141008,137811],{"class":58},[35,141010,51763],{"class":359},[35,141012,7986],{"class":306},[35,141014,1655],{"class":359},[35,141016,141017,141019,141021,141023],{"class":37,"line":55},[35,141018,128419],{"class":58},[35,141020,51763],{"class":359},[35,141022,61195],{"class":58},[35,141024,1655],{"class":359},[35,141026,141027],{"class":37,"line":65},[35,141028,1926],{"class":359},[465,141030,141032],{"id":141031},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1823,141034],{"style":126659,"src":141035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[21,141037,141038],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[21,141040,141041],{},"第一楼是家用电器模块： 里面包含两个盒子",[21,141043,141044,141047],{},[32,141045,141046],{},"box_hd"," 制作",[21,141049,140827,141050,141052],{},[32,141051,141046],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1823,141054],{"style":126659,"src":141055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1501,141057,141058,141063,141068,141071],{},[17,141059,141060,141062],{},[32,141061,141046],{}," 给 30px 的高度，2个像素的下边框",[17,141064,141065,141066],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[32,141067,139314],{},[17,141069,141070],{},"左侧盒左浮动，右侧盒子右浮动",[17,141072,141073,141075,141076,141078],{},[32,141074,734],{},"标签之间的距离用左右的",[32,141077,31209],{},"撑开即可",[21,141080,141081],{},"结构代码",[25,141083,141084],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,141085,141086,141092,141102],{"__ignoreMap":30},[35,141087,141088,141090],{"class":37,"line":38},[35,141089,130651],{"class":48},[35,141091,15906],{"class":359},[35,141093,141094,141096,141098,141100],{"class":37,"line":45},[35,141095,131283],{"class":58},[35,141097,51763],{"class":359},[35,141099,24070],{"class":58},[35,141101,1655],{"class":359},[35,141103,141104],{"class":37,"line":55},[35,141105,1926],{"class":359},[21,141107,141108],{},"样式代码",[25,141110,141111],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,141112,141113,141119,141129],{"__ignoreMap":30},[35,141114,141115,141117],{"class":37,"line":38},[35,141116,130651],{"class":48},[35,141118,15906],{"class":359},[35,141120,141121,141123,141125,141127],{"class":37,"line":45},[35,141122,131283],{"class":58},[35,141124,51763],{"class":359},[35,141126,24070],{"class":58},[35,141128,1655],{"class":359},[35,141130,141131],{"class":37,"line":55},[35,141132,1926],{"class":359},[21,141134,141135,141047],{},[32,141136,141137],{},"box_bd",[21,141139,141140],{},"2 号盒子 box_bd，不要给高度",[1823,141142],{"style":126659,"src":141143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[21,141145,141146],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[21,141148,141149],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[21,141151,141152],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1501,141154,141155,141167,141183],{},[17,141156,141157,141159,141160,141163,141164,141166],{},[32,141158,141137],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[32,141161,141162],{},"tab_content","，在",[32,141165,141162],{}," 里面包裹tab选项卡对应的内容",[17,141168,141169,141170,141173,141174,141176,141177,141179,141180,141182],{},"内容被一个大盒子包裹（",[32,141171,141172],{},"tab_list_item","），里面是 ",[32,141175,1501],{}," 包裹 5个 ",[32,141178,17],{},"，每个",[32,141181,17],{},"设置对应的宽度，然后设置浮动",[17,141184,141185,141186,141188,141189,141191,141192],{},"而这5个",[32,141187,17],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[32,141190,17],{},"设置",[1501,141193,141194,141212,141215],{},[17,141195,141196,141197,141199,141200,141202,141203,141205,141206,141208,141209,141211],{},"第一个小 ",[32,141198,17],{}," 分为上下结构，上面是 ",[32,141201,1501],{}," 包裹 ",[32,141204,17],{}," ，",[32,141207,17],{},"里面包裹 ",[32,141210,734],{},"，下面插入一张图片",[17,141213,141214],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[17,141216,141217,141218,141220,141221,141223,141224,141226],{},"后面的小 ",[32,141219,17],{}," 里面先放一个",[32,141222,734],{},"标签，然后在",[32,141225,734],{},"标签里面插入图片即可",[21,141228,141081],{},[25,141230,141231],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,141232,141233],{"__ignoreMap":30},[35,141234,141235,141237,141239,141241,141243,141245,141247,141249,141251,141253,141255,141257],{"class":37,"line":38},[35,141236,1404],{"class":359},[35,141238,1823],{"class":51626},[35,141240,55565],{"class":48},[35,141242,544],{"class":359},[35,141244,134320],{"class":306},[35,141246,55573],{"class":48},[35,141248,544],{"class":359},[35,141250,134327],{"class":306},[35,141252,134330],{"class":48},[35,141254,544],{"class":359},[35,141256,134335],{"class":306},[35,141258,51633],{"class":359},[21,141260,141108],{},[25,141262,141263],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,141264,141265],{"__ignoreMap":30},[35,141266,141267,141269,141271,141273,141275,141277,141279,141281,141283,141285,141287,141289],{"class":37,"line":38},[35,141268,1404],{"class":359},[35,141270,1823],{"class":51626},[35,141272,55565],{"class":48},[35,141274,544],{"class":359},[35,141276,134320],{"class":306},[35,141278,55573],{"class":48},[35,141280,544],{"class":359},[35,141282,134327],{"class":306},[35,141284,134330],{"class":48},[35,141286,544],{"class":359},[35,141288,134335],{"class":306},[35,141290,51633],{"class":359},[21,141292,141293],{},"tab栏切换需求！！！！！！介绍：",[1823,141295],{"style":126659,"src":141296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1501,141298,141299,141307,141313,141316],{},[17,141300,141301,141304,141305],{},[32,141302,141303],{},"tab","栏的布局是 ",[32,141306,139314],{},[17,141308,141309,141310,141312],{},"有多少个",[32,141311,141303],{},"选项卡，那么对应就有多少个内容",[17,141314,141315],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[17,141317,141318,141319,141322,141323,141325,141326,141328],{},"等后面我们学习了",[32,141320,141321],{},"js","之后，我们就会配合",[32,141324,141321],{},"来实现，",[32,141327,141303],{},"栏的切换",[438,141330,141332],{"id":141331},"_162-列表制作","16.2 列表制作",[465,141334,141336],{"id":141335},"_1621-准备工作","16.2.1 准备工作",[1501,141338,141339,141342,141345,141348],{},[17,141340,141341],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[17,141343,141344],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[17,141346,141347],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[17,141349,141350],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[465,141352,141354,141355,101343,141357,141359],{"id":141353},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[32,141356,131808],{},[32,141358,54039],{}," 修改",[1823,141361],{"style":126659,"src":141362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1501,141364,141365],{},[17,141366,141367],{},"秒杀盒子 sk（ second kill ） 定位即可",[21,141369,140173],{},[25,141371,141372],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,141373,141374,141378,141392,141396,141410,141414,141428,141432,141446,141450],{"__ignoreMap":30},[35,141375,141376],{"class":37,"line":38},[35,141377,132242],{"class":41},[35,141379,141380,141382,141384,141386,141388,141390],{"class":37,"line":45},[35,141381,132247],{"class":48},[35,141383,80132],{"class":359},[35,141385,129163],{"class":58},[35,141387,51763],{"class":359},[35,141389,132256],{"class":58},[35,141391,129733],{"class":359},[35,141393,141394],{"class":37,"line":55},[35,141395,132263],{"class":41},[35,141397,141398,141400,141402,141404,141406,141408],{"class":37,"line":65},[35,141399,132268],{"class":48},[35,141401,80132],{"class":359},[35,141403,129163],{"class":58},[35,141405,51763],{"class":359},[35,141407,55090],{"class":58},[35,141409,129733],{"class":359},[35,141411,141412],{"class":37,"line":74},[35,141413,132283],{"class":41},[35,141415,141416,141418,141420,141422,141424,141426],{"class":37,"line":83},[35,141417,132288],{"class":48},[35,141419,80132],{"class":359},[35,141421,129163],{"class":58},[35,141423,51763],{"class":359},[35,141425,55157],{"class":58},[35,141427,129733],{"class":359},[35,141429,141430],{"class":37,"line":92},[35,141431,132303],{"class":41},[35,141433,141434,141436,141438,141440,141442,141444],{"class":37,"line":101},[35,141435,132308],{"class":48},[35,141437,80132],{"class":359},[35,141439,129163],{"class":58},[35,141441,51763],{"class":359},[35,141443,86558],{"class":58},[35,141445,129733],{"class":359},[35,141447,141448],{"class":37,"line":110},[35,141449,132323],{"class":41},[35,141451,141452,141454,141456,141458,141460,141462],{"class":37,"line":119},[35,141453,132328],{"class":48},[35,141455,80132],{"class":359},[35,141457,129163],{"class":58},[35,141459,51763],{"class":359},[35,141461,132337],{"class":58},[35,141463,129733],{"class":359},[21,141465,140262],{},[25,141467,141468],{"className":126803,"code":132235,"language":126805,"meta":30,"style":30},[32,141469,141470,141474,141488,141492,141506,141510,141524,141528,141542,141546],{"__ignoreMap":30},[35,141471,141472],{"class":37,"line":38},[35,141473,132242],{"class":41},[35,141475,141476,141478,141480,141482,141484,141486],{"class":37,"line":45},[35,141477,132247],{"class":48},[35,141479,80132],{"class":359},[35,141481,129163],{"class":58},[35,141483,51763],{"class":359},[35,141485,132256],{"class":58},[35,141487,129733],{"class":359},[35,141489,141490],{"class":37,"line":55},[35,141491,132263],{"class":41},[35,141493,141494,141496,141498,141500,141502,141504],{"class":37,"line":65},[35,141495,132268],{"class":48},[35,141497,80132],{"class":359},[35,141499,129163],{"class":58},[35,141501,51763],{"class":359},[35,141503,55090],{"class":58},[35,141505,129733],{"class":359},[35,141507,141508],{"class":37,"line":74},[35,141509,132283],{"class":41},[35,141511,141512,141514,141516,141518,141520,141522],{"class":37,"line":83},[35,141513,132288],{"class":48},[35,141515,80132],{"class":359},[35,141517,129163],{"class":58},[35,141519,51763],{"class":359},[35,141521,55157],{"class":58},[35,141523,129733],{"class":359},[35,141525,141526],{"class":37,"line":92},[35,141527,132303],{"class":41},[35,141529,141530,141532,141534,141536,141538,141540],{"class":37,"line":101},[35,141531,132308],{"class":48},[35,141533,80132],{"class":359},[35,141535,129163],{"class":58},[35,141537,51763],{"class":359},[35,141539,86558],{"class":58},[35,141541,129733],{"class":359},[35,141543,141544],{"class":37,"line":110},[35,141545,132323],{"class":41},[35,141547,141548,141550,141552,141554,141556,141558],{"class":37,"line":119},[35,141549,132328],{"class":48},[35,141551,80132],{"class":359},[35,141553,129163],{"class":58},[35,141555,51763],{"class":359},[35,141557,132337],{"class":58},[35,141559,129733],{"class":359},[1501,141561,141562,141573],{},[17,141563,141564,141565,141568,141569,101343,141571],{},"1 号盒子左侧浮动 ",[32,141566,141567],{},"sk_list"," 里面包含 ",[32,141570,1501],{},[32,141572,17],{},[17,141574,141575,141576,141568,141579,101343,141581],{},"2 号盒子左侧浮动 ",[32,141577,141578],{},"sk_con",[32,141580,1501],{},[32,141582,17],{},[21,141584,140173],{},[25,141586,141587],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,141588,141589,141595,141605],{"__ignoreMap":30},[35,141590,141591,141593],{"class":37,"line":38},[35,141592,130651],{"class":48},[35,141594,15906],{"class":359},[35,141596,141597,141599,141601,141603],{"class":37,"line":45},[35,141598,131283],{"class":58},[35,141600,51763],{"class":359},[35,141602,24070],{"class":58},[35,141604,1655],{"class":359},[35,141606,141607],{"class":37,"line":55},[35,141608,1926],{"class":359},[21,141610,140262],{},[25,141612,141613],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,141614,141615,141621,141631],{"__ignoreMap":30},[35,141616,141617,141619],{"class":37,"line":38},[35,141618,130651],{"class":48},[35,141620,15906],{"class":359},[35,141622,141623,141625,141627,141629],{"class":37,"line":45},[35,141624,131283],{"class":58},[35,141626,51763],{"class":359},[35,141628,24070],{"class":58},[35,141630,1655],{"class":359},[35,141632,141633],{"class":37,"line":55},[35,141634,1926],{"class":359},[465,141636,141638,141639],{"id":141637},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[32,141640,141641],{},"sk_container",[1823,141643],{"style":126659,"src":141644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1501,141646,141647,141652],{},[17,141648,140827,141649,141651],{},[32,141650,141641],{}," 给宽度 1200，不要给高度",[17,141653,141654],{},"一定不要忘记清除浮动",[21,141656,140173],{},[25,141658,141659],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,141660,141661,141667,141677],{"__ignoreMap":30},[35,141662,141663,141665],{"class":37,"line":38},[35,141664,130651],{"class":48},[35,141666,15906],{"class":359},[35,141668,141669,141671,141673,141675],{"class":37,"line":45},[35,141670,131283],{"class":58},[35,141672,51763],{"class":359},[35,141674,24070],{"class":58},[35,141676,1655],{"class":359},[35,141678,141679],{"class":37,"line":55},[35,141680,1926],{"class":359},[14,141682,141683],{},[17,141684,141685],{},"sk_hd制作",[1501,141687,141688],{},[17,141689,140907,141690,141693],{},[32,141691,141692],{},"sk_hd"," ，插入图片即可",[21,141695,140173],{},[25,141697,141698],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,141699,141700],{"__ignoreMap":30},[35,141701,141702,141704,141706,141708,141710,141712,141714,141716,141718,141720,141722,141724],{"class":37,"line":38},[35,141703,1404],{"class":359},[35,141705,1823],{"class":51626},[35,141707,55565],{"class":48},[35,141709,544],{"class":359},[35,141711,134320],{"class":306},[35,141713,55573],{"class":48},[35,141715,544],{"class":359},[35,141717,134327],{"class":306},[35,141719,134330],{"class":48},[35,141721,544],{"class":359},[35,141723,134335],{"class":306},[35,141725,51633],{"class":359},[14,141727,141728],{"start":45},[17,141729,141730],{},"sk_bd制作",[1501,141732,141733],{},[17,141734,141735,141736,141739,141740,101343,141742,141744],{},"3 号盒子 ",[32,141737,141738],{},"sk_bd"," ，里面包含很多的 ",[32,141741,1501],{},[32,141743,17],{},[1501,141745,141746,141755],{},[17,141747,141748,141749,141751,141752,141754],{},"当鼠标移入到 ",[32,141750,17],{}," 上面的时候显示红色的边框，在这里先给 ",[32,141753,17],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[17,141756,141757,141758,141760,141761,141763,141764,141767,141768,141770],{},"由于给每个 ",[32,141759,17],{}," 都设置了外边距，导致一行的最后一个 ",[32,141762,17],{}," 掉了下来，在这里我们利用 ",[32,141765,141766],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[32,141769,17],{},"，去掉外边距就好了",[21,141772,140173],{},[25,141774,141775],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,141776,141777,141783,141795],{"__ignoreMap":30},[35,141778,141779,141781],{"class":37,"line":38},[35,141780,51937],{"class":51626},[35,141782,15906],{"class":359},[35,141784,141785,141787,141789,141791,141793],{"class":37,"line":45},[35,141786,70795],{"class":58},[35,141788,51763],{"class":359},[35,141790,687],{"class":58},[35,141792,51882],{"class":58},[35,141794,1655],{"class":359},[35,141796,141797],{"class":37,"line":55},[35,141798,1926],{"class":359},[21,141800,140262],{},[25,141802,141803],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,141804,141805,141811,141823],{"__ignoreMap":30},[35,141806,141807,141809],{"class":37,"line":38},[35,141808,51937],{"class":51626},[35,141810,15906],{"class":359},[35,141812,141813,141815,141817,141819,141821],{"class":37,"line":45},[35,141814,70795],{"class":58},[35,141816,51763],{"class":359},[35,141818,687],{"class":58},[35,141820,51882],{"class":58},[35,141822,1655],{"class":359},[35,141824,141825],{"class":37,"line":55},[35,141826,1926],{"class":359},[438,141828,141830],{"id":141829},"_163-注册页面制作","16.3 注册页面制作",[1823,141832],{"style":126659,"src":141833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[21,141835,141836,141838],{},[645,141837,9359],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1823,141840],{"style":126659,"src":141841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[465,141843,141845],{"id":141844},"_1631-准备工作","16.3.1 准备工作",[1501,141847,141848,141851],{},[17,141849,141850],{},"创建register.html，引入 base.css，引入favicon图标",[17,141852,141853],{},"创建register.css ，在html页面进行引入",[465,141855,141857,141858,141860],{"id":141856},"_1632-header-头部实现","16.3.2 ",[32,141859,131808],{}," 头部实现",[1501,141862,141863,141866],{},[17,141864,141865],{},"整个内容用 版心 进行包裹",[17,141867,141868],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[21,141870,140173],{},[25,141872,141873],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,141874,141875],{"__ignoreMap":30},[35,141876,141877,141879,141881,141883,141885,141887,141889,141891,141893,141895,141897,141899],{"class":37,"line":38},[35,141878,1404],{"class":359},[35,141880,1823],{"class":51626},[35,141882,55565],{"class":48},[35,141884,544],{"class":359},[35,141886,134320],{"class":306},[35,141888,55573],{"class":48},[35,141890,544],{"class":359},[35,141892,134327],{"class":306},[35,141894,134330],{"class":48},[35,141896,544],{"class":359},[35,141898,134335],{"class":306},[35,141900,51633],{"class":359},[21,141902,140262],{},[25,141904,141905],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,141906,141907],{"__ignoreMap":30},[35,141908,141909,141911,141913,141915,141917,141919,141921,141923,141925,141927,141929,141931],{"class":37,"line":38},[35,141910,1404],{"class":359},[35,141912,1823],{"class":51626},[35,141914,55565],{"class":48},[35,141916,544],{"class":359},[35,141918,134320],{"class":306},[35,141920,55573],{"class":48},[35,141922,544],{"class":359},[35,141924,134327],{"class":306},[35,141926,134330],{"class":48},[35,141928,544],{"class":359},[35,141930,134335],{"class":306},[35,141932,51633],{"class":359},[465,141934,141936,141937,141940],{"id":141935},"_1633-registerarea-主体模块实现","16.3.3 ",[32,141938,141939],{},"registerarea"," 主体模块实现",[1823,141942],{"style":126659,"src":141943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[21,141945,141946],{},"整个大盒子 高度为 522px，设置4个边框",[21,141948,140173],{},[25,141950,141951],{"className":126803,"code":130960,"language":126805,"meta":30,"style":30},[32,141952,141953,141959,141975],{"__ignoreMap":30},[35,141954,141955,141957],{"class":37,"line":38},[35,141956,51937],{"class":51626},[35,141958,15906],{"class":359},[35,141960,141961,141963,141965,141967,141969,141971,141973],{"class":37,"line":45},[35,141962,71221],{"class":58},[35,141964,51763],{"class":359},[35,141966,713],{"class":58},[35,141968,51818],{"class":495},[35,141970,51847],{"class":58},[35,141972,130195],{"class":58},[35,141974,1655],{"class":359},[35,141976,141977],{"class":37,"line":55},[35,141978,1926],{"class":359},[21,141980,140262],{},[25,141982,141983],{"className":126803,"code":130960,"language":126805,"meta":30,"style":30},[32,141984,141985,141991,142007],{"__ignoreMap":30},[35,141986,141987,141989],{"class":37,"line":38},[35,141988,51937],{"class":51626},[35,141990,15906],{"class":359},[35,141992,141993,141995,141997,141999,142001,142003,142005],{"class":37,"line":45},[35,141994,71221],{"class":58},[35,141996,51763],{"class":359},[35,141998,713],{"class":58},[35,142000,51818],{"class":495},[35,142002,51847],{"class":58},[35,142004,130195],{"class":58},[35,142006,1655],{"class":359},[35,142008,142009],{"class":37,"line":55},[35,142010,1926],{"class":359},[21,142012,142013],{},"1号盒子 是一个 h3 标签，放标题",[1501,142015,142016],{},[17,142017,142018],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[21,142020,140173],{},[25,142022,142023],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,142024,142025,142031,142041],{"__ignoreMap":30},[35,142026,142027,142029],{"class":37,"line":38},[35,142028,130651],{"class":48},[35,142030,15906],{"class":359},[35,142032,142033,142035,142037,142039],{"class":37,"line":45},[35,142034,131283],{"class":58},[35,142036,51763],{"class":359},[35,142038,24070],{"class":58},[35,142040,1655],{"class":359},[35,142042,142043],{"class":37,"line":55},[35,142044,1926],{"class":359},[21,142046,140262],{},[25,142048,142049],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,142050,142051,142057,142067],{"__ignoreMap":30},[35,142052,142053,142055],{"class":37,"line":38},[35,142054,130651],{"class":48},[35,142056,15906],{"class":359},[35,142058,142059,142061,142063,142065],{"class":37,"line":45},[35,142060,131283],{"class":58},[35,142062,51763],{"class":359},[35,142064,24070],{"class":58},[35,142066,1655],{"class":359},[35,142068,142069],{"class":37,"line":55},[35,142070,1926],{"class":359},[21,142072,142073],{},"2号盒子 里面放注册的内容",[1501,142075,142076,142079,142088,142102,142115,142118,142121,142139,142153],{},[17,142077,142078],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[17,142080,142081,142082,142084,142085,142087],{},"里面的内容利用 ",[32,142083,1501],{}," 包含 ",[32,142086,17],{}," 来实现的（不需要用表格）",[17,142089,139317,142090,142092,142093,142095,142096,142098,142099,142101],{},[32,142091,17],{}," 里面，左侧放 ",[32,142094,33934],{}," 标签， 中间放",[32,142097,54147],{}," 标签， 右侧放 ",[32,142100,35],{}," 提示信息",[17,142103,142104,142105,142107,142108,142110,142111,142114],{},"左侧 ",[32,142106,33934],{},"里面的文字都是右对齐，我们可以给",[32,142109,33934],{},"设置一个宽度（88px），然后利用",[32,142112,142113],{},"text-align"," 来设置右对齐",[17,142116,142117],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[17,142119,142120],{},"右侧 span修饰一下文字颜色",[17,142122,142123,142124],{},"提示信息的样式优化",[1501,142125,142126,142129,142132],{},[17,142127,142128],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[17,142130,142131],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[17,142133,142134,142135,142138],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[32,142136,142137],{},"vertical-algin"," 来设置 图片与文字对齐方式",[17,142140,142141,142142],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1501,142143,142144,142150],{},[17,142145,142146,142147,142149],{},"设置 ",[32,142148,23887],{}," 的 左右 12px 的内边距，设置一下文字颜色",[17,142151,142152],{},"分别设置 背景颜色",[17,142154,142155,142156,142158],{},"同意协议 和 完成注册 都是用 ",[32,142157,17],{}," 进行包裹",[21,142160,140173],{},[25,142162,142163],{"className":126803,"code":140746,"language":126805,"meta":30,"style":30},[32,142164,142165,142171,142181],{"__ignoreMap":30},[35,142166,142167,142169],{"class":37,"line":38},[35,142168,51937],{"class":51626},[35,142170,15906],{"class":359},[35,142172,142173,142175,142177,142179],{"class":37,"line":45},[35,142174,71203],{"class":58},[35,142176,51763],{"class":359},[35,142178,140763],{"class":58},[35,142180,1655],{"class":359},[35,142182,142183],{"class":37,"line":55},[35,142184,1926],{"class":359},[21,142186,140262],{},[25,142188,142189],{"className":126803,"code":140746,"language":126805,"meta":30,"style":30},[32,142190,142191,142197,142207],{"__ignoreMap":30},[35,142192,142193,142195],{"class":37,"line":38},[35,142194,51937],{"class":51626},[35,142196,15906],{"class":359},[35,142198,142199,142201,142203,142205],{"class":37,"line":45},[35,142200,71203],{"class":58},[35,142202,51763],{"class":359},[35,142204,140763],{"class":58},[35,142206,1655],{"class":359},[35,142208,142209],{"class":37,"line":55},[35,142210,1926],{"class":359},[465,142212,142214],{"id":142213},"_1634-底部实现","16.3.4 底部实现",[21,142216,140173],{},[25,142218,142219],{"className":126803,"code":140746,"language":126805,"meta":30,"style":30},[32,142220,142221,142227,142237],{"__ignoreMap":30},[35,142222,142223,142225],{"class":37,"line":38},[35,142224,51937],{"class":51626},[35,142226,15906],{"class":359},[35,142228,142229,142231,142233,142235],{"class":37,"line":45},[35,142230,71203],{"class":58},[35,142232,51763],{"class":359},[35,142234,140763],{"class":58},[35,142236,1655],{"class":359},[35,142238,142239],{"class":37,"line":55},[35,142240,1926],{"class":359},[21,142242,140262],{},[25,142244,142245],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,142246,142247,142251,142265,142269],{"__ignoreMap":30},[35,142248,142249],{"class":37,"line":38},[35,142250,130914],{"class":41},[35,142252,142253,142255,142257,142259,142261,142263],{"class":37,"line":45},[35,142254,1404],{"class":359},[35,142256,51937],{"class":51626},[35,142258,53812],{"class":48},[35,142260,544],{"class":359},[35,142262,130927],{"class":306},[35,142264,51633],{"class":359},[35,142266,142267],{"class":37,"line":55},[35,142268,130934],{"class":359},[35,142270,142271,142273,142275],{"class":37,"line":65},[35,142272,52111],{"class":359},[35,142274,51937],{"class":51626},[35,142276,51633],{"class":359},[438,142278,142280],{"id":142279},"_164-项目总结","16.4 项目总结",[14,142282,142283,142286,142289,142292],{},[17,142284,142285],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[17,142287,142288],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[17,142290,142291],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[17,142293,142294],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1823,142296],{"style":126659,"src":142297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[14,142299,142300],{"start":74},[17,142301,142302],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1823,142304],{"style":126659,"src":142305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[14,142307,142308],{"start":83},[17,142309,142310],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1823,142312],{"style":126659,"src":142313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[25,142315,142316],{"className":127550,"code":136960,"language":127552,"meta":30,"style":30},[32,142317,142318],{"__ignoreMap":30},[35,142319,142320,142322,142324,142326,142328,142330,142332,142334,142336,142338,142340,142342],{"class":37,"line":38},[35,142321,1404],{"class":359},[35,142323,54147],{"class":51626},[35,142325,54150],{"class":48},[35,142327,544],{"class":359},[35,142329,63025],{"class":306},[35,142331,15254],{"class":48},[35,142333,544],{"class":359},[35,142335,136981],{"class":306},[35,142337,61346],{"class":48},[35,142339,544],{"class":359},[35,142341,136988],{"class":306},[35,142343,51633],{"class":359},[14,142345,142346,142349],{"start":92},[17,142347,142348],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[17,142350,142351],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[416,142353,142354],{},"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":30,"searchDepth":45,"depth":45,"links":142356},[142357,142362,142369,142377],{"id":139983,"depth":45,"text":139984,"children":142358},[142359,142360,142361],{"id":139987,"depth":55,"text":139988},{"id":140718,"depth":55,"text":140719},{"id":141031,"depth":55,"text":141032},{"id":141331,"depth":45,"text":141332,"children":142363},[142364,142365,142367],{"id":141335,"depth":55,"text":141336},{"id":141353,"depth":55,"text":142366},"16.2.2 列表页 header 和 nav 修改",{"id":141637,"depth":55,"text":142368},"16.2.3 列表页主体 sk_container",{"id":141829,"depth":45,"text":141830,"children":142370},[142371,142372,142374,142376],{"id":141844,"depth":55,"text":141845},{"id":141856,"depth":55,"text":142373},"16.3.2 header 头部实现",{"id":141935,"depth":55,"text":142375},"16.3.3 registerarea 主体模块实现",{"id":142213,"depth":55,"text":142214},{"id":142279,"depth":45,"text":142280},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139975,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142384,"title":142385,"body":142386,"description":421,"extension":422,"meta":142494,"navigation":140,"path":142495,"seo":142496,"stem":142497,"__hash__":142498},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142387,"toc":142489},[142388,142391,142395,142398,142401,142410,142419,142423,142428,142435,142453,142456,142459,142462,142465,142468,142471,142474,142477,142480,142483,142486],[10,142389,142385],{"id":142390},"_17-web服务器与网站发布",[438,142392,142394],{"id":142393},"_171-web服务器","17.1 Web服务器",[21,142396,142397],{},"把自己网站上传到服务器上，可以让其他人访问",[1823,142399],{"style":126659,"src":142400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[21,142402,142403,142406,142407],{},[645,142404,142405],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[645,142408,142409],{},"Web 服务器等",[21,142411,142412,142413,101343,142416,26071],{},"根据服务器在网络中所在的位置不同，又可分为 ",[645,142414,142415],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[645,142417,142418],{},"远程服务器",[465,142420,142422],{"id":142421},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[21,142424,142425],{},[645,142426,142427],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[21,142429,142430,142431],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[734,142432,142433],{"href":142433,"rel":142434},"http:\u002F\u002Ffree.3v.do\u002F",[24198],[1501,142436,142437,142440,142443,142450],{},[17,142438,142439],{},"去免费空间网站注册账号。",[17,142441,142442],{},"记录下主机名、用户名、密码、域名。",[17,142444,142445,142446,142449],{},"利用 ",[32,142447,142448],{},"utftp"," 软件 上传网站到远程服务器",[17,142451,142452],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[21,142454,142455],{},"使用软件上传，对上传软件文件进行解压",[1823,142457],{"style":126659,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1823,142460],{"style":126659,"src":142461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[21,142463,142464],{},"输入刚刚申请的服务器账号信息：",[1823,142466],{"style":126659,"src":142467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1823,142469],{"style":126659,"src":142470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1823,142472],{"style":126659,"src":142473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1823,142475],{"style":126659,"src":142476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[21,142478,142479],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1823,142481],{"style":126659,"src":142482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[21,142484,142485],{},"浏览器输入域名即可访问",[21,142487,142488],{},"首页一定必须是index",{"title":30,"searchDepth":45,"depth":45,"links":142490},[142491],{"id":142393,"depth":45,"text":142394,"children":142492},[142493],{"id":142421,"depth":55,"text":142422},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142385,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142500,"title":142501,"body":142502,"description":421,"extension":422,"meta":143429,"navigation":140,"path":143430,"seo":143431,"stem":143432,"__hash__":143433},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142503,"toc":143412},[142504,142507,142511,142514,142517,142528,142531,142535,142539,142544,142547,142550,142553,142556,142560,142586,142590,142594,142597,142600,142604,142637,142641,142644,142647,142711,142715,142719,142722,142725,142728,142732,142777,142781,142784,142814,142818,142822,142825,142828,142832,142835,142904,142907,143015,143017,143023,143027,143030,143033,143129,143132,143136,143160,143164,143167,143171,143174,143178,143181,143184,143187,143190,143194,143197,143200,143204,143208,143211,143214,143217,143220,143224,143227,143231,143234,143237,143282,143286,143290,143293,143296,143299,143331,143335,143338,143372,143376,143379,143409],[10,142505,142501],{"id":142506},"_18-2d动画与3d转换",[438,142508,142510],{"id":142509},"_181-css3-2d转换","18.1 CSS3 2D转换",[21,142512,142513],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[21,142515,142516],{},"转换（transform）你可以简单理解为变形",[1501,142518,142519,142522,142525],{},[17,142520,142521],{},"移动：translate",[17,142523,142524],{},"旋转：rotate",[17,142526,142527],{},"缩放：scale",[1823,142529],{"style":126659,"src":142530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[465,142532,142534],{"id":142533},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22332,142536,142538],{"id":142537},"_18111-translate介绍","18.1.1.1 translate介绍",[21,142540,142541,142542],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[645,142543,133462],{},[1823,142545],{"style":126659,"src":142546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[21,142548,142549],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[21,142551,142552],{},"对于行内元素无效",[21,142554,142555],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22332,142557,142559],{"id":142558},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[25,142561,142562],{"className":126803,"code":138992,"language":126805,"meta":30,"style":30},[32,142563,142564,142570,142582],{"__ignoreMap":30},[35,142565,142566,142568],{"class":37,"line":38},[35,142567,51937],{"class":51626},[35,142569,15906],{"class":359},[35,142571,142572,142574,142576,142578,142580],{"class":37,"line":45},[35,142573,70795],{"class":58},[35,142575,51763],{"class":359},[35,142577,687],{"class":58},[35,142579,51882],{"class":58},[35,142581,1655],{"class":359},[35,142583,142584],{"class":37,"line":55},[35,142585,1926],{"class":359},[465,142587,142589],{"id":142588},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22332,142591,142593],{"id":142592},"_18121-rotate介绍","18.1.2.1 rotate介绍",[21,142595,142596],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1823,142598],{"style":126659,"src":142599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22332,142601,142603],{"id":142602},"_18122-旋转效果","18.1.2.2 旋转效果",[25,142605,142607],{"className":126803,"code":142606,"language":126805,"meta":30,"style":30},"div {\n  transform: rotate(45deg);\n}\n",[32,142608,142609,142615,142633],{"__ignoreMap":30},[35,142610,142611,142613],{"class":37,"line":38},[35,142612,51937],{"class":51626},[35,142614,15906],{"class":359},[35,142616,142617,142619,142621,142624,142626,142628,142631],{"class":37,"line":45},[35,142618,136787],{"class":58},[35,142620,51763],{"class":359},[35,142622,142623],{"class":58},"rotate",[35,142625,499],{"class":359},[35,142627,1023],{"class":58},[35,142629,142630],{"class":495},"deg",[35,142632,3053],{"class":359},[35,142634,142635],{"class":37,"line":55},[35,142636,1926],{"class":359},[22332,142638,142640],{"id":142639},"_18123-三角做法","18.1.2.3 三角做法",[21,142642,142643],{},"该下标当经过最外层大盒子时会实现向上反转",[1823,142645],{"style":126659,"src":142646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[25,142648,142649],{"className":126803,"code":135323,"language":126805,"meta":30,"style":30},[32,142650,142651,142655,142661,142671,142681,142697,142707],{"__ignoreMap":30},[35,142652,142653],{"class":37,"line":38},[35,142654,135330],{"class":41},[35,142656,142657,142659],{"class":37,"line":45},[35,142658,135335],{"class":48},[35,142660,15906],{"class":359},[35,142662,142663,142665,142667,142669],{"class":37,"line":55},[35,142664,70893],{"class":58},[35,142666,51763],{"class":359},[35,142668,687],{"class":58},[35,142670,1655],{"class":359},[35,142672,142673,142675,142677,142679],{"class":37,"line":65},[35,142674,71113],{"class":58},[35,142676,51763],{"class":359},[35,142678,687],{"class":58},[35,142680,1655],{"class":359},[35,142682,142683,142685,142687,142689,142691,142693,142695],{"class":37,"line":74},[35,142684,71221],{"class":58},[35,142686,51763],{"class":359},[35,142688,940],{"class":58},[35,142690,51818],{"class":495},[35,142692,51847],{"class":58},[35,142694,64317],{"class":58},[35,142696,1655],{"class":359},[35,142698,142699,142701,142703,142705],{"class":37,"line":83},[35,142700,135378],{"class":58},[35,142702,51763],{"class":359},[35,142704,62695],{"class":58},[35,142706,1655],{"class":359},[35,142708,142709],{"class":37,"line":92},[35,142710,1926],{"class":359},[465,142712,142714],{"id":142713},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22332,142716,142718],{"id":142717},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[21,142720,142721],{},"设置中心点",[1823,142723],{"style":126659,"src":142724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[21,142726,142727],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22332,142729,142731],{"id":142730},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[25,142733,142735],{"className":126803,"code":142734,"language":126805,"meta":30,"style":30},"\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",[32,142736,142737,142742,142748,142763,142768,142773],{"__ignoreMap":30},[35,142738,142739],{"class":37,"line":38},[35,142740,142741],{"class":41},"\u002F* 转换中心点 *\u002F\n",[35,142743,142744,142746],{"class":37,"line":45},[35,142745,51937],{"class":51626},[35,142747,15906],{"class":359},[35,142749,142750,142753,142755,142757,142759,142761],{"class":37,"line":55},[35,142751,142752],{"class":58},"  transform-origin",[35,142754,51763],{"class":359},[35,142756,51918],{"class":58},[35,142758,17478],{"class":58},[35,142760,130666],{"class":359},[35,142762,135476],{"class":41},[35,142764,142765],{"class":37,"line":65},[35,142766,142767],{"class":41},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[35,142769,142770],{"class":37,"line":74},[35,142771,142772],{"class":41},"  \u002F* transform-origin: left top; *\u002F\n",[35,142774,142775],{"class":37,"line":83},[35,142776,1926],{"class":359},[22332,142778,142780],{"id":142779},"_18133-旋转案例","18.1.3.3 旋转案例",[1823,142782],{"style":126659,"src":142783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[25,142785,142786],{"className":126803,"code":142606,"language":126805,"meta":30,"style":30},[32,142787,142788,142794,142810],{"__ignoreMap":30},[35,142789,142790,142792],{"class":37,"line":38},[35,142791,51937],{"class":51626},[35,142793,15906],{"class":359},[35,142795,142796,142798,142800,142802,142804,142806,142808],{"class":37,"line":45},[35,142797,136787],{"class":58},[35,142799,51763],{"class":359},[35,142801,142623],{"class":58},[35,142803,499],{"class":359},[35,142805,1023],{"class":58},[35,142807,142630],{"class":495},[35,142809,3053],{"class":359},[35,142811,142812],{"class":37,"line":55},[35,142813,1926],{"class":359},[465,142815,142817],{"id":142816},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22332,142819,142821],{"id":142820},"_18141-scale介绍","18.1.4.1 scale介绍",[21,142823,142824],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1823,142826],{"style":126659,"src":142827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22332,142829,142831],{"id":142830},"_18142-分页按钮","18.1.4.2 分页按钮",[1823,142833],{"style":126659,"src":142834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[25,142836,142838],{"className":126803,"code":142837,"language":126805,"meta":30,"style":30},"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",[32,142839,142840,142846,142862,142866,142870,142875,142881,142895,142900],{"__ignoreMap":30},[35,142841,142842,142844],{"class":37,"line":38},[35,142843,51937],{"class":51626},[35,142845,15906],{"class":359},[35,142847,142848,142850,142852,142855,142857,142860],{"class":37,"line":45},[35,142849,136787],{"class":58},[35,142851,51763],{"class":359},[35,142853,142854],{"class":58},"scale",[35,142856,499],{"class":359},[35,142858,142859],{"class":58},"1.2",[35,142861,3053],{"class":359},[35,142863,142864],{"class":37,"line":55},[35,142865,1926],{"class":359},[35,142867,142868],{"class":37,"line":65},[35,142869,136264],{"class":359},[35,142871,142872],{"class":37,"line":74},[35,142873,142874],{"class":41},"\u002F* 2D 缩放 *\u002F\n",[35,142876,142877,142879],{"class":37,"line":83},[35,142878,51937],{"class":51626},[35,142880,15906],{"class":359},[35,142882,142883,142885,142887,142889,142891,142893],{"class":37,"line":92},[35,142884,136787],{"class":58},[35,142886,51763],{"class":359},[35,142888,142854],{"class":58},[35,142890,499],{"class":359},[35,142892,142859],{"class":58},[35,142894,3053],{"class":359},[35,142896,142897],{"class":37,"line":101},[35,142898,142899],{"class":41},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[35,142901,142902],{"class":37,"line":110},[35,142903,1926],{"class":359},[21,142905,142906],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[25,142908,142910],{"className":126803,"code":142909,"language":126805,"meta":30,"style":30},"\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",[32,142911,142912,142917,142927,142948,142969,142973,142978,142984,143011],{"__ignoreMap":30},[35,142913,142914],{"class":37,"line":38},[35,142915,142916],{"class":41},"\u002F* 定义动画 *\u002F\n",[35,142918,142919,142922,142925],{"class":37,"line":45},[35,142920,142921],{"class":495},"@keyframes",[35,142923,142924],{"class":5550}," move",[35,142926,15906],{"class":359},[35,142928,142929,142932,142934,142936,142938,142941,142943,142945],{"class":37,"line":55},[35,142930,142931],{"class":48},"  0%",[35,142933,80132],{"class":359},[35,142935,48460],{"class":58},[35,142937,51763],{"class":359},[35,142939,142940],{"class":58},"translateX",[35,142942,499],{"class":359},[35,142944,687],{"class":58},[35,142946,142947],{"class":359},"); }\n",[35,142949,142950,142953,142955,142957,142959,142961,142963,142965,142967],{"class":37,"line":65},[35,142951,142952],{"class":48},"  100%",[35,142954,80132],{"class":359},[35,142956,48460],{"class":58},[35,142958,51763],{"class":359},[35,142960,142940],{"class":58},[35,142962,499],{"class":359},[35,142964,807],{"class":58},[35,142966,51818],{"class":495},[35,142968,142947],{"class":359},[35,142970,142971],{"class":37,"line":74},[35,142972,1926],{"class":359},[35,142974,142975],{"class":37,"line":83},[35,142976,142977],{"class":41},"\u002F* 调用动画 *\u002F\n",[35,142979,142980,142982],{"class":37,"line":92},[35,142981,51937],{"class":51626},[35,142983,15906],{"class":359},[35,142985,142986,142989,142991,142993,142995,142997,142999,143001,143003,143006,143009],{"class":37,"line":101},[35,142987,142988],{"class":58},"  animation",[35,142990,51763],{"class":359},[35,142992,135489],{"class":58},[35,142994,25450],{"class":58},[35,142996,1189],{"class":495},[35,142998,79005],{"class":58},[35,143000,4427],{"class":58},[35,143002,1189],{"class":495},[35,143004,143005],{"class":58}," infinite",[35,143007,143008],{"class":58}," alternate",[35,143010,1655],{"class":359},[35,143012,143013],{"class":37,"line":110},[35,143014,1926],{"class":359},[21,143016,142906],{},[25,143018,143021],{"className":143019,"code":143020,"language":5521},[5519],"\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",[32,143022,143020],{"__ignoreMap":30},[22332,143024,143026],{"id":143025},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[21,143028,143029],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1823,143031],{"style":126659,"src":143032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[25,143034,143035],{"className":126803,"code":142909,"language":126805,"meta":30,"style":30},[32,143036,143037,143041,143049,143067,143087,143091,143095,143101,143125],{"__ignoreMap":30},[35,143038,143039],{"class":37,"line":38},[35,143040,142916],{"class":41},[35,143042,143043,143045,143047],{"class":37,"line":45},[35,143044,142921],{"class":495},[35,143046,142924],{"class":5550},[35,143048,15906],{"class":359},[35,143050,143051,143053,143055,143057,143059,143061,143063,143065],{"class":37,"line":55},[35,143052,142931],{"class":48},[35,143054,80132],{"class":359},[35,143056,48460],{"class":58},[35,143058,51763],{"class":359},[35,143060,142940],{"class":58},[35,143062,499],{"class":359},[35,143064,687],{"class":58},[35,143066,142947],{"class":359},[35,143068,143069,143071,143073,143075,143077,143079,143081,143083,143085],{"class":37,"line":65},[35,143070,142952],{"class":48},[35,143072,80132],{"class":359},[35,143074,48460],{"class":58},[35,143076,51763],{"class":359},[35,143078,142940],{"class":58},[35,143080,499],{"class":359},[35,143082,807],{"class":58},[35,143084,51818],{"class":495},[35,143086,142947],{"class":359},[35,143088,143089],{"class":37,"line":74},[35,143090,1926],{"class":359},[35,143092,143093],{"class":37,"line":83},[35,143094,142977],{"class":41},[35,143096,143097,143099],{"class":37,"line":92},[35,143098,51937],{"class":51626},[35,143100,15906],{"class":359},[35,143102,143103,143105,143107,143109,143111,143113,143115,143117,143119,143121,143123],{"class":37,"line":101},[35,143104,142988],{"class":58},[35,143106,51763],{"class":359},[35,143108,135489],{"class":58},[35,143110,25450],{"class":58},[35,143112,1189],{"class":495},[35,143114,79005],{"class":58},[35,143116,4427],{"class":58},[35,143118,1189],{"class":495},[35,143120,143005],{"class":58},[35,143122,143008],{"class":58},[35,143124,1655],{"class":359},[35,143126,143127],{"class":37,"line":110},[35,143128,1926],{"class":359},[21,143130,143131],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[465,143133,143135],{"id":143134},"_1823-知识点回顾","18.2.3 知识点回顾",[25,143137,143138],{"className":126803,"code":128972,"language":126805,"meta":30,"style":30},[32,143139,143140,143146,143156],{"__ignoreMap":30},[35,143141,143142,143144],{"class":37,"line":38},[35,143143,51937],{"class":51626},[35,143145,15906],{"class":359},[35,143147,143148,143150,143152,143154],{"class":37,"line":45},[35,143149,128985],{"class":58},[35,143151,51763],{"class":359},[35,143153,62062],{"class":58},[35,143155,1655],{"class":359},[35,143157,143158],{"class":37,"line":55},[35,143159,1926],{"class":359},[438,143161,143163],{"id":143162},"_183-3d-转换","18.3 3D 转换",[21,143165,143166],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[465,143168,143170],{"id":143169},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1823,143172],{"style":126659,"src":143173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[465,143175,143177],{"id":143176},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1823,143179],{"style":126659,"src":143180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[21,143182,143183],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[21,143185,143186],{},"translate3d的效果需要搭配透视perspective来使用",[1823,143188],{"style":126659,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[465,143191,143193],{"id":143192},"_1833-透视-perspective","18.3.3 透视 perspective",[1823,143195],{"style":126659,"src":143196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[21,143198,143199],{},"透视写在父盒子上，单位为像素",[465,143201,143203],{"id":143202},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22332,143205,143207],{"id":143206},"_18341-分开解释","18.3.4.1 分开解释",[1823,143209],{"style":126659,"src":143210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1823,143212],{"style":126659,"src":143213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1823,143215],{"style":126659,"src":143216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[21,143218,143219],{},"总结来说就是左手原则",[22332,143221,143223],{"id":143222},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1823,143225],{"style":126659,"src":143226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[465,143228,143230],{"id":143229},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1823,143232],{"style":126659,"src":143233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1823,143235],{"style":126659,"src":143236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[25,143238,143240],{"className":126803,"code":143239,"language":126805,"meta":30,"style":30},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[32,143241,143242,143248,143261,143278],{"__ignoreMap":30},[35,143243,143244,143246],{"class":37,"line":38},[35,143245,51937],{"class":51626},[35,143247,15906],{"class":359},[35,143249,143250,143253,143255,143257,143259],{"class":37,"line":45},[35,143251,143252],{"class":58},"  perspective",[35,143254,51763],{"class":359},[35,143256,65400],{"class":58},[35,143258,51818],{"class":495},[35,143260,1655],{"class":359},[35,143262,143263,143265,143267,143270,143272,143274,143276],{"class":37,"line":55},[35,143264,136787],{"class":58},[35,143266,51763],{"class":359},[35,143268,143269],{"class":58},"rotateX",[35,143271,499],{"class":359},[35,143273,1023],{"class":58},[35,143275,142630],{"class":495},[35,143277,3053],{"class":359},[35,143279,143280],{"class":37,"line":65},[35,143281,1926],{"class":359},[465,143283,143285],{"id":143284},"_1836-案例","18.3.6 案例",[22332,143287,143289],{"id":143288},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1823,143291],{"style":126659,"src":143292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1823,143294],{"style":126659,"src":143295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1823,143297],{"style":126659,"src":143298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[25,143300,143302],{"className":126803,"code":143301,"language":126805,"meta":30,"style":30},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[32,143303,143304,143309,143315,143327],{"__ignoreMap":30},[35,143305,143306],{"class":37,"line":38},[35,143307,143308],{"class":41},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[35,143310,143311,143313],{"class":37,"line":45},[35,143312,133800],{"class":48},[35,143314,15906],{"class":359},[35,143316,143317,143319,143321,143323,143325],{"class":37,"line":55},[35,143318,143252],{"class":58},[35,143320,51763],{"class":359},[35,143322,65400],{"class":58},[35,143324,51818],{"class":495},[35,143326,1655],{"class":359},[35,143328,143329],{"class":37,"line":65},[35,143330,1926],{"class":359},[22332,143332,143334],{"id":143333},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1823,143336],{"style":126659,"src":143337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[25,143339,143340],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,143341,143342,143346,143360,143364],{"__ignoreMap":30},[35,143343,143344],{"class":37,"line":38},[35,143345,130914],{"class":41},[35,143347,143348,143350,143352,143354,143356,143358],{"class":37,"line":45},[35,143349,1404],{"class":359},[35,143351,51937],{"class":51626},[35,143353,53812],{"class":48},[35,143355,544],{"class":359},[35,143357,130927],{"class":306},[35,143359,51633],{"class":359},[35,143361,143362],{"class":37,"line":55},[35,143363,130934],{"class":359},[35,143365,143366,143368,143370],{"class":37,"line":65},[35,143367,52111],{"class":359},[35,143369,51937],{"class":51626},[35,143371,51633],{"class":359},[22332,143373,143375],{"id":143374},"_18363-旋转木马","18.3.6.3 旋转木马",[1823,143377],{"style":126659,"src":143378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[25,143380,143381],{"className":126803,"code":142606,"language":126805,"meta":30,"style":30},[32,143382,143383,143389,143405],{"__ignoreMap":30},[35,143384,143385,143387],{"class":37,"line":38},[35,143386,51937],{"class":51626},[35,143388,15906],{"class":359},[35,143390,143391,143393,143395,143397,143399,143401,143403],{"class":37,"line":45},[35,143392,136787],{"class":58},[35,143394,51763],{"class":359},[35,143396,142623],{"class":58},[35,143398,499],{"class":359},[35,143400,1023],{"class":58},[35,143402,142630],{"class":495},[35,143404,3053],{"class":359},[35,143406,143407],{"class":37,"line":55},[35,143408,1926],{"class":359},[416,143410,143411],{},"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":30,"searchDepth":45,"depth":45,"links":143413},[143414,143421],{"id":142509,"depth":45,"text":142510,"children":143415},[143416,143417,143418,143419,143420],{"id":142533,"depth":55,"text":142534},{"id":142588,"depth":55,"text":142589},{"id":142713,"depth":55,"text":142714},{"id":142816,"depth":55,"text":142817},{"id":143134,"depth":55,"text":143135},{"id":143162,"depth":45,"text":143163,"children":143422},[143423,143424,143425,143426,143427,143428],{"id":143169,"depth":55,"text":143170},{"id":143176,"depth":55,"text":143177},{"id":143192,"depth":55,"text":143193},{"id":143202,"depth":55,"text":143203},{"id":143229,"depth":55,"text":143230},{"id":143284,"depth":55,"text":143285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142501,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143435,"title":143436,"body":143437,"description":421,"extension":422,"meta":143640,"navigation":140,"path":143641,"seo":143642,"stem":143643,"__hash__":143644},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143438,"toc":143629},[143439,143442,143446,143449,143452,143456,143459,143462,143465,143469,143472,143476,143479,143483,143486,143490,143504,143508,143533,143536,143539,143556,143560,143564,143567,143570,143574,143577,143580,143598,143602,143605,143619,143623,143626],[10,143440,143436],{"id":143441},"_19-移动端基础-前缀现状与视口",[438,143443,143445],{"id":143444},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1823,143447],{"style":126659,"src":143448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[21,143450,143451],{},"意思就是加个前缀，增加兼容性",[438,143453,143455],{"id":143454},"_192-移动端现状认识","19.2 移动端现状认识",[1823,143457],{"style":126659,"src":143458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[21,143460,143461],{},"调试方法：",[1823,143463],{"style":126659,"src":143464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[438,143466,143468],{"id":143467},"_193-视口","19.3 视口",[21,143470,143471],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[465,143473,143475],{"id":143474},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1823,143477],{"style":126659,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[465,143480,143482],{"id":143481},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1823,143484],{"style":126659,"src":143485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[465,143487,143489],{"id":143488},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1501,143491,143492,143495,143498,143501],{},[17,143493,143494],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[17,143496,143497],{},"理想视口，对设备来讲，是最理想的视口尺寸",[17,143499,143500],{},"需要手动添写meta视口标签通知浏览器操作",[17,143502,143503],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[465,143505,143507],{"id":143506},"_1934-meta视口标签","19.3.4 meta视口标签",[25,143509,143511],{"className":127550,"code":143510,"language":127552,"meta":30,"style":30},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[32,143512,143513],{"__ignoreMap":30},[35,143514,143515,143517,143519,143521,143523,143525,143527,143529,143531],{"class":37,"line":38},[35,143516,1404],{"class":359},[35,143518,51670],{"class":51626},[35,143520,15254],{"class":48},[35,143522,544],{"class":359},[35,143524,51717],{"class":306},[35,143526,51697],{"class":48},[35,143528,544],{"class":359},[35,143530,51724],{"class":306},[35,143532,51633],{"class":359},[1823,143534],{"style":126659,"src":143535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[21,143537,143538],{},"标准视口设置：",[14,143540,143541,143544,143547,143550,143553],{},[17,143542,143543],{},"视口宽度和设备保持一致",[17,143545,143546],{},"视口的默认缩放比例1.0",[17,143548,143549],{},"不允许用户自行缩放",[17,143551,143552],{},"最大允许的缩放比例1.0",[17,143554,143555],{},"最小允许的缩放比例1.0",[465,143557,143559],{"id":143558},"_1935-二倍图","19.3.5 二倍图",[22332,143561,143563],{"id":143562},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1823,143565],{"style":126659,"src":143566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1823,143568],{"style":126659,"src":143569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22332,143571,143573],{"id":143572},"_19352-多倍图","19.3.5.2 多倍图",[1823,143575],{"style":126659,"src":143576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[21,143578,143579],{},"二倍图法，代码如下：",[25,143581,143583],{"className":126803,"code":143582,"language":126805,"meta":30,"style":30},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[32,143584,143585,143590],{"__ignoreMap":30},[35,143586,143587],{"class":37,"line":38},[35,143588,143589],{"class":41},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[35,143591,143592,143595],{"class":37,"line":45},[35,143593,143594],{"class":51626},"background-size",[35,143596,143597],{"class":359},": 50% 50%;\n",[22332,143599,143601],{"id":143600},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1823,143603],{"style":126659,"src":143604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[14,143606,143607,143610,143613,143616],{},[17,143608,143609],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[17,143611,143612],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[17,143614,143615],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[17,143617,143618],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22332,143620,143622],{"id":143621},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1823,143624],{"style":126659,"src":143625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[416,143627,143628],{},"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":30,"searchDepth":45,"depth":45,"links":143630},[143631,143632,143633],{"id":143444,"depth":45,"text":143445},{"id":143454,"depth":45,"text":143455},{"id":143467,"depth":45,"text":143468,"children":143634},[143635,143636,143637,143638,143639],{"id":143474,"depth":55,"text":143475},{"id":143481,"depth":55,"text":143482},{"id":143488,"depth":55,"text":143489},{"id":143506,"depth":55,"text":143507},{"id":143558,"depth":55,"text":143559},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143436,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143646,"title":143647,"body":143648,"description":421,"extension":422,"meta":144525,"navigation":140,"path":144526,"seo":144527,"stem":144528,"__hash__":144529},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143649,"toc":144509},[143650,143653,143657,143664,143667,143674,143677,143682,143685,143689,143693,143700,143703,143706,143710,143713,143716,143719,143722,143725,143729,143732,143736,143738,143741,143744,143747,143750,143752,143755,143757,143787,143789,143819,143823,143826,143830,143833,143850,143853,143856,143932,143934,143937,143940,143943,143946,143948,143951,143954,143958,143980,143983,143986,143990,143993,143999,144002,144006,144009,144012,144016,144019,144022,144025,144029,144032,144035,144038,144041,144045,144048,144052,144059,144062,144065,144068,144071,144081,144084,144087,144094,144097,144101,144104,144107,144111,144114,144117,144120,144165,144168,144171,144174,144176,144305,144307,144345,144348,144351,144353,144471,144473,144507],[10,143651,143647],{"id":143652},"_20-移动端布局实战上篇",[438,143654,143656],{"id":143655},"_201-移动端主流方案","20.1 移动端主流方案",[14,143658,143659],{},[17,143660,143661],{},[645,143662,143663],{},"单独移动端页面（主流）",[1823,143665],{"style":126659,"src":143666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[14,143668,143669],{"start":45},[17,143670,143671],{},[645,143672,143673],{},"响应式兼容PC移动端",[1823,143675],{"style":126659,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[14,143678,143679],{"start":55},[17,143680,143681],{},"两种页面选型布局方式",[1823,143683],{"style":126659,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[438,143686,143688],{"id":143687},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[465,143690,143692],{"id":143691},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[21,143694,143695,143696],{},"官网地址： ",[734,143697,143698],{"href":143698,"rel":143699},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24198],[1823,143701],{"style":126659,"src":143702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1823,143704],{"style":126659,"src":143705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[465,143707,143709],{"id":143708},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1823,143711],{"style":126659,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1823,143714],{"style":126659,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[21,143717,143718],{},"去除高亮：",[21,143720,143721],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[21,143723,143724],{},"-webkit- tap-highlight-color: transparent;",[438,143726,143728],{"id":143727},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1823,143730],{"style":126659,"src":143731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[438,143733,143735],{"id":143734},"_204-流式布局案例","20.4 流式布局案例",[21,143737,528],{},[21,143739,143740],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[21,143742,143743],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[21,143745,143746],{},"图片格式：",[1823,143748],{"style":126659,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[21,143751,135846],{},[1823,143753],{"style":126659,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[21,143756,140173],{},[25,143758,143759],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,143760,143761],{"__ignoreMap":30},[35,143762,143763,143765,143767,143769,143771,143773,143775,143777,143779,143781,143783,143785],{"class":37,"line":38},[35,143764,1404],{"class":359},[35,143766,1823],{"class":51626},[35,143768,55565],{"class":48},[35,143770,544],{"class":359},[35,143772,134320],{"class":306},[35,143774,55573],{"class":48},[35,143776,544],{"class":359},[35,143778,134327],{"class":306},[35,143780,134330],{"class":48},[35,143782,544],{"class":359},[35,143784,134335],{"class":306},[35,143786,51633],{"class":359},[21,143788,140262],{},[25,143790,143791],{"className":127550,"code":134305,"language":127552,"meta":30,"style":30},[32,143792,143793],{"__ignoreMap":30},[35,143794,143795,143797,143799,143801,143803,143805,143807,143809,143811,143813,143815,143817],{"class":37,"line":38},[35,143796,1404],{"class":359},[35,143798,1823],{"class":51626},[35,143800,55565],{"class":48},[35,143802,544],{"class":359},[35,143804,134320],{"class":306},[35,143806,55573],{"class":48},[35,143808,544],{"class":359},[35,143810,134327],{"class":306},[35,143812,134330],{"class":48},[35,143814,544],{"class":359},[35,143816,134335],{"class":306},[35,143818,51633],{"class":359},[438,143820,143822],{"id":143821},"_205-flex布局","20.5 flex布局",[1823,143824],{"style":126659,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[465,143827,143829],{"id":143828},"_2051-布局原理","20.5.1 布局原理",[21,143831,143832],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1501,143834,143835,143838,143841,143844,143847],{},[17,143836,143837],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[17,143839,143840],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[17,143842,143843],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[17,143845,143846],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[17,143848,143849],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[21,143851,143852],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[21,143854,143855],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[25,143857,143859],{"className":126803,"code":143858,"language":126805,"meta":30,"style":30},"\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",[32,143860,143861,143866,143873,143883,143895,143906,143917,143928],{"__ignoreMap":30},[35,143862,143863],{"class":37,"line":38},[35,143864,143865],{"class":41},"\u002F* Flex 弹性布局 *\u002F\n",[35,143867,143868,143871],{"class":37,"line":45},[35,143869,143870],{"class":48},".container",[35,143872,15906],{"class":359},[35,143874,143875,143877,143879,143881],{"class":37,"line":55},[35,143876,128419],{"class":58},[35,143878,51763],{"class":359},[35,143880,51803],{"class":58},[35,143882,1655],{"class":359},[35,143884,143885,143888,143890,143893],{"class":37,"line":65},[35,143886,143887],{"class":58},"  flex-direction",[35,143889,51763],{"class":359},[35,143891,143892],{"class":58},"row",[35,143894,1655],{"class":359},[35,143896,143897,143900,143902,143904],{"class":37,"line":74},[35,143898,143899],{"class":58},"  justify-content",[35,143901,51763],{"class":359},[35,143903,51994],{"class":58},[35,143905,1655],{"class":359},[35,143907,143908,143911,143913,143915],{"class":37,"line":83},[35,143909,143910],{"class":58},"  align-items",[35,143912,51763],{"class":359},[35,143914,51918],{"class":58},[35,143916,1655],{"class":359},[35,143918,143919,143922,143924,143926],{"class":37,"line":92},[35,143920,143921],{"class":58},"  flex-wrap",[35,143923,51763],{"class":359},[35,143925,78935],{"class":58},[35,143927,1655],{"class":359},[35,143929,143930],{"class":37,"line":101},[35,143931,1926],{"class":359},[21,143933,70778],{},[21,143935,143936],{},".form-item .male-label {",[21,143938,143939],{},"   margin-right: 20px;",[21,143941,143942],{},"   display: inline-flex;",[21,143944,143945],{},"   align-items: center;",[21,143947,1440],{},[1823,143949],{"style":126659,"src":143950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1823,143952],{"style":126659,"src":143953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[465,143955,143957],{"id":143956},"_2052-常见父项属性","20.5.2 常见父项属性",[14,143959,143960,143963,143966,143969,143972,143975,143978],{},[17,143961,143962],{},"flex-direction：设置主轴的方向",[17,143964,143965],{},"justify-content：设置主轴上的子元素排列方式",[17,143967,143968],{},"flex-wrap：设置子元素是否换行",[17,143970,143971],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[17,143973,143974],{},"align-items：设置侧轴上的子元素排列方式（单行）",[17,143976,143977],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[17,143979,143962],{},[1823,143981],{"style":126659,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1823,143984],{"style":126659,"src":143985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[14,143987,143988],{"start":45},[17,143989,143965],{},[1823,143991],{"style":126659,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[21,143994,143995,143998],{},[32,143996,143997],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[21,144000,144001],{},"跟着主轴走",[14,144003,144004],{"start":55},[17,144005,143968],{},[1823,144007],{"style":126659,"src":144008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[21,144010,144011],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[14,144013,144014],{"start":65},[17,144015,143971],{},[1823,144017],{"style":126659,"src":144018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[21,144020,144021],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[21,144023,144024],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[14,144026,144027],{"start":74},[17,144028,143974],{},[1823,144030],{"style":126659,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[21,144033,144034],{},"align-items与align-content之间的区别：",[21,144036,144037],{},"单找items，多找content",[1823,144039],{"style":126659,"src":144040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[14,144042,144043],{"start":83},[17,144044,143977],{},[1823,144046],{"style":126659,"src":144047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[465,144049,144051],{"id":144050},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[14,144053,144054],{},[17,144055,144056],{},[645,144057,144058],{},"flex 属性",[21,144060,144061],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1823,144063],{"style":126659,"src":144064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[21,144066,144067],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[21,144069,144070],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[14,144072,144073],{"start":45},[17,144074,144075,14129,144078],{},[645,144076,144077],{},"align-self",[645,144079,144080],{},"控制子项自己在侧轴上的排列方式",[1823,144082],{"style":126659,"src":144083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[21,144085,144086],{},"单个子盒子在父盒子侧轴上的排列方式",[14,144088,144089],{"start":55},[17,144090,144091,144093],{},[645,144092,95622],{}," 属性定义项目的排列顺序",[1823,144095],{"style":126659,"src":144096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[465,144098,144100],{"id":144099},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1823,144102],{"style":126659,"src":144103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[21,144105,144106],{},"必须要添加浏览器的私有前缀",[465,144108,144110],{"id":144109},"_2055-携程网首页案例","20.5.5 携程网首页案例",[21,144112,144113],{},"学到最重要的知识：",[21,144115,144116],{},"flex处理这样的布局思路",[1823,144118],{"style":126659,"src":144119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[25,144121,144123],{"className":126803,"code":144122,"language":126805,"meta":30,"style":30},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[32,144124,144125,144131,144141,144151,144161],{"__ignoreMap":30},[35,144126,144127,144129],{"class":37,"line":38},[35,144128,143870],{"class":48},[35,144130,15906],{"class":359},[35,144132,144133,144135,144137,144139],{"class":37,"line":45},[35,144134,128419],{"class":58},[35,144136,51763],{"class":359},[35,144138,51803],{"class":58},[35,144140,1655],{"class":359},[35,144142,144143,144145,144147,144149],{"class":37,"line":55},[35,144144,143899],{"class":58},[35,144146,51763],{"class":359},[35,144148,51918],{"class":58},[35,144150,1655],{"class":359},[35,144152,144153,144155,144157,144159],{"class":37,"line":65},[35,144154,143910],{"class":58},[35,144156,51763],{"class":359},[35,144158,51918],{"class":58},[35,144160,1655],{"class":359},[35,144162,144163],{"class":37,"line":74},[35,144164,1926],{"class":359},[21,144166,144167],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[21,144169,144170],{},"使用属性选择器",[1823,144172],{"style":126659,"src":144173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[21,144175,69215],{},[25,144177,144179],{"className":127550,"code":144178,"language":127552,"meta":30,"style":30},"\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",[32,144180,144181,144186,144200,144205,144225,144230,144249,144254,144273,144278,144297],{"__ignoreMap":30},[35,144182,144183],{"class":37,"line":38},[35,144184,144185],{"class":41},"\u003C!-- 携程网移动端案例结构 -->\n",[35,144187,144188,144190,144192,144194,144196,144198],{"class":37,"line":45},[35,144189,1404],{"class":359},[35,144191,51937],{"class":51626},[35,144193,53812],{"class":48},[35,144195,544],{"class":359},[35,144197,92648],{"class":306},[35,144199,51633],{"class":359},[35,144201,144202],{"class":37,"line":55},[35,144203,144204],{"class":41},"  \u003C!-- 搜索栏 -->\n",[35,144206,144207,144209,144211,144213,144215,144218,144221,144223],{"class":37,"line":65},[35,144208,52470],{"class":359},[35,144210,51937],{"class":51626},[35,144212,53812],{"class":48},[35,144214,544],{"class":359},[35,144216,144217],{"class":306},"\"search-index\"",[35,144219,144220],{"class":359},">...\u003C\u002F",[35,144222,51937],{"class":51626},[35,144224,51633],{"class":359},[35,144226,144227],{"class":37,"line":74},[35,144228,144229],{"class":41},"  \u003C!-- 焦点图 -->\n",[35,144231,144232,144234,144236,144238,144240,144243,144245,144247],{"class":37,"line":83},[35,144233,52470],{"class":359},[35,144235,51937],{"class":51626},[35,144237,53812],{"class":48},[35,144239,544],{"class":359},[35,144241,144242],{"class":306},"\"focus\"",[35,144244,144220],{"class":359},[35,144246,51937],{"class":51626},[35,144248,51633],{"class":359},[35,144250,144251],{"class":37,"line":92},[35,144252,144253],{"class":41},"  \u003C!-- 主导航 -->\n",[35,144255,144256,144258,144260,144262,144264,144267,144269,144271],{"class":37,"line":101},[35,144257,52470],{"class":359},[35,144259,51937],{"class":51626},[35,144261,53812],{"class":48},[35,144263,544],{"class":359},[35,144265,144266],{"class":306},"\"local-nav\"",[35,144268,144220],{"class":359},[35,144270,51937],{"class":51626},[35,144272,51633],{"class":359},[35,144274,144275],{"class":37,"line":110},[35,144276,144277],{"class":41},"  \u003C!-- 子导航 -->\n",[35,144279,144280,144282,144284,144286,144288,144291,144293,144295],{"class":37,"line":119},[35,144281,52470],{"class":359},[35,144283,51937],{"class":51626},[35,144285,53812],{"class":48},[35,144287,544],{"class":359},[35,144289,144290],{"class":306},"\"nav-common\"",[35,144292,144220],{"class":359},[35,144294,51937],{"class":51626},[35,144296,51633],{"class":359},[35,144298,144299,144301,144303],{"class":37,"line":128},[35,144300,52111],{"class":359},[35,144302,51937],{"class":51626},[35,144304,51633],{"class":359},[21,144306,70778],{},[25,144308,144309],{"className":126803,"code":137255,"language":126805,"meta":30,"style":30},[32,144310,144311,144325,144341],{"__ignoreMap":30},[35,144312,144313,144315,144317,144319,144321,144323],{"class":37,"line":38},[35,144314,54147],{"class":51626},[35,144316,1384],{"class":359},[35,144318,103429],{"class":48},[35,144320,544],{"class":495},[35,144322,63025],{"class":306},[35,144324,137272],{"class":359},[35,144326,144327,144329,144331,144333,144335,144337,144339],{"class":37,"line":45},[35,144328,71221],{"class":58},[35,144330,51763],{"class":359},[35,144332,713],{"class":58},[35,144334,51818],{"class":495},[35,144336,51847],{"class":58},[35,144338,130383],{"class":58},[35,144340,1655],{"class":359},[35,144342,144343],{"class":37,"line":55},[35,144344,1926],{"class":359},[21,144346,144347],{},"总代码和效果展示：",[1823,144349],{"style":126659,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[21,144352,69215],{},[25,144354,144355],{"className":127550,"code":144178,"language":127552,"meta":30,"style":30},[32,144356,144357,144361,144375,144379,144397,144401,144419,144423,144441,144445,144463],{"__ignoreMap":30},[35,144358,144359],{"class":37,"line":38},[35,144360,144185],{"class":41},[35,144362,144363,144365,144367,144369,144371,144373],{"class":37,"line":45},[35,144364,1404],{"class":359},[35,144366,51937],{"class":51626},[35,144368,53812],{"class":48},[35,144370,544],{"class":359},[35,144372,92648],{"class":306},[35,144374,51633],{"class":359},[35,144376,144377],{"class":37,"line":55},[35,144378,144204],{"class":41},[35,144380,144381,144383,144385,144387,144389,144391,144393,144395],{"class":37,"line":65},[35,144382,52470],{"class":359},[35,144384,51937],{"class":51626},[35,144386,53812],{"class":48},[35,144388,544],{"class":359},[35,144390,144217],{"class":306},[35,144392,144220],{"class":359},[35,144394,51937],{"class":51626},[35,144396,51633],{"class":359},[35,144398,144399],{"class":37,"line":74},[35,144400,144229],{"class":41},[35,144402,144403,144405,144407,144409,144411,144413,144415,144417],{"class":37,"line":83},[35,144404,52470],{"class":359},[35,144406,51937],{"class":51626},[35,144408,53812],{"class":48},[35,144410,544],{"class":359},[35,144412,144242],{"class":306},[35,144414,144220],{"class":359},[35,144416,51937],{"class":51626},[35,144418,51633],{"class":359},[35,144420,144421],{"class":37,"line":92},[35,144422,144253],{"class":41},[35,144424,144425,144427,144429,144431,144433,144435,144437,144439],{"class":37,"line":101},[35,144426,52470],{"class":359},[35,144428,51937],{"class":51626},[35,144430,53812],{"class":48},[35,144432,544],{"class":359},[35,144434,144266],{"class":306},[35,144436,144220],{"class":359},[35,144438,51937],{"class":51626},[35,144440,51633],{"class":359},[35,144442,144443],{"class":37,"line":110},[35,144444,144277],{"class":41},[35,144446,144447,144449,144451,144453,144455,144457,144459,144461],{"class":37,"line":119},[35,144448,52470],{"class":359},[35,144450,51937],{"class":51626},[35,144452,53812],{"class":48},[35,144454,544],{"class":359},[35,144456,144290],{"class":306},[35,144458,144220],{"class":359},[35,144460,51937],{"class":51626},[35,144462,51633],{"class":359},[35,144464,144465,144467,144469],{"class":37,"line":128},[35,144466,52111],{"class":359},[35,144468,51937],{"class":51626},[35,144470,51633],{"class":359},[21,144472,70778],{},[25,144474,144475],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,144476,144477,144481,144495,144499],{"__ignoreMap":30},[35,144478,144479],{"class":37,"line":38},[35,144480,130914],{"class":41},[35,144482,144483,144485,144487,144489,144491,144493],{"class":37,"line":45},[35,144484,1404],{"class":359},[35,144486,51937],{"class":51626},[35,144488,53812],{"class":48},[35,144490,544],{"class":359},[35,144492,130927],{"class":306},[35,144494,51633],{"class":359},[35,144496,144497],{"class":37,"line":55},[35,144498,130934],{"class":359},[35,144500,144501,144503,144505],{"class":37,"line":65},[35,144502,52111],{"class":359},[35,144504,51937],{"class":51626},[35,144506,51633],{"class":359},[416,144508,138204],{},{"title":30,"searchDepth":45,"depth":45,"links":144510},[144511,144512,144516,144517,144518],{"id":143655,"depth":45,"text":143656},{"id":143687,"depth":45,"text":143688,"children":144513},[144514,144515],{"id":143691,"depth":55,"text":143692},{"id":143708,"depth":55,"text":143709},{"id":143727,"depth":45,"text":143728},{"id":143734,"depth":45,"text":143735},{"id":143821,"depth":45,"text":143822,"children":144519},[144520,144521,144522,144523,144524],{"id":143828,"depth":55,"text":143829},{"id":143956,"depth":55,"text":143957},{"id":144050,"depth":55,"text":144051},{"id":144099,"depth":55,"text":144100},{"id":144109,"depth":55,"text":144110},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143647,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144531,"title":144532,"body":144533,"description":421,"extension":422,"meta":145760,"navigation":140,"path":145761,"seo":145762,"stem":145763,"__hash__":145764},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144534,"toc":145738},[144535,144538,144542,144546,144549,144552,144556,144561,144564,144567,144570,144573,144576,144633,144636,144641,144644,144647,144651,144662,144666,144669,144672,144679,144684,144688,144691,144697,144700,144704,144707,144714,144717,144720,144727,144730,144737,144740,144743,144750,144753,144756,144758,144775,144779,144782,144785,144788,144792,144795,144798,144801,144804,144807,144810,144812,144815,144818,144880,144883,144993,145000,145006,145009,145012,145016,145019,145023,145028,145031,145038,145041,145047,145052,145055,145058,145061,145064,145067,145070,145073,145076,145132,145134,145160,145164,145167,145170,145173,145181,145184,145187,145191,145247,145250,145254,145260,145271,145274,145279,145282,145285,145291,145294,145297,145300,145303,145306,145309,145312,145315,145340,145346,145349,145352,145355,145358,145361,145364,145369,145372,145375,145378,145386,145389,145396,145399,145402,145404,145428,145430,145433,145436,145439,145442,145445,145448,145451,145485,145488,145491,145525,145532,145535,145538,145541,145544,145547,145550,145557,145560,145563,145566,145569,145576,145579,145582,145589,145592,145595,145599,145602,145605,145608,145611,145614,145617,145620,145623,145625,145649,145651,145675,145679,145690,145693,145696,145699,145702,145705,145708,145711,145714,145717,145720,145723,145726,145729,145732,145735],[10,144536,144532],{"id":144537},"_21-移动端布局实战下篇",[438,144539,144541],{"id":144540},"_211-rem适配布局","21.1 rem适配布局",[465,144543,144545],{"id":144544},"_2111-rem单位","21.1.1 rem单位",[1823,144547],{"style":126659,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[21,144550,144551],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[465,144553,144555],{"id":144554},"_2112-媒体查询","21.1.2 媒体查询",[14,144557,144558],{},[17,144559,144560],{},"参数介绍",[1823,144562],{"style":126659,"src":144563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1823,144565],{"style":126659,"src":144566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1823,144568],{"style":126659,"src":144569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1823,144571],{"style":126659,"src":144572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1823,144574],{"style":126659,"src":144575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[25,144577,144579],{"className":126803,"code":144578,"language":126805,"meta":30,"style":30},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[32,144580,144581,144586,144605,144612,144625,144629],{"__ignoreMap":30},[35,144582,144583],{"class":37,"line":38},[35,144584,144585],{"class":41},"\u002F* 媒体查询 *\u002F\n",[35,144587,144588,144591,144593,144596,144598,144601,144603],{"class":37,"line":45},[35,144589,144590],{"class":495},"@media",[35,144592,2012],{"class":359},[35,144594,144595],{"class":58},"max-width",[35,144597,51763],{"class":359},[35,144599,144600],{"class":58},"768",[35,144602,51818],{"class":495},[35,144604,12776],{"class":359},[35,144606,144607,144610],{"class":37,"line":55},[35,144608,144609],{"class":48},"  .container",[35,144611,15906],{"class":359},[35,144613,144614,144617,144619,144621,144623],{"class":37,"line":65},[35,144615,144616],{"class":58},"    width",[35,144618,51763],{"class":359},[35,144620,807],{"class":58},[35,144622,823],{"class":495},[35,144624,1655],{"class":359},[35,144626,144627],{"class":37,"line":74},[35,144628,127599],{"class":359},[35,144630,144631],{"class":37,"line":83},[35,144632,1926],{"class":359},[21,144634,144635],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[14,144637,144638],{"start":45},[17,144639,144640],{},"引入资源",[1823,144642],{"style":126659,"src":144643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[21,144645,144646],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[465,144648,144650],{"id":144649},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1501,144652,144653,144656,144659],{},[17,144654,144655],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[17,144657,144658],{},"媒体查询可以根据不同设备宽度来修改样式",[17,144660,144661],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[438,144663,144665],{"id":144664},"_212-less基础","21.2 Less基础",[21,144667,144668],{},"css冗余度较高，不利于复用，没有很好的计算能力",[21,144670,144671],{},"Less可以解决该问题，它是css的扩展语言",[21,144673,144674,144675],{},"Less中文网址： ",[734,144676,144677],{"href":144677,"rel":144678},"http:\u002F\u002Flesscss.cn\u002F",[24198],[21,144680,144681],{},[645,144682,144683],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[465,144685,144687],{"id":144686},"_2121-less安装","21.2.1 less安装",[21,144689,144690],{},"如果使用vscode，则无需进行下方安装步骤",[21,144692,144693],{},[734,144694,144695],{"href":144695,"rel":144696},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24198],[1823,144698],{"style":126659,"src":144699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[465,144701,144703],{"id":144702},"_2122-less使用","21.2.2 less使用",[21,144705,144706],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[14,144708,144709],{},[17,144710,144711],{},[645,144712,144713],{},"Less 变量",[1823,144715],{"style":126659,"src":144716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1823,144718],{"style":126659,"src":144719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[14,144721,144722],{"start":45},[17,144723,144724],{},[645,144725,144726],{},"Less 编译",[1823,144728],{"style":126659,"src":144729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[14,144731,144732],{"start":55},[17,144733,144734],{},[645,144735,144736],{},"Less 嵌套",[1823,144738],{"style":126659,"src":144739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1823,144741],{"style":126659,"src":144742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[14,144744,144745],{"start":65},[17,144746,144747],{},[645,144748,144749],{},"Less 运算",[1823,144751],{"style":126659,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[21,144754,144755],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[21,144757,528],{},[1501,144759,144760,144763,144766,144769,144772],{},[17,144761,144762],{},"乘号（*）和除号（\u002F）的写法",[17,144764,144765],{},"运算符中间左右有个空格隔开 1px + 5",[17,144767,144768],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[17,144770,144771],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[17,144773,144774],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[438,144776,144778],{"id":144777},"_213-rem-适配方案","21.3 rem 适配方案",[21,144780,144781],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[21,144783,144784],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1823,144786],{"style":126659,"src":144787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[465,144789,144791],{"id":144790},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[21,144793,144794],{},"rem + 媒体查询 + less 技术",[1823,144796],{"style":126659,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[21,144799,144800],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[21,144802,144803],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1823,144805],{"style":126659,"src":144806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[21,144808,144809],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[21,144811,14967],{},[1823,144813],{"style":126659,"src":144814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[21,144816,144817],{},"index.html:",[25,144819,144821],{"className":126803,"code":144820,"language":126805,"meta":30,"style":30},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[32,144822,144823,144828,144834,144850,144854,144860,144876],{"__ignoreMap":30},[35,144824,144825],{"class":37,"line":38},[35,144826,144827],{"class":41},"\u002F* rem 适配方案 *\u002F\n",[35,144829,144830,144832],{"class":37,"line":45},[35,144831,50961],{"class":51626},[35,144833,15906],{"class":359},[35,144835,144836,144838,144840,144843,144845,144847],{"class":37,"line":55},[35,144837,70951],{"class":58},[35,144839,51763],{"class":359},[35,144841,144842],{"class":58},"62.5",[35,144844,823],{"class":495},[35,144846,130666],{"class":359},[35,144848,144849],{"class":41},"\u002F* 1rem = 10px *\u002F\n",[35,144851,144852],{"class":37,"line":65},[35,144853,1926],{"class":359},[35,144855,144856,144858],{"class":37,"line":74},[35,144857,130651],{"class":48},[35,144859,15906],{"class":359},[35,144861,144862,144864,144866,144868,144871,144873],{"class":37,"line":83},[35,144863,70893],{"class":58},[35,144865,51763],{"class":359},[35,144867,940],{"class":58},[35,144869,144870],{"class":495},"rem",[35,144872,130666],{"class":359},[35,144874,144875],{"class":41},"\u002F* 100px *\u002F\n",[35,144877,144878],{"class":37,"line":92},[35,144879,1926],{"class":359},[21,144881,144882],{},"common.less",[25,144884,144886],{"className":126803,"code":144885,"language":126805,"meta":30,"style":30},"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",[32,144887,144888,144894,144909,144913,144919,144933,144937,144941,144945,144951,144965,144969,144975,144989],{"__ignoreMap":30},[35,144889,144890,144892],{"class":37,"line":38},[35,144891,50961],{"class":51626},[35,144893,15906],{"class":359},[35,144895,144896,144898,144900,144902,144904,144906],{"class":37,"line":45},[35,144897,70951],{"class":58},[35,144899,51763],{"class":359},[35,144901,144842],{"class":58},[35,144903,823],{"class":495},[35,144905,26398],{"class":359},[35,144907,144908],{"class":41},"\u002F* 10px *\u002F\n",[35,144910,144911],{"class":37,"line":55},[35,144912,1926],{"class":359},[35,144914,144915,144917],{"class":37,"line":65},[35,144916,51937],{"class":51626},[35,144918,15906],{"class":359},[35,144920,144921,144923,144925,144927,144929,144931],{"class":37,"line":74},[35,144922,70893],{"class":58},[35,144924,51763],{"class":359},[35,144926,940],{"class":58},[35,144928,144870],{"class":495},[35,144930,26398],{"class":359},[35,144932,144875],{"class":41},[35,144934,144935],{"class":37,"line":83},[35,144936,1926],{"class":359},[35,144938,144939],{"class":37,"line":92},[35,144940,136264],{"class":359},[35,144942,144943],{"class":37,"line":101},[35,144944,144827],{"class":41},[35,144946,144947,144949],{"class":37,"line":110},[35,144948,50961],{"class":51626},[35,144950,15906],{"class":359},[35,144952,144953,144955,144957,144959,144961,144963],{"class":37,"line":119},[35,144954,70951],{"class":58},[35,144956,51763],{"class":359},[35,144958,144842],{"class":58},[35,144960,823],{"class":495},[35,144962,130666],{"class":359},[35,144964,144849],{"class":41},[35,144966,144967],{"class":37,"line":128},[35,144968,1926],{"class":359},[35,144970,144971,144973],{"class":37,"line":137},[35,144972,130651],{"class":48},[35,144974,15906],{"class":359},[35,144976,144977,144979,144981,144983,144985,144987],{"class":37,"line":144},[35,144978,70893],{"class":58},[35,144980,51763],{"class":359},[35,144982,940],{"class":58},[35,144984,144870],{"class":495},[35,144986,130666],{"class":359},[35,144988,144875],{"class":41},[35,144990,144991],{"class":37,"line":150},[35,144992,1926],{"class":359},[21,144994,144995,144996,144999],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23887,144997,144998],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[25,145001,145004],{"className":145002,"code":145003,"language":5521},[5519],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[32,145005,145003],{"__ignoreMap":30},[21,145007,145008],{},"less保存时会自动变成.css文件",[21,145010,145011],{},"好好搞懂上述代码写法",[465,145013,145015],{"id":145014},"_2132-样式导入样式","21.3.2 样式导入样式",[1823,145017],{"style":126659,"src":145018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[465,145020,145022],{"id":145021},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[14,145024,145025],{},[17,145026,145027],{},"准备工作",[1823,145029],{"style":126659,"src":145030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[21,145032,145033,145034],{},"github地址：",[734,145035,145036],{"href":145036,"rel":145037},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24198],[21,145039,145040],{},"下载之后，将index.js文件拖到项目中就可以了",[21,145042,145043,145044],{},"js文件引入到index.html中使用的是",[32,145045,145046],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[14,145048,145049],{"start":45},[17,145050,145051],{},"vscode插件",[1823,145053],{"style":126659,"src":145054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[21,145056,145057],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[21,145059,145060],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1823,145062],{"style":126659,"src":145063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[21,145065,145066],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1823,145068],{"style":126659,"src":145069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[21,145071,145072],{},"修改成75就可以，alt+z为快捷键",[21,145074,145075],{},"index.css：",[25,145077,145078],{"className":126803,"code":144820,"language":126805,"meta":30,"style":30},[32,145079,145080,145084,145090,145104,145108,145114,145128],{"__ignoreMap":30},[35,145081,145082],{"class":37,"line":38},[35,145083,144827],{"class":41},[35,145085,145086,145088],{"class":37,"line":45},[35,145087,50961],{"class":51626},[35,145089,15906],{"class":359},[35,145091,145092,145094,145096,145098,145100,145102],{"class":37,"line":55},[35,145093,70951],{"class":58},[35,145095,51763],{"class":359},[35,145097,144842],{"class":58},[35,145099,823],{"class":495},[35,145101,130666],{"class":359},[35,145103,144849],{"class":41},[35,145105,145106],{"class":37,"line":65},[35,145107,1926],{"class":359},[35,145109,145110,145112],{"class":37,"line":74},[35,145111,130651],{"class":48},[35,145113,15906],{"class":359},[35,145115,145116,145118,145120,145122,145124,145126],{"class":37,"line":83},[35,145117,70893],{"class":58},[35,145119,51763],{"class":359},[35,145121,940],{"class":58},[35,145123,144870],{"class":495},[35,145125,130666],{"class":359},[35,145127,144875],{"class":41},[35,145129,145130],{"class":37,"line":92},[35,145131,1926],{"class":359},[21,145133,144817],{},[25,145135,145136],{"className":126803,"code":127207,"language":126805,"meta":30,"style":30},[32,145137,145138,145144,145156],{"__ignoreMap":30},[35,145139,145140,145142],{"class":37,"line":38},[35,145141,52126],{"class":51626},[35,145143,15906],{"class":359},[35,145145,145146,145148,145150,145152,145154],{"class":37,"line":45},[35,145147,70951],{"class":58},[35,145149,51763],{"class":359},[35,145151,1095],{"class":58},[35,145153,51818],{"class":495},[35,145155,1655],{"class":359},[35,145157,145158],{"class":37,"line":55},[35,145159,1926],{"class":359},[438,145161,145163],{"id":145162},"_214-响应式开发","21.4 响应式开发",[21,145165,145166],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1823,145168],{"style":126659,"src":145169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[21,145171,145172],{},"做法：",[1501,145174,145175,145178],{},[17,145176,145177],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[17,145179,145180],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1823,145182],{"style":126659,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[21,145185,145186],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[465,145188,145190],{"id":145189},"_2141-简单代码示范","21.4.1 简单代码示范",[25,145192,145193],{"className":126803,"code":144820,"language":126805,"meta":30,"style":30},[32,145194,145195,145199,145205,145219,145223,145229,145243],{"__ignoreMap":30},[35,145196,145197],{"class":37,"line":38},[35,145198,144827],{"class":41},[35,145200,145201,145203],{"class":37,"line":45},[35,145202,50961],{"class":51626},[35,145204,15906],{"class":359},[35,145206,145207,145209,145211,145213,145215,145217],{"class":37,"line":55},[35,145208,70951],{"class":58},[35,145210,51763],{"class":359},[35,145212,144842],{"class":58},[35,145214,823],{"class":495},[35,145216,130666],{"class":359},[35,145218,144849],{"class":41},[35,145220,145221],{"class":37,"line":65},[35,145222,1926],{"class":359},[35,145224,145225,145227],{"class":37,"line":74},[35,145226,130651],{"class":48},[35,145228,15906],{"class":359},[35,145230,145231,145233,145235,145237,145239,145241],{"class":37,"line":83},[35,145232,70893],{"class":58},[35,145234,51763],{"class":359},[35,145236,940],{"class":58},[35,145238,144870],{"class":495},[35,145240,130666],{"class":359},[35,145242,144875],{"class":41},[35,145244,145245],{"class":37,"line":92},[35,145246,1926],{"class":359},[21,145248,145249],{},"父盒子一般命名为container",[465,145251,145253],{"id":145252},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[21,145255,145256,145257],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[645,145258,145259],{},"使得 Web 开发更加快捷",[1501,145261,145262],{},[17,145263,145264,145265],{},"官网：",[645,145266,145267],{},[734,145268,145269],{"href":145269,"rel":145270},"http:\u002F\u002Fgetbootstrap.com\u002F",[24198],[21,145272,145273],{},"可以直接去官网拿现成的东西",[14,145275,145276],{},[17,145277,145278],{},"Bootstrap的使用",[21,145280,145281],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[21,145283,145284],{},"Bootstrap 使用四步曲：",[21,145286,145287,145290],{},[645,145288,145289],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1823,145292],{"style":126659,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[21,145295,145296],{},"打开Bootstrap官网，然后下载",[1823,145298],{"style":126659,"src":145299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1823,145301],{"style":126659,"src":145302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[21,145304,145305],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[21,145307,145308],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[21,145310,145311],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1823,145313],{"style":126659,"src":145314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[25,145316,145318],{"className":126803,"code":145317,"language":126805,"meta":30,"style":30},".center {\n  color: red;\n}\n",[32,145319,145320,145326,145336],{"__ignoreMap":30},[35,145321,145322,145324],{"class":37,"line":38},[35,145323,127094],{"class":48},[35,145325,15906],{"class":359},[35,145327,145328,145330,145332,145334],{"class":37,"line":45},[35,145329,71230],{"class":58},[35,145331,51763],{"class":359},[35,145333,57747],{"class":58},[35,145335,1655],{"class":359},[35,145337,145338],{"class":37,"line":55},[35,145339,1926],{"class":359},[21,145341,145342,145345],{},[32,145343,145344],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1823,145347],{"style":126659,"src":145348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1823,145350],{"style":126659,"src":145351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1823,145353],{"style":126659,"src":145354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[21,145356,145357],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1823,145359],{"style":126659,"src":145360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[21,145362,145363],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[14,145365,145366],{"start":45},[17,145367,145368],{},"布局容器",[1823,145370],{"style":126659,"src":145371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[21,145373,145374],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[21,145376,145377],{},"container-fluid用于移动式布局比较方便",[14,145379,145380],{"start":55},[17,145381,145382,145383],{},"bootstrap ",[645,145384,145385],{},"栅格系统原理",[1823,145387],{"style":126659,"src":145388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[14,145390,145391],{"start":65},[17,145392,145393],{},[645,145394,145395],{},"栅格选项参数",[1823,145397],{"style":126659,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[21,145400,145401],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[21,145403,14967],{},[25,145405,145406],{"className":126803,"code":145317,"language":126805,"meta":30,"style":30},[32,145407,145408,145414,145424],{"__ignoreMap":30},[35,145409,145410,145412],{"class":37,"line":38},[35,145411,127094],{"class":48},[35,145413,15906],{"class":359},[35,145415,145416,145418,145420,145422],{"class":37,"line":45},[35,145417,71230],{"class":58},[35,145419,51763],{"class":359},[35,145421,57747],{"class":58},[35,145423,1655],{"class":359},[35,145425,145426],{"class":37,"line":55},[35,145427,1926],{"class":359},[21,145429,135846],{},[1823,145431],{"style":126659,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[21,145434,145435],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[21,145437,145438],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[21,145440,145441],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[21,145443,145444],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[21,145446,145447],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[21,145449,145450],{},"汇总展示说明：",[25,145452,145453],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,145454,145455,145459,145473,145477],{"__ignoreMap":30},[35,145456,145457],{"class":37,"line":38},[35,145458,130914],{"class":41},[35,145460,145461,145463,145465,145467,145469,145471],{"class":37,"line":45},[35,145462,1404],{"class":359},[35,145464,51937],{"class":51626},[35,145466,53812],{"class":48},[35,145468,544],{"class":359},[35,145470,130927],{"class":306},[35,145472,51633],{"class":359},[35,145474,145475],{"class":37,"line":55},[35,145476,130934],{"class":359},[35,145478,145479,145481,145483],{"class":37,"line":65},[35,145480,52111],{"class":359},[35,145482,51937],{"class":51626},[35,145484,51633],{"class":359},[1823,145486],{"style":126659,"src":145487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[21,145489,145490],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[25,145492,145493],{"className":127550,"code":130907,"language":127552,"meta":30,"style":30},[32,145494,145495,145499,145513,145517],{"__ignoreMap":30},[35,145496,145497],{"class":37,"line":38},[35,145498,130914],{"class":41},[35,145500,145501,145503,145505,145507,145509,145511],{"class":37,"line":45},[35,145502,1404],{"class":359},[35,145504,51937],{"class":51626},[35,145506,53812],{"class":48},[35,145508,544],{"class":359},[35,145510,130927],{"class":306},[35,145512,51633],{"class":359},[35,145514,145515],{"class":37,"line":55},[35,145516,130934],{"class":359},[35,145518,145519,145521,145523],{"class":37,"line":65},[35,145520,52111],{"class":359},[35,145522,51937],{"class":51626},[35,145524,51633],{"class":359},[14,145526,145527],{"start":74},[17,145528,145529],{},[645,145530,145531],{},"列嵌套",[1823,145533],{"style":126659,"src":145534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[21,145536,145537],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[21,145539,145540],{},"没加row内部这样：",[1823,145542],{"style":126659,"src":145543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[21,145545,145546],{},"加上row之后内部为：",[1823,145548],{"style":126659,"src":145549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[14,145551,145552],{"start":83},[17,145553,145554],{},[645,145555,145556],{},"列偏移",[1823,145558],{"style":126659,"src":145559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[21,145561,145562],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[21,145564,145565],{},"要加偏移量，即偏移份数",[21,145567,145568],{},"偏移的份数=12-两个盒子的份数",[14,145570,145571],{"start":92},[17,145572,145573],{},[645,145574,145575],{},"列排序",[1823,145577],{"style":126659,"src":145578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[21,145580,145581],{},"pull拉左；push推右",[14,145583,145584],{"start":101},[17,145585,145586],{},[645,145587,145588],{},"响应式工具",[1823,145590],{"style":126659,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[21,145593,145594],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[465,145596,145598],{"id":145597},"_2143-响应式小项目","21.4.3 响应式小项目",[21,145600,145601],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[21,145603,145604],{},"ul {",[21,145606,145607],{},"list-style: none;",[21,145609,145610],{},"margin:0;",[21,145612,145613],{},"padding:0; }",[1823,145615],{"style":126659,"src":145616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1823,145618],{"style":126659,"src":145619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[21,145621,145622],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[21,145624,69215],{},[25,145626,145627],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,145628,145629,145635,145645],{"__ignoreMap":30},[35,145630,145631,145633],{"class":37,"line":38},[35,145632,130651],{"class":48},[35,145634,15906],{"class":359},[35,145636,145637,145639,145641,145643],{"class":37,"line":45},[35,145638,131283],{"class":58},[35,145640,51763],{"class":359},[35,145642,24070],{"class":58},[35,145644,1655],{"class":359},[35,145646,145647],{"class":37,"line":55},[35,145648,1926],{"class":359},[21,145650,70778],{},[25,145652,145653],{"className":126803,"code":139473,"language":126805,"meta":30,"style":30},[32,145654,145655,145661,145671],{"__ignoreMap":30},[35,145656,145657,145659],{"class":37,"line":38},[35,145658,130651],{"class":48},[35,145660,15906],{"class":359},[35,145662,145663,145665,145667,145669],{"class":37,"line":45},[35,145664,131283],{"class":58},[35,145666,51763],{"class":359},[35,145668,24070],{"class":58},[35,145670,1655],{"class":359},[35,145672,145673],{"class":37,"line":55},[35,145674,1926],{"class":359},[438,145676,145678],{"id":145677},"_215-swiper-插件使用","21.5 swiper 插件使用",[1501,145680,145681,145684,145687],{},[17,145682,145683],{},"下载需要的css和js文件html页面中 引入相关文件",[17,145685,145686],{},"官网找到类似案例，复制html结构，css样式 js 语法",[17,145688,145689],{},"根据需求定制修改模块",[1823,145691],{"style":126659,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[21,145694,145695],{},"解压后将这两部分放到项目中",[1823,145697],{"style":126659,"src":145698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[21,145700,145701],{},"这个插件可以帮助我们实现轮播图效果",[21,145703,145704],{},"用法：",[1823,145706],{"style":126659,"src":145707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[21,145709,145710],{},"找到自己喜欢的",[1823,145712],{"style":126659,"src":145713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[21,145715,145716],{},"右键，查看网页源代码",[1823,145718],{"style":126659,"src":145719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[21,145721,145722],{},"复制人家的结构内容",[21,145724,145725],{},"然后去看API文档：",[1823,145727],{"style":126659,"src":145728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[21,145730,145731],{},"可以看看如何修改样式",[21,145733,145734],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[416,145736,145737],{},"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":30,"searchDepth":45,"depth":45,"links":145739},[145740,145745,145749,145754,145759],{"id":144540,"depth":45,"text":144541,"children":145741},[145742,145743,145744],{"id":144544,"depth":55,"text":144545},{"id":144554,"depth":55,"text":144555},{"id":144649,"depth":55,"text":144650},{"id":144664,"depth":45,"text":144665,"children":145746},[145747,145748],{"id":144686,"depth":55,"text":144687},{"id":144702,"depth":55,"text":144703},{"id":144777,"depth":45,"text":144778,"children":145750},[145751,145752,145753],{"id":144790,"depth":55,"text":144791},{"id":145014,"depth":55,"text":145015},{"id":145021,"depth":55,"text":145022},{"id":145162,"depth":45,"text":145163,"children":145755},[145756,145757,145758],{"id":145189,"depth":55,"text":145190},{"id":145252,"depth":55,"text":145253},{"id":145597,"depth":55,"text":145598},{"id":145677,"depth":45,"text":145678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144532,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145766,"title":145767,"body":145768,"description":421,"extension":422,"meta":145988,"navigation":140,"path":145989,"seo":145990,"stem":145991,"__hash__":145992},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145769,"toc":145984},[145770,145773,145777,145780,145795,145800,145803,145808,145843,145848,145860,145865,145878,145883,145900,145905,145925,145930,145948,145951,145954,145957,145960,145964,145967,145970,145973,145976,145979,145982],[10,145771,145767],{"id":145772},"_22-代码提交与新型相对单位",[438,145774,145776],{"id":145775},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[21,145778,145779],{},"法1：",[14,145781,145782,145789,145792],{},[17,145783,145784,145785],{},"登录网站注册：",[734,145786,145787],{"href":145787,"rel":145788},"https:\u002F\u002Fgitee.com\u002F",[24198],[17,145790,145791],{},"码云创建新的仓库",[17,145793,145794],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1501,145796,145797],{},[17,145798,145799],{},"在网站根目录右键-- Git Bash Here",[1823,145801],{"style":126659,"src":145802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1501,145804,145805],{},[17,145806,145807],{},"如果是第一次利用git提交，请配置好全局选项",[25,145809,145811],{"className":27,"code":145810,"language":29,"meta":30,"style":30},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[32,145812,145813,145829],{"__ignoreMap":30},[35,145814,145815,145818,145820,145823,145826],{"class":37,"line":38},[35,145816,145817],{"class":48},"git",[35,145819,120037],{"class":306},[35,145821,145822],{"class":58}," --global",[35,145824,145825],{"class":306}," user.name",[35,145827,145828],{"class":306}," \"你的名字\"\n",[35,145830,145831,145833,145835,145837,145840],{"class":37,"line":45},[35,145832,145817],{"class":48},[35,145834,120037],{"class":306},[35,145836,145822],{"class":58},[35,145838,145839],{"class":306}," user.email",[35,145841,145842],{"class":306}," \"你的邮箱\"\n",[1501,145844,145845],{},[17,145846,145847],{},"初始化仓库",[25,145849,145851],{"className":27,"code":145850,"language":29,"meta":30,"style":30},"git init\n",[32,145852,145853],{"__ignoreMap":30},[35,145854,145855,145857],{"class":37,"line":38},[35,145856,145817],{"class":48},[35,145858,145859],{"class":306}," init\n",[1501,145861,145862],{},[17,145863,145864],{},"把本地文件放到暂存区",[25,145866,145868],{"className":27,"code":145867,"language":29,"meta":30,"style":30},"git add .\n",[32,145869,145870],{"__ignoreMap":30},[35,145871,145872,145874,145876],{"class":37,"line":38},[35,145873,145817],{"class":48},[35,145875,5543],{"class":306},[35,145877,29067],{"class":306},[1501,145879,145880],{},[17,145881,145882],{},"把本地文件放到本地仓库里面",[25,145884,145886],{"className":27,"code":145885,"language":29,"meta":30,"style":30},"git commit -m \"first commit\"\n",[32,145887,145888],{"__ignoreMap":30},[35,145889,145890,145892,145895,145897],{"class":37,"line":38},[35,145891,145817],{"class":48},[35,145893,145894],{"class":306}," commit",[35,145896,101207],{"class":58},[35,145898,145899],{"class":306}," \"first commit\"\n",[1501,145901,145902],{},[17,145903,145904],{},"链接远程仓库",[25,145906,145908],{"className":27,"code":145907,"language":29,"meta":30,"style":30},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[32,145909,145910],{"__ignoreMap":30},[35,145911,145912,145914,145917,145919,145922],{"class":37,"line":38},[35,145913,145817],{"class":48},[35,145915,145916],{"class":306}," remote",[35,145918,5543],{"class":306},[35,145920,145921],{"class":306}," origin",[35,145923,145924],{"class":306}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1501,145926,145927],{},[17,145928,145929],{},"把本地仓库的文件推送到远程仓库 push",[25,145931,145933],{"className":27,"code":145932,"language":29,"meta":30,"style":30},"git push -u origin master\n",[32,145934,145935],{"__ignoreMap":30},[35,145936,145937,145939,145941,145943,145945],{"class":37,"line":38},[35,145938,145817],{"class":48},[35,145940,29342],{"class":306},[35,145942,28616],{"class":58},[35,145944,145921],{"class":306},[35,145946,145947],{"class":306}," master\n",[1823,145949],{"style":126659,"src":145950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[21,145952,145953],{},"上方方法暂未实现，后边学完git后在整",[21,145955,145956],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1823,145958],{"style":126659,"src":145959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[438,145961,145963],{"id":145962},"_222-新型相对单位","22.2 新型相对单位",[1823,145965],{"style":126659,"src":145966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1823,145968],{"style":126659,"src":145969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[21,145971,145972],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[21,145974,145975],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1823,145977],{"style":126659,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[21,145980,145981],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[416,145983,24291],{},{"title":30,"searchDepth":45,"depth":45,"links":145985},[145986,145987],{"id":145775,"depth":45,"text":145776},{"id":145962,"depth":45,"text":145963},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145767,"description":421},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145994,"title":145995,"body":145996,"description":146000,"extension":422,"meta":146001,"navigation":140,"path":146002,"seo":146003,"stem":146004,"__hash__":146005},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145997,"toc":145998},[],{"title":30,"searchDepth":45,"depth":45,"links":145999},[],"自己正经开始学编程的第一门语言！",{"category":93164},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145995,"description":146000},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146007,"title":146008,"body":146009,"description":421,"extension":422,"meta":147156,"navigation":140,"path":147157,"seo":147158,"stem":147159,"__hash__":147160},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146010,"toc":147132},[146011,146014,146018,146021,146024,146049,146052,146058,146062,146065,146092,146095,146135,146138,146150,146153,146159,146163,146167,146194,146211,146218,146222,146225,146251,146254,146258,146261,146301,146304,146321,146327,146331,146336,146380,146383,146401,146404,146472,146476,146483,146486,146501,146504,146513,146516,146527,146530,146539,146542,146559,146562,146577,146581,146585,146588,146590,146610,146614,146617,146620,146631,146634,146640,146644,146650,146677,146680,146692,146695,146706,146709,146715,146719,146725,146775,146778,146820,146823,146856,146859,146893,146897,146900,146920,146923,146959,146962,146975,146979,146983,146989,146992,147005,147009,147012,147018,147021,147025,147028,147031,147080,147084,147100,147106,147113,147119,147129],[10,146012,146008],{"id":146013},"_1-python环境与第一个程序",[438,146015,146017],{"id":146016},"_11-什么是python","1.1 什么是Python",[21,146019,146020],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[21,146022,146023],{},"理解 Python 时抓住三个关键词：",[14,146025,146026,146029,146032],{},[17,146027,146028],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[17,146030,146031],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[17,146033,146034,146035,708,146038,708,146041,708,146044,708,146046,28711],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[32,146036,146037],{},"os",[32,146039,146040],{},"sys",[32,146042,146043],{},"json",[32,146045,58186],{},[32,146047,146048],{},"datetime",[21,146050,146051],{},"Python 程序的运行链路：",[25,146053,146056],{"className":146054,"code":146055,"language":5521,"meta":30},[5519],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[32,146057,146055],{"__ignoreMap":30},[438,146059,146061],{"id":146060},"_12-python解释器","1.2 Python解释器",[21,146063,146064],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[25,146066,146068],{"className":24156,"code":146067,"language":24158,"meta":30,"style":30},"python --version\npython3 --version\npython\npython3\n",[32,146069,146070,146076,146082,146087],{"__ignoreMap":30},[35,146071,146072,146074],{"class":37,"line":38},[35,146073,30706],{"class":48},[35,146075,26623],{"class":58},[35,146077,146078,146080],{"class":37,"line":45},[35,146079,101204],{"class":48},[35,146081,26623],{"class":58},[35,146083,146084],{"class":37,"line":55},[35,146085,146086],{"class":48},"python\n",[35,146088,146089],{"class":37,"line":65},[35,146090,146091],{"class":48},"python3\n",[21,146093,146094],{},"进入交互模式后，可以直接输入表达式：",[25,146096,146098],{"className":30704,"code":146097,"language":30706,"meta":30,"style":30},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[32,146099,146100,146111,146116,146130],{"__ignoreMap":30},[35,146101,146102,146105,146107,146109],{"class":37,"line":38},[35,146103,146104],{"class":495},">>>",[35,146106,25450],{"class":58},[35,146108,45892],{"class":495},[35,146110,48049],{"class":58},[35,146112,146113],{"class":37,"line":45},[35,146114,146115],{"class":58},"3\n",[35,146117,146118,146120,146123,146125,146128],{"class":37,"line":55},[35,146119,146104],{"class":495},[35,146121,146122],{"class":58}," print",[35,146124,499],{"class":359},[35,146126,146127],{"class":306},"\"hello python\"",[35,146129,505],{"class":359},[35,146131,146132],{"class":37,"line":65},[35,146133,146134],{"class":359},"hello python\n",[21,146136,146137],{},"退出交互模式：",[25,146139,146141],{"className":30704,"code":146140,"language":30706,"meta":30,"style":30},"exit()\n",[32,146142,146143],{"__ignoreMap":30},[35,146144,146145,146148],{"class":37,"line":38},[35,146146,146147],{"class":58},"exit",[35,146149,2317],{"class":359},[21,146151,146152],{},"或使用快捷键：",[25,146154,146157],{"className":146155,"code":146156,"language":5521,"meta":30},[5519],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[32,146158,146156],{"__ignoreMap":30},[438,146160,146162],{"id":146161},"_13-安装python","1.3 安装Python",[465,146164,146166],{"id":146165},"_131-windows安装","1.3.1 Windows安装",[14,146168,146169,146176,146179,146185,146191],{},[17,146170,146171,146172],{},"打开 Python 官网：",[734,146173,146174],{"href":146174,"rel":146175},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24198],[17,146177,146178],{},"下载 Windows Installer。",[17,146180,146181,146182,28711],{},"安装时勾选 ",[32,146183,146184],{},"Add Python to PATH",[17,146186,146187,146188,28711],{},"点击 ",[32,146189,146190],{},"Install Now",[17,146192,146193],{},"安装完成后打开命令提示符验证：",[25,146195,146197],{"className":24156,"code":146196,"language":24158,"meta":30,"style":30},"python --version\npip --version\n",[32,146198,146199,146205],{"__ignoreMap":30},[35,146200,146201,146203],{"class":37,"line":38},[35,146202,30706],{"class":48},[35,146204,26623],{"class":58},[35,146206,146207,146209],{"class":37,"line":45},[35,146208,24165],{"class":48},[35,146210,26623],{"class":58},[21,146212,146213,146214,146217],{},"如果提示 ",[32,146215,146216],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[465,146219,146221],{"id":146220},"_132-macos安装","1.3.2 macOS安装",[21,146223,146224],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[25,146226,146228],{"className":24156,"code":146227,"language":24158,"meta":30,"style":30},"brew install python\npython3 --version\npip3 --version\n",[32,146229,146230,146239,146245],{"__ignoreMap":30},[35,146231,146232,146235,146237],{"class":37,"line":38},[35,146233,146234],{"class":48},"brew",[35,146236,318],{"class":306},[35,146238,124569],{"class":306},[35,146240,146241,146243],{"class":37,"line":45},[35,146242,101204],{"class":48},[35,146244,26623],{"class":58},[35,146246,146247,146249],{"class":37,"line":55},[35,146248,120018],{"class":48},[35,146250,26623],{"class":58},[21,146252,146253],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[465,146255,146257],{"id":146256},"_133-linux安装","1.3.3 Linux安装",[21,146259,146260],{},"Ubuntu\u002FDebian：",[25,146262,146264],{"className":24156,"code":146263,"language":24158,"meta":30,"style":30},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[32,146265,146266,146274,146289,146295],{"__ignoreMap":30},[35,146267,146268,146270,146272],{"class":37,"line":38},[35,146269,171],{"class":48},[35,146271,117637],{"class":306},[35,146273,26572],{"class":306},[35,146275,146276,146278,146280,146282,146284,146286],{"class":37,"line":45},[35,146277,171],{"class":48},[35,146279,117637],{"class":306},[35,146281,318],{"class":306},[35,146283,104725],{"class":306},[35,146285,101123],{"class":306},[35,146287,146288],{"class":306}," python3-venv\n",[35,146290,146291,146293],{"class":37,"line":55},[35,146292,101204],{"class":48},[35,146294,26623],{"class":58},[35,146296,146297,146299],{"class":37,"line":65},[35,146298,120018],{"class":48},[35,146300,26623],{"class":58},[21,146302,146303],{},"Fedora：",[25,146305,146307],{"className":24156,"code":146306,"language":24158,"meta":30,"style":30},"sudo dnf install python3 python3-pip\n",[32,146308,146309],{"__ignoreMap":30},[35,146310,146311,146313,146315,146317,146319],{"class":37,"line":38},[35,146312,171],{"class":48},[35,146314,26645],{"class":306},[35,146316,318],{"class":306},[35,146318,104725],{"class":306},[35,146320,120083],{"class":306},[21,146322,146323,146324,146326],{},"Linux 上通常使用 ",[32,146325,101204],{}," 命令，避免和系统旧版本 Python 冲突。",[438,146328,146330],{"id":146329},"_14-pip包管理器","1.4 pip包管理器",[21,146332,146333,146335],{},[32,146334,24165],{}," 用来安装第三方库。",[25,146337,146339],{"className":24156,"code":146338,"language":24158,"meta":30,"style":30},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[32,146340,146341,146350,146359,146367,146373],{"__ignoreMap":30},[35,146342,146343,146345,146347],{"class":37,"line":38},[35,146344,24165],{"class":48},[35,146346,318],{"class":306},[35,146348,146349],{"class":306}," requests\n",[35,146351,146352,146354,146357],{"class":37,"line":45},[35,146353,24165],{"class":48},[35,146355,146356],{"class":306}," uninstall",[35,146358,146349],{"class":306},[35,146360,146361,146363,146365],{"class":37,"line":55},[35,146362,24165],{"class":48},[35,146364,117892],{"class":306},[35,146366,146349],{"class":306},[35,146368,146369,146371],{"class":37,"line":65},[35,146370,24165],{"class":48},[35,146372,119273],{"class":306},[35,146374,146375,146377],{"class":37,"line":74},[35,146376,24165],{"class":48},[35,146378,146379],{"class":306}," freeze\n",[21,146381,146382],{},"国内网络较慢时可以临时使用镜像：",[25,146384,146386],{"className":24156,"code":146385,"language":24158,"meta":30,"style":30},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,146387,146388],{"__ignoreMap":30},[35,146389,146390,146392,146394,146397,146399],{"class":37,"line":38},[35,146391,24165],{"class":48},[35,146393,318],{"class":306},[35,146395,146396],{"class":306}," requests",[35,146398,26760],{"class":58},[35,146400,120046],{"class":306},[21,146402,146403],{},"常见第三方库：",[633,146405,146406,146415],{},[636,146407,146408],{},[639,146409,146410,146413],{},[642,146411,146412],{},"库",[642,146414,103018],{},[680,146416,146417,146425,146432,146440,146448,146456,146464],{},[639,146418,146419,146422],{},[685,146420,146421],{},"requests",[685,146423,146424],{},"网络请求",[639,146426,146427,146429],{},[685,146428,100951],{},[685,146430,146431],{},"数值计算",[639,146433,146434,146437],{},[685,146435,146436],{},"pandas",[685,146438,146439],{},"表格数据处理",[639,146441,146442,146445],{},[685,146443,146444],{},"matplotlib",[685,146446,146447],{},"绘图",[639,146449,146450,146453],{},[685,146451,146452],{},"pyecharts",[685,146454,146455],{},"ECharts 图表",[639,146457,146458,146461],{},[685,146459,146460],{},"flask",[685,146462,146463],{},"Web 后端",[639,146465,146466,146469],{},[685,146467,146468],{},"pytest",[685,146470,146471],{},"自动化测试",[438,146473,146475],{"id":146474},"_15-虚拟环境","1.5 虚拟环境",[21,146477,146478,146479,146482],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[32,146480,146481],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[21,146484,146485],{},"创建虚拟环境：",[25,146487,146489],{"className":24156,"code":146488,"language":24158,"meta":30,"style":30},"python -m venv .venv\n",[32,146490,146491],{"__ignoreMap":30},[35,146492,146493,146495,146497,146499],{"class":37,"line":38},[35,146494,30706],{"class":48},[35,146496,101207],{"class":58},[35,146498,101210],{"class":306},[35,146500,101213],{"class":306},[21,146502,146503],{},"Windows 激活：",[25,146505,146507],{"className":24156,"code":146506,"language":24158,"meta":30,"style":30},".venv\\Scripts\\activate\n",[32,146508,146509],{"__ignoreMap":30},[35,146510,146511],{"class":37,"line":38},[35,146512,146506],{"class":48},[21,146514,146515],{},"macOS\u002FLinux 激活：",[25,146517,146519],{"className":24156,"code":146518,"language":24158,"meta":30,"style":30},"source .venv\u002Fbin\u002Factivate\n",[32,146520,146521],{"__ignoreMap":30},[35,146522,146523,146525],{"class":37,"line":38},[35,146524,101218],{"class":58},[35,146526,101221],{"class":306},[21,146528,146529],{},"退出虚拟环境：",[25,146531,146533],{"className":24156,"code":146532,"language":24158,"meta":30,"style":30},"deactivate\n",[32,146534,146535],{"__ignoreMap":30},[35,146536,146537],{"class":37,"line":38},[35,146538,146532],{"class":48},[21,146540,146541],{},"保存依赖：",[25,146543,146545],{"className":24156,"code":146544,"language":24158,"meta":30,"style":30},"pip freeze > requirements.txt\n",[32,146546,146547],{"__ignoreMap":30},[35,146548,146549,146551,146554,146556],{"class":37,"line":38},[35,146550,24165],{"class":48},[35,146552,146553],{"class":306}," freeze",[35,146555,26552],{"class":495},[35,146557,146558],{"class":306}," requirements.txt\n",[21,146560,146561],{},"安装依赖：",[25,146563,146565],{"className":24156,"code":146564,"language":24158,"meta":30,"style":30},"pip install -r requirements.txt\n",[32,146566,146567],{"__ignoreMap":30},[35,146568,146569,146571,146573,146575],{"class":37,"line":38},[35,146570,24165],{"class":48},[35,146572,318],{"class":306},[35,146574,119957],{"class":58},[35,146576,146558],{"class":306},[438,146578,146580],{"id":146579},"_16-开发工具","1.6 开发工具",[465,146582,146584],{"id":146583},"_161-pycharm","1.6.1 PyCharm",[21,146586,146587],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[21,146589,122313],{},[14,146591,146592,146595,146598,146604,146607],{},[17,146593,146594],{},"New Project：创建项目。",[17,146596,146597],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[17,146599,146600,146601,126234],{},"New Python File：创建 ",[32,146602,146603],{},".py",[17,146605,146606],{},"Run：运行当前文件。",[17,146608,146609],{},"Debug：断点调试。",[465,146611,146613],{"id":146612},"_162-vs-code","1.6.2 VS Code",[21,146615,146616],{},"VS Code 轻量，适合后续多语言开发。",[21,146618,146619],{},"建议安装插件：",[14,146621,146622,146625,146628],{},[17,146623,146624],{},"Python。",[17,146626,146627],{},"Pylance。",[17,146629,146630],{},"Jupyter。",[21,146632,146633],{},"选择解释器：",[25,146635,146638],{"className":146636,"code":146637,"language":5521,"meta":30},[5519],"Ctrl + Shift + P -> Python: Select Interpreter\n",[32,146639,146637],{"__ignoreMap":30},[438,146641,146643],{"id":146642},"_17-第一个python程序","1.7 第一个Python程序",[21,146645,146646,146647,24950],{},"创建文件 ",[32,146648,146649],{},"hello.py",[25,146651,146653],{"className":30704,"code":146652,"language":30706,"meta":30,"style":30},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[32,146654,146655,146666],{"__ignoreMap":30},[35,146656,146657,146659,146661,146664],{"class":37,"line":38},[35,146658,30741],{"class":58},[35,146660,499],{"class":359},[35,146662,146663],{"class":306},"\"Hello World\"",[35,146665,505],{"class":359},[35,146667,146668,146670,146672,146675],{"class":37,"line":45},[35,146669,30741],{"class":58},[35,146671,499],{"class":359},[35,146673,146674],{"class":306},"\"你好，Python\"",[35,146676,505],{"class":359},[21,146678,146679],{},"在终端运行：",[25,146681,146683],{"className":24156,"code":146682,"language":24158,"meta":30,"style":30},"python hello.py\n",[32,146684,146685],{"__ignoreMap":30},[35,146686,146687,146689],{"class":37,"line":38},[35,146688,30706],{"class":48},[35,146690,146691],{"class":306}," hello.py\n",[21,146693,146694],{},"或：",[25,146696,146698],{"className":24156,"code":146697,"language":24158,"meta":30,"style":30},"python3 hello.py\n",[32,146699,146700],{"__ignoreMap":30},[35,146701,146702,146704],{"class":37,"line":38},[35,146703,101204],{"class":48},[35,146705,146691],{"class":306},[21,146707,146708],{},"输出：",[25,146710,146713],{"className":146711,"code":146712,"language":5521,"meta":30},[5519],"Hello World\n你好，Python\n",[32,146714,146712],{"__ignoreMap":30},[438,146716,146718],{"id":146717},"_18-print函数","1.8 print函数",[21,146720,146721,146724],{},[32,146722,146723],{},"print()"," 用来输出内容。",[25,146726,146728],{"className":30704,"code":146727,"language":30706,"meta":30,"style":30},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[32,146729,146730,146740,146750,146760],{"__ignoreMap":30},[35,146731,146732,146734,146736,146738],{"class":37,"line":38},[35,146733,30741],{"class":58},[35,146735,499],{"class":359},[35,146737,6178],{"class":306},[35,146739,505],{"class":359},[35,146741,146742,146744,146746,146748],{"class":37,"line":45},[35,146743,30741],{"class":58},[35,146745,499],{"class":359},[35,146747,807],{"class":58},[35,146749,505],{"class":359},[35,146751,146752,146754,146756,146758],{"class":37,"line":55},[35,146753,30741],{"class":58},[35,146755,499],{"class":359},[35,146757,547],{"class":58},[35,146759,505],{"class":359},[35,146761,146762,146764,146766,146769,146771,146773],{"class":37,"line":65},[35,146763,30741],{"class":58},[35,146765,499],{"class":359},[35,146767,146768],{"class":306},"\"年龄:\"",[35,146770,12769],{"class":359},[35,146772,1144],{"class":58},[35,146774,505],{"class":359},[21,146776,146777],{},"多个内容用逗号隔开，默认中间加空格：",[25,146779,146781],{"className":30704,"code":146780,"language":30706,"meta":30,"style":30},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[32,146782,146783,146793,146803],{"__ignoreMap":30},[35,146784,146785,146788,146790],{"class":37,"line":38},[35,146786,146787],{"class":359},"name ",[35,146789,544],{"class":495},[35,146791,146792],{"class":306}," \"张三\"\n",[35,146794,146795,146798,146800],{"class":37,"line":45},[35,146796,146797],{"class":359},"age ",[35,146799,544],{"class":495},[35,146801,146802],{"class":58}," 18\n",[35,146804,146805,146807,146809,146812,146815,146817],{"class":37,"line":55},[35,146806,30741],{"class":58},[35,146808,499],{"class":359},[35,146810,146811],{"class":306},"\"姓名:\"",[35,146813,146814],{"class":359},", name, ",[35,146816,146768],{"class":306},[35,146818,146819],{"class":359},", age)\n",[21,146821,146822],{},"修改分隔符：",[25,146824,146826],{"className":30704,"code":146825,"language":30706,"meta":30,"style":30},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[32,146827,146828],{"__ignoreMap":30},[35,146829,146830,146832,146834,146837,146839,146841,146843,146845,146847,146850,146852,146854],{"class":37,"line":38},[35,146831,30741],{"class":58},[35,146833,499],{"class":359},[35,146835,146836],{"class":306},"\"2024\"",[35,146838,12769],{"class":359},[35,146840,54642],{"class":306},[35,146842,12769],{"class":359},[35,146844,54642],{"class":306},[35,146846,12769],{"class":359},[35,146848,146849],{"class":5550},"sep",[35,146851,544],{"class":495},[35,146853,32809],{"class":306},[35,146855,505],{"class":359},[21,146857,146858],{},"修改结尾符：",[25,146860,146862],{"className":30704,"code":146861,"language":30706,"meta":30,"style":30},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[32,146863,146864,146882],{"__ignoreMap":30},[35,146865,146866,146868,146870,146872,146874,146876,146878,146880],{"class":37,"line":38},[35,146867,30741],{"class":58},[35,146869,499],{"class":359},[35,146871,6178],{"class":306},[35,146873,12769],{"class":359},[35,146875,46127],{"class":5550},[35,146877,544],{"class":495},[35,146879,4693],{"class":306},[35,146881,505],{"class":359},[35,146883,146884,146886,146888,146891],{"class":37,"line":45},[35,146885,30741],{"class":58},[35,146887,499],{"class":359},[35,146889,146890],{"class":306},"\"python\"",[35,146892,505],{"class":359},[438,146894,146896],{"id":146895},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[21,146898,146899],{},"交互运行适合临时验证：",[25,146901,146903],{"className":30704,"code":146902,"language":30706,"meta":30,"style":30},">>> 10 * 3\n30\n",[32,146904,146905,146915],{"__ignoreMap":30},[35,146906,146907,146909,146911,146913],{"class":37,"line":38},[35,146908,146104],{"class":495},[35,146910,2379],{"class":58},[35,146912,6852],{"class":495},[35,146914,120354],{"class":58},[35,146916,146917],{"class":37,"line":45},[35,146918,146919],{"class":58},"30\n",[21,146921,146922],{},"脚本运行适合保存程序：",[25,146924,146926],{"className":30704,"code":146925,"language":30706,"meta":30,"style":30},"price = 8\ncount = 5\nprint(price * count)\n",[32,146927,146928,146938,146947],{"__ignoreMap":30},[35,146929,146930,146933,146935],{"class":37,"line":38},[35,146931,146932],{"class":359},"price ",[35,146934,544],{"class":495},[35,146936,146937],{"class":58}," 8\n",[35,146939,146940,146943,146945],{"class":37,"line":45},[35,146941,146942],{"class":359},"count ",[35,146944,544],{"class":495},[35,146946,54753],{"class":58},[35,146948,146949,146951,146954,146956],{"class":37,"line":55},[35,146950,30741],{"class":58},[35,146952,146953],{"class":359},"(price ",[35,146955,949],{"class":495},[35,146957,146958],{"class":359}," count)\n",[21,146960,146961],{},"实际学习中推荐：",[14,146963,146964,146967,146972],{},[17,146965,146966],{},"临时试一个语法，用交互模式。",[17,146968,146969,146970,126234],{},"写完整练习，用 ",[32,146971,146603],{},[17,146973,146974],{},"写项目，用独立目录和虚拟环境。",[438,146976,146978],{"id":146977},"_110-常见错误","1.10 常见错误",[465,146980,146982],{"id":146981},"_1101-命令找不到","1.10.1 命令找不到",[25,146984,146987],{"className":146985,"code":146986,"language":5521,"meta":30},[5519],"python: command not found\n",[32,146988,146986],{"__ignoreMap":30},[21,146990,146991],{},"原因：",[14,146993,146994,146997,147000],{},[17,146995,146996],{},"没安装 Python。",[17,146998,146999],{},"PATH 没配置。",[17,147001,147002,147003,28711],{},"Linux\u002FmacOS 应该使用 ",[32,147004,101204],{},[465,147006,147008],{"id":147007},"_1102-文件名冲突","1.10.2 文件名冲突",[21,147010,147011],{},"不要把文件命名为：",[25,147013,147016],{"className":147014,"code":147015,"language":5521,"meta":30},[5519],"random.py\njson.py\ntime.py\nrequests.py\n",[32,147017,147015],{"__ignoreMap":30},[21,147019,147020],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[465,147022,147024],{"id":147023},"_1103-中文乱码","1.10.3 中文乱码",[21,147026,147027],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[21,147029,147030],{},"如果读写文件出现乱码，要明确指定编码：",[25,147032,147034],{"className":30704,"code":147033,"language":30706,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[32,147035,147036,147070],{"__ignoreMap":30},[35,147037,147038,147040,147043,147045,147048,147050,147053,147055,147058,147060,147063,147065,147067],{"class":37,"line":38},[35,147039,108155],{"class":495},[35,147041,147042],{"class":58}," open",[35,147044,499],{"class":359},[35,147046,147047],{"class":306},"\"data.txt\"",[35,147049,12769],{"class":359},[35,147051,147052],{"class":306},"\"r\"",[35,147054,12769],{"class":359},[35,147056,147057],{"class":5550},"encoding",[35,147059,544],{"class":495},[35,147061,147062],{"class":306},"\"utf-8\"",[35,147064,14048],{"class":359},[35,147066,31709],{"class":495},[35,147068,147069],{"class":359}," f:\n",[35,147071,147072,147075,147077],{"class":37,"line":45},[35,147073,147074],{"class":359},"    content ",[35,147076,544],{"class":495},[35,147078,147079],{"class":359}," f.read()\n",[438,147081,147083],{"id":147082},"_111-本章练习","1.11 本章练习",[14,147085,147086,147089,147095],{},[17,147087,147088],{},"安装 Python，并在终端输出版本号。",[17,147090,147091,147092,147094],{},"新建 ",[32,147093,146649],{},"，输出自己的姓名、年龄、学习目标。",[17,147096,104688,147097,147099],{},[32,147098,146723],{}," 输出下面格式：",[25,147101,147104],{"className":147102,"code":147103,"language":5521,"meta":30},[5519],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[32,147105,147103],{"__ignoreMap":30},[14,147107,147108],{"start":65},[17,147109,104688,147110,147112],{},[32,147111,146849],{}," 输出日期：",[25,147114,147117],{"className":147115,"code":147116,"language":5521,"meta":30},[5519],"2024-10-10\n",[32,147118,147116],{"__ignoreMap":30},[14,147120,147121],{"start":74},[17,147122,104688,147123,147125,147126,147128],{},[32,147124,46127],{}," 让两次 ",[32,147127,146723],{}," 输出在同一行。",[416,147130,147131],{},"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":30,"searchDepth":45,"depth":45,"links":147133},[147134,147135,147136,147141,147142,147143,147147,147148,147149,147150,147155],{"id":146016,"depth":45,"text":146017},{"id":146060,"depth":45,"text":146061},{"id":146161,"depth":45,"text":146162,"children":147137},[147138,147139,147140],{"id":146165,"depth":55,"text":146166},{"id":146220,"depth":55,"text":146221},{"id":146256,"depth":55,"text":146257},{"id":146329,"depth":45,"text":146330},{"id":146474,"depth":45,"text":146475},{"id":146579,"depth":45,"text":146580,"children":147144},[147145,147146],{"id":146583,"depth":55,"text":146584},{"id":146612,"depth":55,"text":146613},{"id":146642,"depth":45,"text":146643},{"id":146717,"depth":45,"text":146718},{"id":146895,"depth":45,"text":146896},{"id":146977,"depth":45,"text":146978,"children":147151},[147152,147153,147154],{"id":146981,"depth":55,"text":146982},{"id":147007,"depth":55,"text":147008},{"id":147023,"depth":55,"text":147024},{"id":147082,"depth":45,"text":147083},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146008,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147162,"title":147163,"body":147164,"description":421,"extension":422,"meta":149568,"navigation":140,"path":149569,"seo":149570,"stem":149571,"__hash__":149572},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147165,"toc":149553},[147166,147169,147173,147176,147179,147196,147199,147241,147244,147248,147251,147254,147291,147294,147328,147331,147423,147427,147441,147444,147471,147474,147478,147581,147588,147591,147608,147612,147619,147808,147811,147884,147888,147891,147975,147978,148010,148014,148218,148221,148225,148231,148333,148336,148592,148596,148599,148602,148616,148618,148804,148808,149170,149176,149180,149183,149307,149310,149489,149492,149496,149529,149533,149550],[10,147167,147163],{"id":147168},"_10-json与pyecharts折线图",[438,147170,147172],{"id":147171},"_101-数据可视化","10.1 数据可视化",[21,147174,147175],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[21,147177,147178],{},"常见图表：",[14,147180,147181,147184,147187,147190,147193],{},[17,147182,147183],{},"折线图：看趋势。",[17,147185,147186],{},"柱状图：看分类对比。",[17,147188,147189],{},"饼图：看占比。",[17,147191,147192],{},"地图：看地域分布。",[17,147194,147195],{},"散点图：看两个变量之间的关系。",[21,147197,147198],{},"Python 可视化常用库：",[633,147200,147201,147209],{},[636,147202,147203],{},[639,147204,147205,147207],{},[642,147206,146412],{},[642,147208,24074],{},[680,147210,147211,147218,147226,147233],{},[639,147212,147213,147215],{},[685,147214,146444],{},[685,147216,147217],{},"基础、经典、可定制",[639,147219,147220,147223],{},[685,147221,147222],{},"seaborn",[685,147224,147225],{},"统计图表更美观",[639,147227,147228,147230],{},[685,147229,146452],{},[685,147231,147232],{},"生成交互式网页图表",[639,147234,147235,147238],{},[685,147236,147237],{},"plotly",[685,147239,147240],{},"交互图表能力强",[21,147242,147243],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[438,147245,147247],{"id":147246},"_102-json回顾","10.2 JSON回顾",[21,147249,147250],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[21,147252,147253],{},"Python 字典：",[25,147255,147257],{"className":30704,"code":147256,"language":30706,"meta":30,"style":30},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[32,147258,147259,147267,147278,147287],{"__ignoreMap":30},[35,147260,147261,147263,147265],{"class":37,"line":38},[35,147262,101980],{"class":359},[35,147264,544],{"class":495},[35,147266,15906],{"class":359},[35,147268,147269,147272,147274,147276],{"class":37,"line":45},[35,147270,147271],{"class":306},"    \"name\"",[35,147273,51763],{"class":359},[35,147275,69595],{"class":306},[35,147277,31792],{"class":359},[35,147279,147280,147283,147285],{"class":37,"line":55},[35,147281,147282],{"class":306},"    \"value\"",[35,147284,51763],{"class":359},[35,147286,97783],{"class":58},[35,147288,147289],{"class":37,"line":65},[35,147290,1926],{"class":359},[21,147292,147293],{},"JSON 字符串：",[25,147295,147298],{"className":147296,"code":147297,"language":146043,"meta":30,"style":30},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[32,147299,147300,147304,147315,147324],{"__ignoreMap":30},[35,147301,147302],{"class":37,"line":38},[35,147303,1907],{"class":359},[35,147305,147306,147309,147311,147313],{"class":37,"line":45},[35,147307,147308],{"class":58},"  \"name\"",[35,147310,51763],{"class":359},[35,147312,69595],{"class":306},[35,147314,31792],{"class":359},[35,147316,147317,147320,147322],{"class":37,"line":55},[35,147318,147319],{"class":58},"  \"value\"",[35,147321,51763],{"class":359},[35,147323,97783],{"class":58},[35,147325,147326],{"class":37,"line":65},[35,147327,1926],{"class":359},[21,147329,147330],{},"Python 与 JSON 的转换：",[25,147332,147334],{"className":30704,"code":147333,"language":30706,"meta":30,"style":30},"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",[32,147335,147336,147343,147347,147372,147376,147395,147402,147406,147416],{"__ignoreMap":30},[35,147337,147338,147340],{"class":37,"line":38},[35,147339,30718],{"class":495},[35,147341,147342],{"class":359}," json\n",[35,147344,147345],{"class":37,"line":45},[35,147346,141],{"emptyLinePlaceholder":140},[35,147348,147349,147351,147353,147355,147357,147359,147361,147363,147366,147368,147370],{"class":37,"line":55},[35,147350,101980],{"class":359},[35,147352,544],{"class":495},[35,147354,4782],{"class":359},[35,147356,63005],{"class":306},[35,147358,51763],{"class":359},[35,147360,69595],{"class":306},[35,147362,12769],{"class":359},[35,147364,147365],{"class":306},"\"value\"",[35,147367,51763],{"class":359},[35,147369,807],{"class":58},[35,147371,1926],{"class":359},[35,147373,147374],{"class":37,"line":65},[35,147375,141],{"emptyLinePlaceholder":140},[35,147377,147378,147381,147383,147386,147389,147391,147393],{"class":37,"line":74},[35,147379,147380],{"class":359},"json_text ",[35,147382,544],{"class":495},[35,147384,147385],{"class":359}," json.dumps(data, ",[35,147387,147388],{"class":5550},"ensure_ascii",[35,147390,544],{"class":495},[35,147392,34313],{"class":58},[35,147394,505],{"class":359},[35,147396,147397,147399],{"class":37,"line":83},[35,147398,30741],{"class":58},[35,147400,147401],{"class":359},"(json_text)\n",[35,147403,147404],{"class":37,"line":92},[35,147405,141],{"emptyLinePlaceholder":140},[35,147407,147408,147411,147413],{"class":37,"line":101},[35,147409,147410],{"class":359},"new_data ",[35,147412,544],{"class":495},[35,147414,147415],{"class":359}," json.loads(json_text)\n",[35,147417,147418,147420],{"class":37,"line":110},[35,147419,30741],{"class":58},[35,147421,147422],{"class":359},"(new_data)\n",[438,147424,147426],{"id":147425},"_103-安装pyecharts","10.3 安装pyecharts",[25,147428,147430],{"className":24156,"code":147429,"language":24158,"meta":30,"style":30},"pip install pyecharts\n",[32,147431,147432],{"__ignoreMap":30},[35,147433,147434,147436,147438],{"class":37,"line":38},[35,147435,24165],{"class":48},[35,147437,318],{"class":306},[35,147439,147440],{"class":306}," pyecharts\n",[21,147442,147443],{},"验证：",[25,147445,147447],{"className":30704,"code":147446,"language":30706,"meta":30,"style":30},"import pyecharts\n\nprint(pyecharts.__version__)\n",[32,147448,147449,147455,147459],{"__ignoreMap":30},[35,147450,147451,147453],{"class":37,"line":38},[35,147452,30718],{"class":495},[35,147454,147440],{"class":359},[35,147456,147457],{"class":37,"line":45},[35,147458,141],{"emptyLinePlaceholder":140},[35,147460,147461,147463,147466,147469],{"class":37,"line":55},[35,147462,30741],{"class":58},[35,147464,147465],{"class":359},"(pyecharts.",[35,147467,147468],{"class":58},"__version__",[35,147470,505],{"class":359},[21,147472,147473],{},"如果使用虚拟环境，要先激活环境再安装。",[438,147475,147477],{"id":147476},"_104-第一个折线图","10.4 第一个折线图",[25,147479,147481],{"className":30704,"code":147480,"language":30706,"meta":30,"style":30},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[32,147482,147483,147495,147499,147509,147539,147571],{"__ignoreMap":30},[35,147484,147485,147487,147490,147492],{"class":37,"line":38},[35,147486,31063],{"class":495},[35,147488,147489],{"class":359}," pyecharts.charts ",[35,147491,30718],{"class":495},[35,147493,147494],{"class":359}," Line\n",[35,147496,147497],{"class":37,"line":45},[35,147498,141],{"emptyLinePlaceholder":140},[35,147500,147501,147504,147506],{"class":37,"line":55},[35,147502,147503],{"class":359},"line ",[35,147505,544],{"class":495},[35,147507,147508],{"class":359}," Line()\n",[35,147510,147511,147514,147517,147519,147522,147524,147527,147529,147532,147534,147537],{"class":37,"line":65},[35,147512,147513],{"class":359},"line.add_xaxis([",[35,147515,147516],{"class":306},"\"周一\"",[35,147518,12769],{"class":359},[35,147520,147521],{"class":306},"\"周二\"",[35,147523,12769],{"class":359},[35,147525,147526],{"class":306},"\"周三\"",[35,147528,12769],{"class":359},[35,147530,147531],{"class":306},"\"周四\"",[35,147533,12769],{"class":359},[35,147535,147536],{"class":306},"\"周五\"",[35,147538,4991],{"class":359},[35,147540,147541,147544,147547,147549,147551,147553,147555,147557,147559,147561,147564,147566,147569],{"class":37,"line":74},[35,147542,147543],{"class":359},"line.add_yaxis(",[35,147545,147546],{"class":306},"\"销售额\"",[35,147548,77843],{"class":359},[35,147550,807],{"class":58},[35,147552,12769],{"class":359},[35,147554,1311],{"class":58},[35,147556,12769],{"class":359},[35,147558,1356],{"class":58},[35,147560,12769],{"class":359},[35,147562,147563],{"class":58},"150",[35,147565,12769],{"class":359},[35,147567,147568],{"class":58},"180",[35,147570,4991],{"class":359},[35,147572,147573,147576,147579],{"class":37,"line":83},[35,147574,147575],{"class":359},"line.render(",[35,147577,147578],{"class":306},"\"line.html\"",[35,147580,505],{"class":359},[21,147582,147583,147584,147587],{},"运行后会生成 ",[32,147585,147586],{},"line.html","，用浏览器打开即可看到图表。",[21,147589,147590],{},"核心步骤：",[14,147592,147593,147596,147599,147602,147605],{},[17,147594,147595],{},"导入图表类。",[17,147597,147598],{},"创建图表对象。",[17,147600,147601],{},"添加 x 轴数据。",[17,147603,147604],{},"添加 y 轴数据。",[17,147606,147607],{},"渲染为 HTML。",[438,147609,147611],{"id":147610},"_105-全局配置","10.5 全局配置",[21,147613,147614,147615,147618],{},"常用配置在 ",[32,147616,147617],{},"pyecharts.options"," 中。",[25,147620,147622],{"className":30704,"code":147621,"language":30706,"meta":30,"style":30},"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",[32,147623,147624,147641,147651,147655,147663,147687,147715,147720,147739,147758,147776,147796,147800],{"__ignoreMap":30},[35,147625,147626,147628,147631,147633,147636,147638],{"class":37,"line":38},[35,147627,31063],{"class":495},[35,147629,147630],{"class":359}," pyecharts ",[35,147632,30718],{"class":495},[35,147634,147635],{"class":359}," options ",[35,147637,31709],{"class":495},[35,147639,147640],{"class":359}," opts\n",[35,147642,147643,147645,147647,147649],{"class":37,"line":45},[35,147644,31063],{"class":495},[35,147646,147489],{"class":359},[35,147648,30718],{"class":495},[35,147650,147494],{"class":359},[35,147652,147653],{"class":37,"line":55},[35,147654,141],{"emptyLinePlaceholder":140},[35,147656,147657,147659,147661],{"class":37,"line":65},[35,147658,147503],{"class":359},[35,147660,544],{"class":495},[35,147662,147508],{"class":359},[35,147664,147665,147667,147669,147671,147673,147675,147677,147679,147681,147683,147685],{"class":37,"line":74},[35,147666,147513],{"class":359},[35,147668,147516],{"class":306},[35,147670,12769],{"class":359},[35,147672,147521],{"class":306},[35,147674,12769],{"class":359},[35,147676,147526],{"class":306},[35,147678,12769],{"class":359},[35,147680,147531],{"class":306},[35,147682,12769],{"class":359},[35,147684,147536],{"class":306},[35,147686,4991],{"class":359},[35,147688,147689,147691,147693,147695,147697,147699,147701,147703,147705,147707,147709,147711,147713],{"class":37,"line":83},[35,147690,147543],{"class":359},[35,147692,147546],{"class":306},[35,147694,77843],{"class":359},[35,147696,807],{"class":58},[35,147698,12769],{"class":359},[35,147700,1311],{"class":58},[35,147702,12769],{"class":359},[35,147704,1356],{"class":58},[35,147706,12769],{"class":359},[35,147708,147563],{"class":58},[35,147710,12769],{"class":359},[35,147712,147568],{"class":58},[35,147714,4991],{"class":359},[35,147716,147717],{"class":37,"line":92},[35,147718,147719],{"class":359},"line.set_global_opts(\n",[35,147721,147722,147725,147727,147730,147732,147734,147737],{"class":37,"line":101},[35,147723,147724],{"class":5550},"    title_opts",[35,147726,544],{"class":495},[35,147728,147729],{"class":359},"opts.TitleOpts(",[35,147731,51733],{"class":5550},[35,147733,544],{"class":495},[35,147735,147736],{"class":306},"\"一周销售额\"",[35,147738,38373],{"class":359},[35,147740,147741,147744,147746,147749,147751,147753,147756],{"class":37,"line":110},[35,147742,147743],{"class":5550},"    xaxis_opts",[35,147745,544],{"class":495},[35,147747,147748],{"class":359},"opts.AxisOpts(",[35,147750,80135],{"class":5550},[35,147752,544],{"class":495},[35,147754,147755],{"class":306},"\"日期\"",[35,147757,38373],{"class":359},[35,147759,147760,147763,147765,147767,147769,147771,147774],{"class":37,"line":119},[35,147761,147762],{"class":5550},"    yaxis_opts",[35,147764,544],{"class":495},[35,147766,147748],{"class":359},[35,147768,80135],{"class":5550},[35,147770,544],{"class":495},[35,147772,147773],{"class":306},"\"金额\"",[35,147775,38373],{"class":359},[35,147777,147778,147781,147783,147786,147789,147791,147794],{"class":37,"line":128},[35,147779,147780],{"class":5550},"    tooltip_opts",[35,147782,544],{"class":495},[35,147784,147785],{"class":359},"opts.TooltipOpts(",[35,147787,147788],{"class":5550},"trigger",[35,147790,544],{"class":495},[35,147792,147793],{"class":306},"\"axis\"",[35,147795,38373],{"class":359},[35,147797,147798],{"class":37,"line":137},[35,147799,505],{"class":359},[35,147801,147802,147804,147806],{"class":37,"line":144},[35,147803,147575],{"class":359},[35,147805,147578],{"class":306},[35,147807,505],{"class":359},[21,147809,147810],{},"常见全局配置：",[633,147812,147813,147822],{},[636,147814,147815],{},[639,147816,147817,147820],{},[642,147818,147819],{},"配置",[642,147821,103018],{},[680,147823,147824,147834,147844,147854,147864,147874],{},[639,147825,147826,147831],{},[685,147827,147828],{},[32,147829,147830],{},"TitleOpts",[685,147832,147833],{},"标题",[639,147835,147836,147841],{},[685,147837,147838],{},[32,147839,147840],{},"LegendOpts",[685,147842,147843],{},"图例",[639,147845,147846,147851],{},[685,147847,147848],{},[32,147849,147850],{},"TooltipOpts",[685,147852,147853],{},"提示框",[639,147855,147856,147861],{},[685,147857,147858],{},[32,147859,147860],{},"AxisOpts",[685,147862,147863],{},"坐标轴",[639,147865,147866,147871],{},[685,147867,147868],{},[32,147869,147870],{},"VisualMapOpts",[685,147872,147873],{},"视觉映射",[639,147875,147876,147881],{},[685,147877,147878],{},[32,147879,147880],{},"DataZoomOpts",[685,147882,147883],{},"区域缩放",[438,147885,147887],{"id":147886},"_106-系列配置","10.6 系列配置",[21,147889,147890],{},"系列配置作用于某一组数据。",[25,147892,147894],{"className":30704,"code":147893,"language":30706,"meta":30,"style":30},"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",[32,147895,147896,147901,147912,147941,147952,147971],{"__ignoreMap":30},[35,147897,147898],{"class":37,"line":38},[35,147899,147900],{"class":359},"line.add_yaxis(\n",[35,147902,147903,147906,147908,147910],{"class":37,"line":45},[35,147904,147905],{"class":5550},"    series_name",[35,147907,544],{"class":495},[35,147909,147546],{"class":306},[35,147911,31792],{"class":359},[35,147913,147914,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935,147937,147939],{"class":37,"line":55},[35,147915,147916],{"class":5550},"    y_axis",[35,147918,544],{"class":495},[35,147920,1384],{"class":359},[35,147922,807],{"class":58},[35,147924,12769],{"class":359},[35,147926,1311],{"class":58},[35,147928,12769],{"class":359},[35,147930,1356],{"class":58},[35,147932,12769],{"class":359},[35,147934,147563],{"class":58},[35,147936,12769],{"class":359},[35,147938,147568],{"class":58},[35,147940,88161],{"class":359},[35,147942,147943,147946,147948,147950],{"class":37,"line":65},[35,147944,147945],{"class":5550},"    is_smooth",[35,147947,544],{"class":495},[35,147949,31802],{"class":58},[35,147951,31792],{"class":359},[35,147953,147954,147957,147959,147962,147965,147967,147969],{"class":37,"line":74},[35,147955,147956],{"class":5550},"    label_opts",[35,147958,544],{"class":495},[35,147960,147961],{"class":359},"opts.LabelOpts(",[35,147963,147964],{"class":5550},"is_show",[35,147966,544],{"class":495},[35,147968,31802],{"class":58},[35,147970,38373],{"class":359},[35,147972,147973],{"class":37,"line":83},[35,147974,505],{"class":359},[21,147976,147977],{},"常用参数：",[14,147979,147980,147986,147992,147998,148004],{},[17,147981,147982,147985],{},[32,147983,147984],{},"series_name","：系列名称。",[17,147987,147988,147991],{},[32,147989,147990],{},"y_axis","：y 轴数据。",[17,147993,147994,147997],{},[32,147995,147996],{},"is_smooth","：是否平滑曲线。",[17,147999,148000,148003],{},[32,148001,148002],{},"label_opts","：标签配置。",[17,148005,148006,148009],{},[32,148007,148008],{},"symbol_size","：标记点大小。",[438,148011,148013],{"id":148012},"_107-多条折线","10.7 多条折线",[25,148015,148017],{"className":30704,"code":148016,"language":30706,"meta":30,"style":30},"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",[32,148018,148019,148033,148043,148047,148076,148080,148088,148093,148131,148168,148172,148189,148205,148209],{"__ignoreMap":30},[35,148020,148021,148023,148025,148027,148029,148031],{"class":37,"line":38},[35,148022,31063],{"class":495},[35,148024,147630],{"class":359},[35,148026,30718],{"class":495},[35,148028,147635],{"class":359},[35,148030,31709],{"class":495},[35,148032,147640],{"class":359},[35,148034,148035,148037,148039,148041],{"class":37,"line":45},[35,148036,31063],{"class":495},[35,148038,147489],{"class":359},[35,148040,30718],{"class":495},[35,148042,147494],{"class":359},[35,148044,148045],{"class":37,"line":55},[35,148046,141],{"emptyLinePlaceholder":140},[35,148048,148049,148052,148054,148056,148058,148060,148062,148064,148066,148068,148070,148072,148074],{"class":37,"line":65},[35,148050,148051],{"class":359},"dates ",[35,148053,544],{"class":495},[35,148055,52552],{"class":359},[35,148057,147516],{"class":306},[35,148059,12769],{"class":359},[35,148061,147521],{"class":306},[35,148063,12769],{"class":359},[35,148065,147526],{"class":306},[35,148067,12769],{"class":359},[35,148069,147531],{"class":306},[35,148071,12769],{"class":359},[35,148073,147536],{"class":306},[35,148075,33572],{"class":359},[35,148077,148078],{"class":37,"line":74},[35,148079,141],{"emptyLinePlaceholder":140},[35,148081,148082,148084,148086],{"class":37,"line":83},[35,148083,147503],{"class":359},[35,148085,544],{"class":495},[35,148087,147508],{"class":359},[35,148089,148090],{"class":37,"line":92},[35,148091,148092],{"class":359},"line.add_xaxis(dates)\n",[35,148094,148095,148097,148100,148102,148104,148106,148109,148111,148113,148115,148117,148119,148121,148123,148125,148127,148129],{"class":37,"line":101},[35,148096,147543],{"class":359},[35,148098,148099],{"class":306},"\"线上销售\"",[35,148101,77843],{"class":359},[35,148103,807],{"class":58},[35,148105,12769],{"class":359},[35,148107,148108],{"class":58},"130",[35,148110,12769],{"class":359},[35,148112,1311],{"class":58},[35,148114,12769],{"class":359},[35,148116,21382],{"class":58},[35,148118,12769],{"class":359},[35,148120,2072],{"class":58},[35,148122,112524],{"class":359},[35,148124,147996],{"class":5550},[35,148126,544],{"class":495},[35,148128,31802],{"class":58},[35,148130,505],{"class":359},[35,148132,148133,148135,148138,148140,148142,148144,148146,148148,148150,148152,148154,148156,148158,148160,148162,148164,148166],{"class":37,"line":110},[35,148134,147543],{"class":359},[35,148136,148137],{"class":306},"\"线下销售\"",[35,148139,77843],{"class":359},[35,148141,1106],{"class":58},[35,148143,12769],{"class":359},[35,148145,1356],{"class":58},[35,148147,12769],{"class":359},[35,148149,807],{"class":58},[35,148151,12769],{"class":359},[35,148153,1311],{"class":58},[35,148155,12769],{"class":359},[35,148157,147563],{"class":58},[35,148159,112524],{"class":359},[35,148161,147996],{"class":5550},[35,148163,544],{"class":495},[35,148165,31802],{"class":58},[35,148167,505],{"class":359},[35,148169,148170],{"class":37,"line":119},[35,148171,147719],{"class":359},[35,148173,148174,148176,148178,148180,148182,148184,148187],{"class":37,"line":128},[35,148175,147724],{"class":5550},[35,148177,544],{"class":495},[35,148179,147729],{"class":359},[35,148181,51733],{"class":5550},[35,148183,544],{"class":495},[35,148185,148186],{"class":306},"\"线上线下销售趋势\"",[35,148188,38373],{"class":359},[35,148190,148191,148193,148195,148197,148199,148201,148203],{"class":37,"line":137},[35,148192,147780],{"class":5550},[35,148194,544],{"class":495},[35,148196,147785],{"class":359},[35,148198,147788],{"class":5550},[35,148200,544],{"class":495},[35,148202,147793],{"class":306},[35,148204,38373],{"class":359},[35,148206,148207],{"class":37,"line":144},[35,148208,505],{"class":359},[35,148210,148211,148213,148216],{"class":37,"line":150},[35,148212,147575],{"class":359},[35,148214,148215],{"class":306},"\"sales.html\"",[35,148217,505],{"class":359},[21,148219,148220],{},"多条折线适合比较不同指标或不同地区。",[438,148222,148224],{"id":148223},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[21,148226,148227,148228,24950],{},"假设 ",[32,148229,148230],{},"sales.json",[25,148232,148234],{"className":147296,"code":148233,"language":146043,"meta":30,"style":30},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[32,148235,148236,148241,148273,148301,148329],{"__ignoreMap":30},[35,148237,148238],{"class":37,"line":38},[35,148239,148240],{"class":359},"[\n",[35,148242,148243,148246,148249,148251,148253,148255,148258,148260,148262,148264,148267,148269,148271],{"class":37,"line":45},[35,148244,148245],{"class":359},"  {",[35,148247,148248],{"class":58},"\"date\"",[35,148250,51763],{"class":359},[35,148252,147516],{"class":306},[35,148254,12769],{"class":359},[35,148256,148257],{"class":58},"\"online\"",[35,148259,51763],{"class":359},[35,148261,807],{"class":58},[35,148263,12769],{"class":359},[35,148265,148266],{"class":58},"\"offline\"",[35,148268,51763],{"class":359},[35,148270,1106],{"class":58},[35,148272,5264],{"class":359},[35,148274,148275,148277,148279,148281,148283,148285,148287,148289,148291,148293,148295,148297,148299],{"class":37,"line":55},[35,148276,148245],{"class":359},[35,148278,148248],{"class":58},[35,148280,51763],{"class":359},[35,148282,147521],{"class":306},[35,148284,12769],{"class":359},[35,148286,148257],{"class":58},[35,148288,51763],{"class":359},[35,148290,148108],{"class":58},[35,148292,12769],{"class":359},[35,148294,148266],{"class":58},[35,148296,51763],{"class":359},[35,148298,1356],{"class":58},[35,148300,5264],{"class":359},[35,148302,148303,148305,148307,148309,148311,148313,148315,148317,148319,148321,148323,148325,148327],{"class":37,"line":65},[35,148304,148245],{"class":359},[35,148306,148248],{"class":58},[35,148308,51763],{"class":359},[35,148310,147526],{"class":306},[35,148312,12769],{"class":359},[35,148314,148257],{"class":58},[35,148316,51763],{"class":359},[35,148318,1311],{"class":58},[35,148320,12769],{"class":359},[35,148322,148266],{"class":58},[35,148324,51763],{"class":359},[35,148326,807],{"class":58},[35,148328,1926],{"class":359},[35,148330,148331],{"class":37,"line":74},[35,148332,33572],{"class":359},[21,148334,148335],{},"读取并绘图：",[25,148337,148339],{"className":30704,"code":148338,"language":30706,"meta":30,"style":30},"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",[32,148340,148341,148347,148361,148371,148375,148407,148420,148424,148432,148441,148450,148454,148466,148475,148484,148493,148497,148505,148509,148526,148543,148547,148564,148580,148584],{"__ignoreMap":30},[35,148342,148343,148345],{"class":37,"line":38},[35,148344,30718],{"class":495},[35,148346,147342],{"class":359},[35,148348,148349,148351,148353,148355,148357,148359],{"class":37,"line":45},[35,148350,31063],{"class":495},[35,148352,147630],{"class":359},[35,148354,30718],{"class":495},[35,148356,147635],{"class":359},[35,148358,31709],{"class":495},[35,148360,147640],{"class":359},[35,148362,148363,148365,148367,148369],{"class":37,"line":55},[35,148364,31063],{"class":495},[35,148366,147489],{"class":359},[35,148368,30718],{"class":495},[35,148370,147494],{"class":359},[35,148372,148373],{"class":37,"line":65},[35,148374,141],{"emptyLinePlaceholder":140},[35,148376,148377,148379,148381,148383,148386,148388,148390,148392,148394,148396,148398,148400,148402,148405],{"class":37,"line":74},[35,148378,108155],{"class":495},[35,148380,147042],{"class":58},[35,148382,499],{"class":359},[35,148384,148385],{"class":306},"\"sales.json\"",[35,148387,12769],{"class":359},[35,148389,147052],{"class":306},[35,148391,12769],{"class":359},[35,148393,147057],{"class":5550},[35,148395,544],{"class":495},[35,148397,147062],{"class":306},[35,148399,14048],{"class":359},[35,148401,31709],{"class":495},[35,148403,148404],{"class":5550}," file",[35,148406,4073],{"class":359},[35,148408,148409,148411,148413,148416,148418],{"class":37,"line":83},[35,148410,101743],{"class":359},[35,148412,544],{"class":495},[35,148414,148415],{"class":359}," json.load(",[35,148417,45680],{"class":5550},[35,148419,505],{"class":359},[35,148421,148422],{"class":37,"line":92},[35,148423,141],{"emptyLinePlaceholder":140},[35,148425,148426,148428,148430],{"class":37,"line":101},[35,148427,148051],{"class":359},[35,148429,544],{"class":495},[35,148431,52164],{"class":359},[35,148433,148434,148437,148439],{"class":37,"line":110},[35,148435,148436],{"class":359},"online_sales ",[35,148438,544],{"class":495},[35,148440,52164],{"class":359},[35,148442,148443,148446,148448],{"class":37,"line":119},[35,148444,148445],{"class":359},"offline_sales ",[35,148447,544],{"class":495},[35,148449,52164],{"class":359},[35,148451,148452],{"class":37,"line":128},[35,148453,141],{"emptyLinePlaceholder":140},[35,148455,148456,148458,148461,148463],{"class":37,"line":137},[35,148457,3359],{"class":495},[35,148459,148460],{"class":359}," item ",[35,148462,26374],{"class":495},[35,148464,148465],{"class":359}," data:\n",[35,148467,148468,148471,148473],{"class":37,"line":144},[35,148469,148470],{"class":359},"    dates.append(item[",[35,148472,148248],{"class":306},[35,148474,4991],{"class":359},[35,148476,148477,148480,148482],{"class":37,"line":150},[35,148478,148479],{"class":359},"    online_sales.append(item[",[35,148481,148257],{"class":306},[35,148483,4991],{"class":359},[35,148485,148486,148489,148491],{"class":37,"line":159},[35,148487,148488],{"class":359},"    offline_sales.append(item[",[35,148490,148266],{"class":306},[35,148492,4991],{"class":359},[35,148494,148495],{"class":37,"line":168},[35,148496,141],{"emptyLinePlaceholder":140},[35,148498,148499,148501,148503],{"class":37,"line":177},[35,148500,147503],{"class":359},[35,148502,544],{"class":495},[35,148504,147508],{"class":359},[35,148506,148507],{"class":37,"line":182},[35,148508,148092],{"class":359},[35,148510,148511,148513,148515,148518,148520,148522,148524],{"class":37,"line":188},[35,148512,147543],{"class":359},[35,148514,148099],{"class":306},[35,148516,148517],{"class":359},", online_sales, ",[35,148519,147996],{"class":5550},[35,148521,544],{"class":495},[35,148523,31802],{"class":58},[35,148525,505],{"class":359},[35,148527,148528,148530,148532,148535,148537,148539,148541],{"class":37,"line":197},[35,148529,147543],{"class":359},[35,148531,148137],{"class":306},[35,148533,148534],{"class":359},", offline_sales, ",[35,148536,147996],{"class":5550},[35,148538,544],{"class":495},[35,148540,31802],{"class":58},[35,148542,505],{"class":359},[35,148544,148545],{"class":37,"line":206},[35,148546,147719],{"class":359},[35,148548,148549,148551,148553,148555,148557,148559,148562],{"class":37,"line":215},[35,148550,147724],{"class":5550},[35,148552,544],{"class":495},[35,148554,147729],{"class":359},[35,148556,51733],{"class":5550},[35,148558,544],{"class":495},[35,148560,148561],{"class":306},"\"销售趋势\"",[35,148563,38373],{"class":359},[35,148565,148566,148568,148570,148572,148574,148576,148578],{"class":37,"line":224},[35,148567,147780],{"class":5550},[35,148569,544],{"class":495},[35,148571,147785],{"class":359},[35,148573,147788],{"class":5550},[35,148575,544],{"class":495},[35,148577,147793],{"class":306},[35,148579,38373],{"class":359},[35,148581,148582],{"class":37,"line":233},[35,148583,505],{"class":359},[35,148585,148586,148588,148590],{"class":37,"line":238},[35,148587,147575],{"class":359},[35,148589,148215],{"class":306},[35,148591,505],{"class":359},[438,148593,148595],{"id":148594},"_109-数据清洗","10.9 数据清洗",[21,148597,148598],{},"真实数据经常不整齐，需要清洗。",[21,148600,148601],{},"常见问题：",[14,148603,148604,148607,148610,148613],{},[17,148605,148606],{},"数字是字符串。",[17,148608,148609],{},"字段缺失。",[17,148611,148612],{},"空值。",[17,148614,148615],{},"日期格式不统一。",[21,148617,15469],{},[25,148619,148621],{"className":30704,"code":148620,"language":30706,"meta":30,"style":30},"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",[32,148622,148623,148632,148655,148675,148696,148700,148704,148712,148721,148725,148736,148750,148759,148764,148768,148776,148786,148790,148797],{"__ignoreMap":30},[35,148624,148625,148628,148630],{"class":37,"line":38},[35,148626,148627],{"class":359},"raw_data ",[35,148629,544],{"class":495},[35,148631,55773],{"class":359},[35,148633,148634,148637,148639,148641,148643,148645,148648,148650,148653],{"class":37,"line":45},[35,148635,148636],{"class":359},"    {",[35,148638,148248],{"class":306},[35,148640,51763],{"class":359},[35,148642,147516],{"class":306},[35,148644,12769],{"class":359},[35,148646,148647],{"class":306},"\"sales\"",[35,148649,51763],{"class":359},[35,148651,148652],{"class":306},"\"100\"",[35,148654,5264],{"class":359},[35,148656,148657,148659,148661,148663,148665,148667,148669,148671,148673],{"class":37,"line":55},[35,148658,148636],{"class":359},[35,148660,148248],{"class":306},[35,148662,51763],{"class":359},[35,148664,147521],{"class":306},[35,148666,12769],{"class":359},[35,148668,148647],{"class":306},[35,148670,51763],{"class":359},[35,148672,7986],{"class":306},[35,148674,5264],{"class":359},[35,148676,148677,148679,148681,148683,148685,148687,148689,148691,148694],{"class":37,"line":65},[35,148678,148636],{"class":359},[35,148680,148248],{"class":306},[35,148682,51763],{"class":359},[35,148684,147526],{"class":306},[35,148686,12769],{"class":359},[35,148688,148647],{"class":306},[35,148690,51763],{"class":359},[35,148692,148693],{"class":306},"\"120\"",[35,148695,5264],{"class":359},[35,148697,148698],{"class":37,"line":74},[35,148699,33572],{"class":359},[35,148701,148702],{"class":37,"line":83},[35,148703,141],{"emptyLinePlaceholder":140},[35,148705,148706,148708,148710],{"class":37,"line":92},[35,148707,148051],{"class":359},[35,148709,544],{"class":495},[35,148711,52164],{"class":359},[35,148713,148714,148717,148719],{"class":37,"line":101},[35,148715,148716],{"class":359},"sales ",[35,148718,544],{"class":495},[35,148720,52164],{"class":359},[35,148722,148723],{"class":37,"line":110},[35,148724,141],{"emptyLinePlaceholder":140},[35,148726,148727,148729,148731,148733],{"class":37,"line":119},[35,148728,3359],{"class":495},[35,148730,148460],{"class":359},[35,148732,26374],{"class":495},[35,148734,148735],{"class":359}," raw_data:\n",[35,148737,148738,148741,148743,148746,148748],{"class":37,"line":128},[35,148739,148740],{"class":359},"    value ",[35,148742,544],{"class":495},[35,148744,148745],{"class":359}," item.get(",[35,148747,148647],{"class":306},[35,148749,505],{"class":359},[35,148751,148752,148754,148756],{"class":37,"line":137},[35,148753,3435],{"class":495},[35,148755,39256],{"class":495},[35,148757,148758],{"class":359}," value:\n",[35,148760,148761],{"class":37,"line":144},[35,148762,148763],{"class":495},"        continue\n",[35,148765,148766],{"class":37,"line":150},[35,148767,141],{"emptyLinePlaceholder":140},[35,148769,148770,148772,148774],{"class":37,"line":159},[35,148771,148470],{"class":359},[35,148773,148248],{"class":306},[35,148775,4991],{"class":359},[35,148777,148778,148781,148783],{"class":37,"line":168},[35,148779,148780],{"class":359},"    sales.append(",[35,148782,502],{"class":58},[35,148784,148785],{"class":359},"(value))\n",[35,148787,148788],{"class":37,"line":177},[35,148789,141],{"emptyLinePlaceholder":140},[35,148791,148792,148794],{"class":37,"line":182},[35,148793,30741],{"class":58},[35,148795,148796],{"class":359},"(dates)\n",[35,148798,148799,148801],{"class":37,"line":188},[35,148800,30741],{"class":58},[35,148802,148803],{"class":359},"(sales)\n",[438,148805,148807],{"id":148806},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[25,148809,148811],{"className":30704,"code":148810,"language":30706,"meta":30,"style":30},"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",[32,148812,148813,148827,148837,148841,148849,148870,148892,148914,148936,148958,148962,148966,148988,149009,149013,149021,149025,149029,149039,149048,149058,149074,149078,149082,149099,149115,149131,149147,149157,149161],{"__ignoreMap":30},[35,148814,148815,148817,148819,148821,148823,148825],{"class":37,"line":38},[35,148816,31063],{"class":495},[35,148818,147630],{"class":359},[35,148820,30718],{"class":495},[35,148822,147635],{"class":359},[35,148824,31709],{"class":495},[35,148826,147640],{"class":359},[35,148828,148829,148831,148833,148835],{"class":37,"line":45},[35,148830,31063],{"class":495},[35,148832,147489],{"class":359},[35,148834,30718],{"class":495},[35,148836,147494],{"class":359},[35,148838,148839],{"class":37,"line":55},[35,148840,141],{"emptyLinePlaceholder":140},[35,148842,148843,148845,148847],{"class":37,"line":65},[35,148844,148716],{"class":359},[35,148846,544],{"class":495},[35,148848,55773],{"class":359},[35,148850,148851,148853,148855,148857,148860,148862,148864,148866,148868],{"class":37,"line":74},[35,148852,148636],{"class":359},[35,148854,148248],{"class":306},[35,148856,51763],{"class":359},[35,148858,148859],{"class":306},"\"2024-10-01\"",[35,148861,12769],{"class":359},[35,148863,84409],{"class":306},[35,148865,51763],{"class":359},[35,148867,92348],{"class":58},[35,148869,5264],{"class":359},[35,148871,148872,148874,148876,148878,148881,148883,148885,148887,148890],{"class":37,"line":83},[35,148873,148636],{"class":359},[35,148875,148248],{"class":306},[35,148877,51763],{"class":359},[35,148879,148880],{"class":306},"\"2024-10-02\"",[35,148882,12769],{"class":359},[35,148884,84409],{"class":306},[35,148886,51763],{"class":359},[35,148888,148889],{"class":58},"1800",[35,148891,5264],{"class":359},[35,148893,148894,148896,148898,148900,148903,148905,148907,148909,148912],{"class":37,"line":92},[35,148895,148636],{"class":359},[35,148897,148248],{"class":306},[35,148899,51763],{"class":359},[35,148901,148902],{"class":306},"\"2024-10-03\"",[35,148904,12769],{"class":359},[35,148906,84409],{"class":306},[35,148908,51763],{"class":359},[35,148910,148911],{"class":58},"1500",[35,148913,5264],{"class":359},[35,148915,148916,148918,148920,148922,148925,148927,148929,148931,148934],{"class":37,"line":101},[35,148917,148636],{"class":359},[35,148919,148248],{"class":306},[35,148921,51763],{"class":359},[35,148923,148924],{"class":306},"\"2024-10-04\"",[35,148926,12769],{"class":359},[35,148928,84409],{"class":306},[35,148930,51763],{"class":359},[35,148932,148933],{"class":58},"2100",[35,148935,5264],{"class":359},[35,148937,148938,148940,148942,148944,148947,148949,148951,148953,148956],{"class":37,"line":110},[35,148939,148636],{"class":359},[35,148941,148248],{"class":306},[35,148943,51763],{"class":359},[35,148945,148946],{"class":306},"\"2024-10-05\"",[35,148948,12769],{"class":359},[35,148950,84409],{"class":306},[35,148952,51763],{"class":359},[35,148954,148955],{"class":58},"2600",[35,148957,5264],{"class":359},[35,148959,148960],{"class":37,"line":119},[35,148961,33572],{"class":359},[35,148963,148964],{"class":37,"line":128},[35,148965,141],{"emptyLinePlaceholder":140},[35,148967,148968,148970,148972,148975,148977,148979,148981,148983,148985],{"class":37,"line":137},[35,148969,148051],{"class":359},[35,148971,544],{"class":495},[35,148973,148974],{"class":359}," [item[",[35,148976,148248],{"class":306},[35,148978,4777],{"class":359},[35,148980,3359],{"class":495},[35,148982,148460],{"class":359},[35,148984,26374],{"class":495},[35,148986,148987],{"class":359}," sales]\n",[35,148989,148990,148993,148995,148997,148999,149001,149003,149005,149007],{"class":37,"line":144},[35,148991,148992],{"class":359},"amounts ",[35,148994,544],{"class":495},[35,148996,148974],{"class":359},[35,148998,84409],{"class":306},[35,149000,4777],{"class":359},[35,149002,3359],{"class":495},[35,149004,148460],{"class":359},[35,149006,26374],{"class":495},[35,149008,148987],{"class":359},[35,149010,149011],{"class":37,"line":150},[35,149012,141],{"emptyLinePlaceholder":140},[35,149014,149015,149017,149019],{"class":37,"line":159},[35,149016,147503],{"class":359},[35,149018,544],{"class":495},[35,149020,147508],{"class":359},[35,149022,149023],{"class":37,"line":168},[35,149024,148092],{"class":359},[35,149026,149027],{"class":37,"line":177},[35,149028,147900],{"class":359},[35,149030,149031,149033,149035,149037],{"class":37,"line":182},[35,149032,147905],{"class":5550},[35,149034,544],{"class":495},[35,149036,147546],{"class":306},[35,149038,31792],{"class":359},[35,149040,149041,149043,149045],{"class":37,"line":188},[35,149042,147916],{"class":5550},[35,149044,544],{"class":495},[35,149046,149047],{"class":359},"amounts,\n",[35,149049,149050,149052,149054,149056],{"class":37,"line":197},[35,149051,147945],{"class":5550},[35,149053,544],{"class":495},[35,149055,31802],{"class":58},[35,149057,31792],{"class":359},[35,149059,149060,149062,149064,149066,149068,149070,149072],{"class":37,"line":206},[35,149061,147956],{"class":5550},[35,149063,544],{"class":495},[35,149065,147961],{"class":359},[35,149067,147964],{"class":5550},[35,149069,544],{"class":495},[35,149071,31802],{"class":58},[35,149073,38373],{"class":359},[35,149075,149076],{"class":37,"line":215},[35,149077,505],{"class":359},[35,149079,149080],{"class":37,"line":224},[35,149081,147719],{"class":359},[35,149083,149084,149086,149088,149090,149092,149094,149097],{"class":37,"line":233},[35,149085,147724],{"class":5550},[35,149087,544],{"class":495},[35,149089,147729],{"class":359},[35,149091,51733],{"class":5550},[35,149093,544],{"class":495},[35,149095,149096],{"class":306},"\"每日销售额\"",[35,149098,38373],{"class":359},[35,149100,149101,149103,149105,149107,149109,149111,149113],{"class":37,"line":238},[35,149102,147743],{"class":5550},[35,149104,544],{"class":495},[35,149106,147748],{"class":359},[35,149108,80135],{"class":5550},[35,149110,544],{"class":495},[35,149112,147755],{"class":306},[35,149114,38373],{"class":359},[35,149116,149117,149119,149121,149123,149125,149127,149129],{"class":37,"line":244},[35,149118,147762],{"class":5550},[35,149120,544],{"class":495},[35,149122,147748],{"class":359},[35,149124,80135],{"class":5550},[35,149126,544],{"class":495},[35,149128,147773],{"class":306},[35,149130,38373],{"class":359},[35,149132,149133,149135,149137,149139,149141,149143,149145],{"class":37,"line":253},[35,149134,147780],{"class":5550},[35,149136,544],{"class":495},[35,149138,147785],{"class":359},[35,149140,147788],{"class":5550},[35,149142,544],{"class":495},[35,149144,147793],{"class":306},[35,149146,38373],{"class":359},[35,149148,149149,149152,149154],{"class":37,"line":262},[35,149150,149151],{"class":5550},"    datazoom_opts",[35,149153,544],{"class":495},[35,149155,149156],{"class":359},"[opts.DataZoomOpts()],\n",[35,149158,149159],{"class":37,"line":271},[35,149160,505],{"class":359},[35,149162,149163,149165,149168],{"class":37,"line":280},[35,149164,147575],{"class":359},[35,149166,149167],{"class":306},"\"daily_sales.html\"",[35,149169,505],{"class":359},[21,149171,149172,149175],{},[32,149173,149174],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[438,149177,149179],{"id":149178},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[21,149181,149182],{},"如果数据结构如下：",[25,149184,149186],{"className":30704,"code":149185,"language":30706,"meta":30,"style":30},"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",[32,149187,149188,149196,149204,149226,149247,149252,149259,149279,149299,149303],{"__ignoreMap":30},[35,149189,149190,149192,149194],{"class":37,"line":38},[35,149191,101980],{"class":359},[35,149193,544],{"class":495},[35,149195,15906],{"class":359},[35,149197,149198,149201],{"class":37,"line":45},[35,149199,149200],{"class":306},"    \"北京\"",[35,149202,149203],{"class":359},": [\n",[35,149205,149206,149208,149210,149212,149215,149217,149220,149222,149224],{"class":37,"line":55},[35,149207,5251],{"class":359},[35,149209,148248],{"class":306},[35,149211,51763],{"class":359},[35,149213,149214],{"class":306},"\"2024-01-01\"",[35,149216,12769],{"class":359},[35,149218,149219],{"class":306},"\"confirm\"",[35,149221,51763],{"class":359},[35,149223,940],{"class":58},[35,149225,5264],{"class":359},[35,149227,149228,149230,149232,149234,149237,149239,149241,149243,149245],{"class":37,"line":65},[35,149229,5251],{"class":359},[35,149231,148248],{"class":306},[35,149233,51763],{"class":359},[35,149235,149236],{"class":306},"\"2024-01-02\"",[35,149238,12769],{"class":359},[35,149240,149219],{"class":306},[35,149242,51763],{"class":359},[35,149244,992],{"class":58},[35,149246,5264],{"class":359},[35,149248,149249],{"class":37,"line":74},[35,149250,149251],{"class":359},"    ],\n",[35,149253,149254,149257],{"class":37,"line":83},[35,149255,149256],{"class":306},"    \"上海\"",[35,149258,149203],{"class":359},[35,149260,149261,149263,149265,149267,149269,149271,149273,149275,149277],{"class":37,"line":92},[35,149262,5251],{"class":359},[35,149264,148248],{"class":306},[35,149266,51763],{"class":359},[35,149268,149214],{"class":306},[35,149270,12769],{"class":359},[35,149272,149219],{"class":306},[35,149274,51763],{"class":359},[35,149276,889],{"class":58},[35,149278,5264],{"class":359},[35,149280,149281,149283,149285,149287,149289,149291,149293,149295,149297],{"class":37,"line":101},[35,149282,5251],{"class":359},[35,149284,148248],{"class":306},[35,149286,51763],{"class":359},[35,149288,149236],{"class":306},[35,149290,12769],{"class":359},[35,149292,149219],{"class":306},[35,149294,51763],{"class":359},[35,149296,1017],{"class":58},[35,149298,5264],{"class":359},[35,149300,149301],{"class":37,"line":110},[35,149302,149251],{"class":359},[35,149304,149305],{"class":37,"line":119},[35,149306,1926],{"class":359},[21,149308,149309],{},"绘制多地区趋势：",[25,149311,149313],{"className":30704,"code":149312,"language":30706,"meta":30,"style":30},"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",[32,149314,149315,149329,149339,149343,149368,149372,149380,149384,149388,149400,149422,149435,149439,149443,149460,149476,149480],{"__ignoreMap":30},[35,149316,149317,149319,149321,149323,149325,149327],{"class":37,"line":38},[35,149318,31063],{"class":495},[35,149320,147630],{"class":359},[35,149322,30718],{"class":495},[35,149324,147635],{"class":359},[35,149326,31709],{"class":495},[35,149328,147640],{"class":359},[35,149330,149331,149333,149335,149337],{"class":37,"line":45},[35,149332,31063],{"class":495},[35,149334,147489],{"class":359},[35,149336,30718],{"class":495},[35,149338,147494],{"class":359},[35,149340,149341],{"class":37,"line":55},[35,149342,141],{"emptyLinePlaceholder":140},[35,149344,149345,149347,149349,149351,149353,149355,149357,149359,149361,149364,149366],{"class":37,"line":65},[35,149346,148051],{"class":359},[35,149348,544],{"class":495},[35,149350,148974],{"class":359},[35,149352,148248],{"class":306},[35,149354,4777],{"class":359},[35,149356,3359],{"class":495},[35,149358,148460],{"class":359},[35,149360,26374],{"class":495},[35,149362,149363],{"class":359}," data[",[35,149365,69595],{"class":306},[35,149367,77852],{"class":359},[35,149369,149370],{"class":37,"line":74},[35,149371,141],{"emptyLinePlaceholder":140},[35,149373,149374,149376,149378],{"class":37,"line":83},[35,149375,147503],{"class":359},[35,149377,544],{"class":495},[35,149379,147508],{"class":359},[35,149381,149382],{"class":37,"line":92},[35,149383,148092],{"class":359},[35,149385,149386],{"class":37,"line":101},[35,149387,141],{"emptyLinePlaceholder":140},[35,149389,149390,149392,149395,149397],{"class":37,"line":110},[35,149391,3359],{"class":495},[35,149393,149394],{"class":359}," city, records ",[35,149396,26374],{"class":495},[35,149398,149399],{"class":359}," data.items():\n",[35,149401,149402,149405,149407,149409,149411,149413,149415,149417,149419],{"class":37,"line":119},[35,149403,149404],{"class":359},"    values ",[35,149406,544],{"class":495},[35,149408,148974],{"class":359},[35,149410,149219],{"class":306},[35,149412,4777],{"class":359},[35,149414,3359],{"class":495},[35,149416,148460],{"class":359},[35,149418,26374],{"class":495},[35,149420,149421],{"class":359}," records]\n",[35,149423,149424,149427,149429,149431,149433],{"class":37,"line":128},[35,149425,149426],{"class":359},"    line.add_yaxis(city, values, ",[35,149428,147996],{"class":5550},[35,149430,544],{"class":495},[35,149432,31802],{"class":58},[35,149434,505],{"class":359},[35,149436,149437],{"class":37,"line":137},[35,149438,141],{"emptyLinePlaceholder":140},[35,149440,149441],{"class":37,"line":144},[35,149442,147719],{"class":359},[35,149444,149445,149447,149449,149451,149453,149455,149458],{"class":37,"line":150},[35,149446,147724],{"class":5550},[35,149448,544],{"class":495},[35,149450,147729],{"class":359},[35,149452,51733],{"class":5550},[35,149454,544],{"class":495},[35,149456,149457],{"class":306},"\"多地区趋势图\"",[35,149459,38373],{"class":359},[35,149461,149462,149464,149466,149468,149470,149472,149474],{"class":37,"line":159},[35,149463,147780],{"class":5550},[35,149465,544],{"class":495},[35,149467,147785],{"class":359},[35,149469,147788],{"class":5550},[35,149471,544],{"class":495},[35,149473,147793],{"class":306},[35,149475,38373],{"class":359},[35,149477,149478],{"class":37,"line":168},[35,149479,505],{"class":359},[35,149481,149482,149484,149487],{"class":37,"line":177},[35,149483,147575],{"class":359},[35,149485,149486],{"class":306},"\"trend.html\"",[35,149488,505],{"class":359},[21,149490,149491],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[438,149493,149495],{"id":149494},"_1012-易错点","10.12 易错点",[14,149497,149498,149504,149510,149520,149526],{},[17,149499,149500,149503],{},[32,149501,149502],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[17,149505,149506,149509],{},[32,149507,149508],{},"render()"," 生成的是 HTML，不是图片。",[17,149511,149512,149513,149516,149517,28711],{},"JSON 字符串用 ",[32,149514,149515],{},"json.loads()","，JSON 文件用 ",[32,149518,149519],{},"json.load()",[17,149521,149522,149523,28711],{},"中文 JSON 保存时加 ",[32,149524,149525],{},"ensure_ascii=False",[17,149527,149528],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[438,149530,149532],{"id":149531},"_1013-本章练习","10.13 本章练习",[14,149534,149535,149538,149541,149544,149547],{},[17,149536,149537],{},"安装 pyecharts 并生成第一个折线图。",[17,149539,149540],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[17,149542,149543],{},"绘制两条折线，对比线上和线下销售额。",[17,149545,149546],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[17,149548,149549],{},"对含有空值的销售数据进行清洗后再绘图。",[416,149551,149552],{},"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":30,"searchDepth":45,"depth":45,"links":149554},[149555,149556,149557,149558,149559,149560,149561,149562,149563,149564,149565,149566,149567],{"id":147171,"depth":45,"text":147172},{"id":147246,"depth":45,"text":147247},{"id":147425,"depth":45,"text":147426},{"id":147476,"depth":45,"text":147477},{"id":147610,"depth":45,"text":147611},{"id":147886,"depth":45,"text":147887},{"id":148012,"depth":45,"text":148013},{"id":148223,"depth":45,"text":148224},{"id":148594,"depth":45,"text":148595},{"id":148806,"depth":45,"text":148807},{"id":149178,"depth":45,"text":149179},{"id":149494,"depth":45,"text":149495},{"id":149531,"depth":45,"text":149532},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147163,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149574,"title":149575,"body":149576,"description":421,"extension":422,"meta":151936,"navigation":140,"path":151937,"seo":151938,"stem":151939,"__hash__":151940},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149577,"toc":151913},[149578,149581,149585,149588,149591,149667,149670,149761,149764,149768,149771,149815,149828,149832,149835,149902,149905,149909,149912,149996,150004,150008,150013,150154,150157,150168,150174,150180,150294,150298,150301,150304,150557,150560,150564,150567,150671,150674,150678,150829,150833,150840,150953,150957,150960,151066,151069,151073,151076,151107,151110,151215,151218,151222,151226,151236,151304,151308,151315,151379,151382,151386,151392,151488,151497,151501,151825,151834,151838,151866,151870,151910],[10,149579,149575],{"id":149580},"_11-面向对象基础",[438,149582,149584],{"id":149583},"_111-什么是面向对象","11.1 什么是面向对象",[21,149586,149587],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[21,149589,149590],{},"面向过程：",[25,149592,149594],{"className":30704,"code":149593,"language":30706,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[32,149595,149596,149605,149613,149617,149627,149658,149662],{"__ignoreMap":30},[35,149597,149598,149600,149602],{"class":37,"line":38},[35,149599,146787],{"class":359},[35,149601,544],{"class":495},[35,149603,149604],{"class":306}," \"小明\"\n",[35,149606,149607,149609,149611],{"class":37,"line":45},[35,149608,146797],{"class":359},[35,149610,544],{"class":495},[35,149612,146802],{"class":58},[35,149614,149615],{"class":37,"line":55},[35,149616,141],{"emptyLinePlaceholder":140},[35,149618,149619,149621,149624],{"class":37,"line":65},[35,149620,32273],{"class":495},[35,149622,149623],{"class":48}," introduce",[35,149625,149626],{"class":359},"(name, age):\n",[35,149628,149629,149631,149633,149635,149638,149640,149642,149644,149647,149649,149651,149653,149656],{"class":37,"line":74},[35,149630,31625],{"class":58},[35,149632,499],{"class":359},[35,149634,550],{"class":495},[35,149636,149637],{"class":306},"\"我叫",[35,149639,1390],{"class":58},[35,149641,80135],{"class":359},[35,149643,1440],{"class":58},[35,149645,149646],{"class":306},"，今年",[35,149648,1390],{"class":58},[35,149650,70546],{"class":359},[35,149652,1440],{"class":58},[35,149654,149655],{"class":306},"岁\"",[35,149657,505],{"class":359},[35,149659,149660],{"class":37,"line":83},[35,149661,141],{"emptyLinePlaceholder":140},[35,149663,149664],{"class":37,"line":92},[35,149665,149666],{"class":359},"introduce(name, age)\n",[21,149668,149669],{},"面向对象：",[25,149671,149673],{"className":30704,"code":149672,"language":30706,"meta":30,"style":30},"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",[32,149674,149675,149683,149691,149720,149724,149728,149738,149747,149756],{"__ignoreMap":30},[35,149676,149677,149679,149681],{"class":37,"line":38},[35,149678,15028],{"class":495},[35,149680,8232],{"class":48},[35,149682,4073],{"class":359},[35,149684,149685,149687,149689],{"class":37,"line":45},[35,149686,31127],{"class":495},[35,149688,149623],{"class":48},[35,149690,31133],{"class":359},[35,149692,149693,149695,149697,149699,149701,149704,149706,149708,149710,149712,149714,149716,149718],{"class":37,"line":55},[35,149694,32777],{"class":58},[35,149696,499],{"class":359},[35,149698,550],{"class":495},[35,149700,149637],{"class":306},[35,149702,149703],{"class":58},"{self",[35,149705,80626],{"class":359},[35,149707,1440],{"class":58},[35,149709,149646],{"class":306},[35,149711,149703],{"class":58},[35,149713,80638],{"class":359},[35,149715,1440],{"class":58},[35,149717,149655],{"class":306},[35,149719,505],{"class":359},[35,149721,149722],{"class":37,"line":65},[35,149723,141],{"emptyLinePlaceholder":140},[35,149725,149726],{"class":37,"line":74},[35,149727,141],{"emptyLinePlaceholder":140},[35,149729,149730,149733,149735],{"class":37,"line":83},[35,149731,149732],{"class":359},"student ",[35,149734,544],{"class":495},[35,149736,149737],{"class":359}," Student()\n",[35,149739,149740,149743,149745],{"class":37,"line":92},[35,149741,149742],{"class":359},"student.name ",[35,149744,544],{"class":495},[35,149746,149604],{"class":306},[35,149748,149749,149752,149754],{"class":37,"line":101},[35,149750,149751],{"class":359},"student.age ",[35,149753,544],{"class":495},[35,149755,146802],{"class":58},[35,149757,149758],{"class":37,"line":110},[35,149759,149760],{"class":359},"student.introduce()\n",[21,149762,149763],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[438,149765,149767],{"id":149766},"_112-类和对象","11.2 类和对象",[21,149769,149770],{},"类是模板，对象是根据模板创建出来的具体实例。",[25,149772,149774],{"className":30704,"code":149773,"language":30706,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[32,149775,149776,149784,149789,149793,149797,149806],{"__ignoreMap":30},[35,149777,149778,149780,149782],{"class":37,"line":38},[35,149779,15028],{"class":495},[35,149781,8232],{"class":48},[35,149783,4073],{"class":359},[35,149785,149786],{"class":37,"line":45},[35,149787,149788],{"class":495},"    pass\n",[35,149790,149791],{"class":37,"line":55},[35,149792,141],{"emptyLinePlaceholder":140},[35,149794,149795],{"class":37,"line":65},[35,149796,141],{"emptyLinePlaceholder":140},[35,149798,149799,149802,149804],{"class":37,"line":74},[35,149800,149801],{"class":359},"student1 ",[35,149803,544],{"class":495},[35,149805,149737],{"class":359},[35,149807,149808,149811,149813],{"class":37,"line":83},[35,149809,149810],{"class":359},"student2 ",[35,149812,544],{"class":495},[35,149814,149737],{"class":359},[21,149816,149817,149820,149821,101343,149824,149827],{},[32,149818,149819],{},"Student"," 是类，",[32,149822,149823],{},"student1",[32,149825,149826],{},"student2"," 是对象。",[438,149829,149831],{"id":149830},"_113-属性","11.3 属性",[21,149833,149834],{},"属性是对象保存的数据。",[25,149836,149838],{"className":30704,"code":149837,"language":30706,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[32,149839,149840,149848,149852,149856,149860,149868,149876,149884,149888,149895],{"__ignoreMap":30},[35,149841,149842,149844,149846],{"class":37,"line":38},[35,149843,15028],{"class":495},[35,149845,8232],{"class":48},[35,149847,4073],{"class":359},[35,149849,149850],{"class":37,"line":45},[35,149851,149788],{"class":495},[35,149853,149854],{"class":37,"line":55},[35,149855,141],{"emptyLinePlaceholder":140},[35,149857,149858],{"class":37,"line":65},[35,149859,141],{"emptyLinePlaceholder":140},[35,149861,149862,149864,149866],{"class":37,"line":74},[35,149863,149732],{"class":359},[35,149865,544],{"class":495},[35,149867,149737],{"class":359},[35,149869,149870,149872,149874],{"class":37,"line":83},[35,149871,149742],{"class":359},[35,149873,544],{"class":495},[35,149875,149604],{"class":306},[35,149877,149878,149880,149882],{"class":37,"line":92},[35,149879,149751],{"class":359},[35,149881,544],{"class":495},[35,149883,146802],{"class":58},[35,149885,149886],{"class":37,"line":101},[35,149887,141],{"emptyLinePlaceholder":140},[35,149889,149890,149892],{"class":37,"line":110},[35,149891,30741],{"class":58},[35,149893,149894],{"class":359},"(student.name)\n",[35,149896,149897,149899],{"class":37,"line":119},[35,149898,30741],{"class":58},[35,149900,149901],{"class":359},"(student.age)\n",[21,149903,149904],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[438,149906,149908],{"id":149907},"_114-方法","11.4 方法",[21,149910,149911],{},"类中的函数叫方法。",[25,149913,149914],{"className":30704,"code":149672,"language":30706,"meta":30,"style":30},[32,149915,149916,149924,149932,149960,149964,149968,149976,149984,149992],{"__ignoreMap":30},[35,149917,149918,149920,149922],{"class":37,"line":38},[35,149919,15028],{"class":495},[35,149921,8232],{"class":48},[35,149923,4073],{"class":359},[35,149925,149926,149928,149930],{"class":37,"line":45},[35,149927,31127],{"class":495},[35,149929,149623],{"class":48},[35,149931,31133],{"class":359},[35,149933,149934,149936,149938,149940,149942,149944,149946,149948,149950,149952,149954,149956,149958],{"class":37,"line":55},[35,149935,32777],{"class":58},[35,149937,499],{"class":359},[35,149939,550],{"class":495},[35,149941,149637],{"class":306},[35,149943,149703],{"class":58},[35,149945,80626],{"class":359},[35,149947,1440],{"class":58},[35,149949,149646],{"class":306},[35,149951,149703],{"class":58},[35,149953,80638],{"class":359},[35,149955,1440],{"class":58},[35,149957,149655],{"class":306},[35,149959,505],{"class":359},[35,149961,149962],{"class":37,"line":65},[35,149963,141],{"emptyLinePlaceholder":140},[35,149965,149966],{"class":37,"line":74},[35,149967,141],{"emptyLinePlaceholder":140},[35,149969,149970,149972,149974],{"class":37,"line":83},[35,149971,149732],{"class":359},[35,149973,544],{"class":495},[35,149975,149737],{"class":359},[35,149977,149978,149980,149982],{"class":37,"line":92},[35,149979,149742],{"class":359},[35,149981,544],{"class":495},[35,149983,149604],{"class":306},[35,149985,149986,149988,149990],{"class":37,"line":101},[35,149987,149751],{"class":359},[35,149989,544],{"class":495},[35,149991,146802],{"class":58},[35,149993,149994],{"class":37,"line":110},[35,149995,149760],{"class":359},[21,149997,149998,150000,150001,150003],{},[32,149999,31149],{}," 表示当前对象。调用方法时不需要手动传入 ",[32,150002,31149],{},"，Python 会自动传。",[438,150005,150007],{"id":150006},"_115-构造方法__init__","11.5 构造方法__init__",[21,150009,150010,150012],{},[32,150011,31155],{}," 在对象创建时自动执行，用于初始化属性。",[25,150014,150016],{"className":30704,"code":150015,"language":30706,"meta":30,"style":30},"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",[32,150017,150018,150026,150035,150047,150059,150070,150074,150082,150120,150124,150128,150150],{"__ignoreMap":30},[35,150019,150020,150022,150024],{"class":37,"line":38},[35,150021,15028],{"class":495},[35,150023,8232],{"class":48},[35,150025,4073],{"class":359},[35,150027,150028,150030,150032],{"class":37,"line":45},[35,150029,31127],{"class":495},[35,150031,31130],{"class":58},[35,150033,150034],{"class":359},"(self, name, age, score):\n",[35,150036,150037,150039,150042,150044],{"class":37,"line":55},[35,150038,31171],{"class":58},[35,150040,150041],{"class":359},".name ",[35,150043,544],{"class":495},[35,150045,150046],{"class":359}," name\n",[35,150048,150049,150051,150054,150056],{"class":37,"line":65},[35,150050,31171],{"class":58},[35,150052,150053],{"class":359},".age ",[35,150055,544],{"class":495},[35,150057,150058],{"class":359}," age\n",[35,150060,150061,150063,150066,150068],{"class":37,"line":74},[35,150062,31171],{"class":58},[35,150064,150065],{"class":359},".score ",[35,150067,544],{"class":495},[35,150069,1940],{"class":359},[35,150071,150072],{"class":37,"line":83},[35,150073,141],{"emptyLinePlaceholder":140},[35,150075,150076,150078,150080],{"class":37,"line":92},[35,150077,31127],{"class":495},[35,150079,149623],{"class":48},[35,150081,31133],{"class":359},[35,150083,150084,150086,150088,150090,150092,150094,150096,150098,150100,150102,150104,150106,150109,150111,150114,150116,150118],{"class":37,"line":101},[35,150085,32777],{"class":58},[35,150087,499],{"class":359},[35,150089,550],{"class":495},[35,150091,149637],{"class":306},[35,150093,149703],{"class":58},[35,150095,80626],{"class":359},[35,150097,1440],{"class":58},[35,150099,149646],{"class":306},[35,150101,149703],{"class":58},[35,150103,80638],{"class":359},[35,150105,1440],{"class":58},[35,150107,150108],{"class":306},"岁，成绩",[35,150110,149703],{"class":58},[35,150112,150113],{"class":359},".score",[35,150115,1440],{"class":58},[35,150117,747],{"class":306},[35,150119,505],{"class":359},[35,150121,150122],{"class":37,"line":110},[35,150123,141],{"emptyLinePlaceholder":140},[35,150125,150126],{"class":37,"line":119},[35,150127,141],{"emptyLinePlaceholder":140},[35,150129,150130,150132,150134,150137,150140,150142,150144,150146,150148],{"class":37,"line":128},[35,150131,149732],{"class":359},[35,150133,544],{"class":495},[35,150135,150136],{"class":359}," Student(",[35,150138,150139],{"class":306},"\"小明\"",[35,150141,12769],{"class":359},[35,150143,1144],{"class":58},[35,150145,12769],{"class":359},[35,150147,1483],{"class":58},[35,150149,505],{"class":359},[35,150151,150152],{"class":37,"line":137},[35,150153,149760],{"class":359},[21,150155,150156],{},"构造方法的好处：",[14,150158,150159,150162,150165],{},[17,150160,150161],{},"创建对象时必须提供必要数据。",[17,150163,150164],{},"属性初始化集中，不容易漏。",[17,150166,150167],{},"对象状态更完整。",[438,150169,150171,150172],{"id":150170},"_116-str","11.6 ",[645,150173,1664],{},[21,150175,150176,150177,28711],{},"直接打印对象时，默认输出不直观。可以定义 ",[32,150178,150179],{},"__str__",[25,150181,150183],{"className":30704,"code":150182,"language":30706,"meta":30,"style":30},"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",[32,150184,150185,150193,150202,150212,150222,150226,150235,150263,150267,150271,150287],{"__ignoreMap":30},[35,150186,150187,150189,150191],{"class":37,"line":38},[35,150188,15028],{"class":495},[35,150190,8232],{"class":48},[35,150192,4073],{"class":359},[35,150194,150195,150197,150199],{"class":37,"line":45},[35,150196,31127],{"class":495},[35,150198,31130],{"class":58},[35,150200,150201],{"class":359},"(self, name, age):\n",[35,150203,150204,150206,150208,150210],{"class":37,"line":55},[35,150205,31171],{"class":58},[35,150207,150041],{"class":359},[35,150209,544],{"class":495},[35,150211,150046],{"class":359},[35,150213,150214,150216,150218,150220],{"class":37,"line":65},[35,150215,31171],{"class":58},[35,150217,150053],{"class":359},[35,150219,544],{"class":495},[35,150221,150058],{"class":359},[35,150223,150224],{"class":37,"line":74},[35,150225,141],{"emptyLinePlaceholder":140},[35,150227,150228,150230,150233],{"class":37,"line":83},[35,150229,31127],{"class":495},[35,150231,150232],{"class":58}," __str__",[35,150234,31133],{"class":359},[35,150236,150237,150239,150242,150245,150247,150249,150251,150254,150256,150258,150260],{"class":37,"line":92},[35,150238,15086],{"class":495},[35,150240,150241],{"class":495}," f",[35,150243,150244],{"class":306},"\"Student(name=",[35,150246,149703],{"class":58},[35,150248,80626],{"class":359},[35,150250,1440],{"class":58},[35,150252,150253],{"class":306},", age=",[35,150255,149703],{"class":58},[35,150257,80638],{"class":359},[35,150259,1440],{"class":58},[35,150261,150262],{"class":306},")\"\n",[35,150264,150265],{"class":37,"line":101},[35,150266,141],{"emptyLinePlaceholder":140},[35,150268,150269],{"class":37,"line":110},[35,150270,141],{"emptyLinePlaceholder":140},[35,150272,150273,150275,150277,150279,150281,150283,150285],{"class":37,"line":119},[35,150274,149732],{"class":359},[35,150276,544],{"class":495},[35,150278,150136],{"class":359},[35,150280,150139],{"class":306},[35,150282,12769],{"class":359},[35,150284,1144],{"class":58},[35,150286,505],{"class":359},[35,150288,150289,150291],{"class":37,"line":128},[35,150290,30741],{"class":58},[35,150292,150293],{"class":359},"(student)\n",[438,150295,150297],{"id":150296},"_117-封装","11.7 封装",[21,150299,150300],{},"封装就是把数据和方法放到类中，并控制访问方式。",[21,150302,150303],{},"Python 中以双下划线开头的属性通常视为私有属性。",[25,150305,150307],{"className":30704,"code":150306,"language":30706,"meta":30,"style":30},"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",[32,150308,150309,150318,150327,150339,150351,150355,150364,150373,150377,150387,150400,150411,150416,150427,150431,150440,150452,150463,150467,150480,150491,150495,150506,150510,150514,150532,150541,150550],{"__ignoreMap":30},[35,150310,150311,150313,150316],{"class":37,"line":38},[35,150312,15028],{"class":495},[35,150314,150315],{"class":48}," Account",[35,150317,4073],{"class":359},[35,150319,150320,150322,150324],{"class":37,"line":45},[35,150321,31127],{"class":495},[35,150323,31130],{"class":58},[35,150325,150326],{"class":359},"(self, owner, balance):\n",[35,150328,150329,150331,150334,150336],{"class":37,"line":55},[35,150330,31171],{"class":58},[35,150332,150333],{"class":359},".owner ",[35,150335,544],{"class":495},[35,150337,150338],{"class":359}," owner\n",[35,150340,150341,150343,150346,150348],{"class":37,"line":65},[35,150342,31171],{"class":58},[35,150344,150345],{"class":359},".__balance ",[35,150347,544],{"class":495},[35,150349,150350],{"class":359}," balance\n",[35,150352,150353],{"class":37,"line":74},[35,150354,141],{"emptyLinePlaceholder":140},[35,150356,150357,150359,150362],{"class":37,"line":83},[35,150358,31127],{"class":495},[35,150360,150361],{"class":48}," get_balance",[35,150363,31133],{"class":359},[35,150365,150366,150368,150370],{"class":37,"line":92},[35,150367,15086],{"class":495},[35,150369,39199],{"class":58},[35,150371,150372],{"class":359},".__balance\n",[35,150374,150375],{"class":37,"line":101},[35,150376,141],{"emptyLinePlaceholder":140},[35,150378,150379,150381,150384],{"class":37,"line":110},[35,150380,31127],{"class":495},[35,150382,150383],{"class":48}," deposit",[35,150385,150386],{"class":359},"(self, money):\n",[35,150388,150389,150391,150394,150396,150398],{"class":37,"line":119},[35,150390,2837],{"class":495},[35,150392,150393],{"class":359}," money ",[35,150395,1949],{"class":495},[35,150397,4427],{"class":58},[35,150399,4073],{"class":359},[35,150401,150402,150404,150406,150409],{"class":37,"line":128},[35,150403,34976],{"class":58},[35,150405,499],{"class":359},[35,150407,150408],{"class":306},"\"存款金额必须大于0\"",[35,150410,505],{"class":359},[35,150412,150413],{"class":37,"line":137},[35,150414,150415],{"class":495},"            return\n",[35,150417,150418,150420,150422,150424],{"class":37,"line":144},[35,150419,31171],{"class":58},[35,150421,150345],{"class":359},[35,150423,9811],{"class":495},[35,150425,150426],{"class":359}," money\n",[35,150428,150429],{"class":37,"line":150},[35,150430,141],{"emptyLinePlaceholder":140},[35,150432,150433,150435,150438],{"class":37,"line":159},[35,150434,31127],{"class":495},[35,150436,150437],{"class":48}," withdraw",[35,150439,150386],{"class":359},[35,150441,150442,150444,150446,150448,150450],{"class":37,"line":168},[35,150443,2837],{"class":495},[35,150445,150393],{"class":359},[35,150447,1949],{"class":495},[35,150449,4427],{"class":58},[35,150451,4073],{"class":359},[35,150453,150454,150456,150458,150461],{"class":37,"line":177},[35,150455,34976],{"class":58},[35,150457,499],{"class":359},[35,150459,150460],{"class":306},"\"取款金额必须大于0\"",[35,150462,505],{"class":359},[35,150464,150465],{"class":37,"line":182},[35,150466,150415],{"class":495},[35,150468,150469,150471,150473,150475,150477],{"class":37,"line":188},[35,150470,2837],{"class":495},[35,150472,150393],{"class":359},[35,150474,1454],{"class":495},[35,150476,39199],{"class":58},[35,150478,150479],{"class":359},".__balance:\n",[35,150481,150482,150484,150486,150489],{"class":37,"line":197},[35,150483,34976],{"class":58},[35,150485,499],{"class":359},[35,150487,150488],{"class":306},"\"余额不足\"",[35,150490,505],{"class":359},[35,150492,150493],{"class":37,"line":206},[35,150494,150415],{"class":495},[35,150496,150497,150499,150501,150504],{"class":37,"line":215},[35,150498,31171],{"class":58},[35,150500,150345],{"class":359},[35,150502,150503],{"class":495},"-=",[35,150505,150426],{"class":359},[35,150507,150508],{"class":37,"line":224},[35,150509,141],{"emptyLinePlaceholder":140},[35,150511,150512],{"class":37,"line":233},[35,150513,141],{"emptyLinePlaceholder":140},[35,150515,150516,150519,150521,150524,150526,150528,150530],{"class":37,"line":238},[35,150517,150518],{"class":359},"account ",[35,150520,544],{"class":495},[35,150522,150523],{"class":359}," Account(",[35,150525,150139],{"class":306},[35,150527,12769],{"class":359},[35,150529,6744],{"class":58},[35,150531,505],{"class":359},[35,150533,150534,150537,150539],{"class":37,"line":244},[35,150535,150536],{"class":359},"account.deposit(",[35,150538,2072],{"class":58},[35,150540,505],{"class":359},[35,150542,150543,150546,150548],{"class":37,"line":253},[35,150544,150545],{"class":359},"account.withdraw(",[35,150547,807],{"class":58},[35,150549,505],{"class":359},[35,150551,150552,150554],{"class":37,"line":262},[35,150553,30741],{"class":58},[35,150555,150556],{"class":359},"(account.get_balance())\n",[21,150558,150559],{},"封装的意义是避免外部随意修改内部状态。",[438,150561,150563],{"id":150562},"_118-继承","11.8 继承",[21,150565,150566],{},"继承可以让子类复用父类的属性和方法。",[25,150568,150570],{"className":30704,"code":150569,"language":30706,"meta":30,"style":30},"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",[32,150571,150572,150581,150590,150601,150605,150609,150623,150632,150643,150647,150651,150661,150666],{"__ignoreMap":30},[35,150573,150574,150576,150579],{"class":37,"line":38},[35,150575,15028],{"class":495},[35,150577,150578],{"class":48}," Animal",[35,150580,4073],{"class":359},[35,150582,150583,150585,150588],{"class":37,"line":45},[35,150584,31127],{"class":495},[35,150586,150587],{"class":48}," eat",[35,150589,31133],{"class":359},[35,150591,150592,150594,150596,150599],{"class":37,"line":55},[35,150593,32777],{"class":58},[35,150595,499],{"class":359},[35,150597,150598],{"class":306},"\"吃东西\"",[35,150600,505],{"class":359},[35,150602,150603],{"class":37,"line":65},[35,150604,141],{"emptyLinePlaceholder":140},[35,150606,150607],{"class":37,"line":74},[35,150608,141],{"emptyLinePlaceholder":140},[35,150610,150611,150613,150616,150618,150621],{"class":37,"line":83},[35,150612,15028],{"class":495},[35,150614,150615],{"class":48}," Dog",[35,150617,499],{"class":359},[35,150619,150620],{"class":48},"Animal",[35,150622,31112],{"class":359},[35,150624,150625,150627,150630],{"class":37,"line":92},[35,150626,31127],{"class":495},[35,150628,150629],{"class":48}," bark",[35,150631,31133],{"class":359},[35,150633,150634,150636,150638,150641],{"class":37,"line":101},[35,150635,32777],{"class":58},[35,150637,499],{"class":359},[35,150639,150640],{"class":306},"\"汪汪\"",[35,150642,505],{"class":359},[35,150644,150645],{"class":37,"line":110},[35,150646,141],{"emptyLinePlaceholder":140},[35,150648,150649],{"class":37,"line":119},[35,150650,141],{"emptyLinePlaceholder":140},[35,150652,150653,150656,150658],{"class":37,"line":128},[35,150654,150655],{"class":359},"dog ",[35,150657,544],{"class":495},[35,150659,150660],{"class":359}," Dog()\n",[35,150662,150663],{"class":37,"line":137},[35,150664,150665],{"class":359},"dog.eat()\n",[35,150667,150668],{"class":37,"line":144},[35,150669,150670],{"class":359},"dog.bark()\n",[21,150672,150673],{},"子类可以扩展新方法，也可以重写父类方法。",[438,150675,150677],{"id":150676},"_119-方法重写","11.9 方法重写",[25,150679,150681],{"className":30704,"code":150680,"language":30706,"meta":30,"style":30},"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",[32,150682,150683,150691,150700,150711,150715,150719,150731,150739,150749,150753,150757,150770,150778,150789,150793,150797,150805,150815,150819,150824],{"__ignoreMap":30},[35,150684,150685,150687,150689],{"class":37,"line":38},[35,150686,15028],{"class":495},[35,150688,150578],{"class":48},[35,150690,4073],{"class":359},[35,150692,150693,150695,150698],{"class":37,"line":45},[35,150694,31127],{"class":495},[35,150696,150697],{"class":48}," speak",[35,150699,31133],{"class":359},[35,150701,150702,150704,150706,150709],{"class":37,"line":55},[35,150703,32777],{"class":58},[35,150705,499],{"class":359},[35,150707,150708],{"class":306},"\"动物叫\"",[35,150710,505],{"class":359},[35,150712,150713],{"class":37,"line":65},[35,150714,141],{"emptyLinePlaceholder":140},[35,150716,150717],{"class":37,"line":74},[35,150718,141],{"emptyLinePlaceholder":140},[35,150720,150721,150723,150725,150727,150729],{"class":37,"line":83},[35,150722,15028],{"class":495},[35,150724,150615],{"class":48},[35,150726,499],{"class":359},[35,150728,150620],{"class":48},[35,150730,31112],{"class":359},[35,150732,150733,150735,150737],{"class":37,"line":92},[35,150734,31127],{"class":495},[35,150736,150697],{"class":48},[35,150738,31133],{"class":359},[35,150740,150741,150743,150745,150747],{"class":37,"line":101},[35,150742,32777],{"class":58},[35,150744,499],{"class":359},[35,150746,150640],{"class":306},[35,150748,505],{"class":359},[35,150750,150751],{"class":37,"line":110},[35,150752,141],{"emptyLinePlaceholder":140},[35,150754,150755],{"class":37,"line":119},[35,150756,141],{"emptyLinePlaceholder":140},[35,150758,150759,150761,150764,150766,150768],{"class":37,"line":128},[35,150760,15028],{"class":495},[35,150762,150763],{"class":48}," Cat",[35,150765,499],{"class":359},[35,150767,150620],{"class":48},[35,150769,31112],{"class":359},[35,150771,150772,150774,150776],{"class":37,"line":137},[35,150773,31127],{"class":495},[35,150775,150697],{"class":48},[35,150777,31133],{"class":359},[35,150779,150780,150782,150784,150787],{"class":37,"line":144},[35,150781,32777],{"class":58},[35,150783,499],{"class":359},[35,150785,150786],{"class":306},"\"喵喵\"",[35,150788,505],{"class":359},[35,150790,150791],{"class":37,"line":150},[35,150792,141],{"emptyLinePlaceholder":140},[35,150794,150795],{"class":37,"line":159},[35,150796,141],{"emptyLinePlaceholder":140},[35,150798,150799,150801,150803],{"class":37,"line":168},[35,150800,150655],{"class":359},[35,150802,544],{"class":495},[35,150804,150660],{"class":359},[35,150806,150807,150810,150812],{"class":37,"line":177},[35,150808,150809],{"class":359},"cat ",[35,150811,544],{"class":495},[35,150813,150814],{"class":359}," Cat()\n",[35,150816,150817],{"class":37,"line":182},[35,150818,141],{"emptyLinePlaceholder":140},[35,150820,150821],{"class":37,"line":188},[35,150822,150823],{"class":359},"dog.speak()\n",[35,150825,150826],{"class":37,"line":197},[35,150827,150828],{"class":359},"cat.speak()\n",[438,150830,150832],{"id":150831},"_1110-super","11.10 super",[21,150834,150835,150836,150839],{},"子类可以通过 ",[32,150837,150838],{},"super()"," 调用父类方法。",[25,150841,150843],{"className":30704,"code":150842,"language":30706,"meta":30,"style":30},"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",[32,150844,150845,150853,150862,150872,150876,150880,150892,150901,150912,150922,150926,150930,150946],{"__ignoreMap":30},[35,150846,150847,150849,150851],{"class":37,"line":38},[35,150848,15028],{"class":495},[35,150850,15903],{"class":48},[35,150852,4073],{"class":359},[35,150854,150855,150857,150859],{"class":37,"line":45},[35,150856,31127],{"class":495},[35,150858,31130],{"class":58},[35,150860,150861],{"class":359},"(self, name):\n",[35,150863,150864,150866,150868,150870],{"class":37,"line":55},[35,150865,31171],{"class":58},[35,150867,150041],{"class":359},[35,150869,544],{"class":495},[35,150871,150046],{"class":359},[35,150873,150874],{"class":37,"line":65},[35,150875,141],{"emptyLinePlaceholder":140},[35,150877,150878],{"class":37,"line":74},[35,150879,141],{"emptyLinePlaceholder":140},[35,150881,150882,150884,150886,150888,150890],{"class":37,"line":83},[35,150883,15028],{"class":495},[35,150885,8232],{"class":48},[35,150887,499],{"class":359},[35,150889,19380],{"class":48},[35,150891,31112],{"class":359},[35,150893,150894,150896,150898],{"class":37,"line":92},[35,150895,31127],{"class":495},[35,150897,31130],{"class":58},[35,150899,150900],{"class":359},"(self, name, score):\n",[35,150902,150903,150905,150907,150909],{"class":37,"line":101},[35,150904,31143],{"class":58},[35,150906,17595],{"class":359},[35,150908,31155],{"class":58},[35,150910,150911],{"class":359},"(name)\n",[35,150913,150914,150916,150918,150920],{"class":37,"line":110},[35,150915,31171],{"class":58},[35,150917,150065],{"class":359},[35,150919,544],{"class":495},[35,150921,1940],{"class":359},[35,150923,150924],{"class":37,"line":119},[35,150925,141],{"emptyLinePlaceholder":140},[35,150927,150928],{"class":37,"line":128},[35,150929,141],{"emptyLinePlaceholder":140},[35,150931,150932,150934,150936,150938,150940,150942,150944],{"class":37,"line":137},[35,150933,149732],{"class":359},[35,150935,544],{"class":495},[35,150937,150136],{"class":359},[35,150939,150139],{"class":306},[35,150941,12769],{"class":359},[35,150943,1483],{"class":58},[35,150945,505],{"class":359},[35,150947,150948,150950],{"class":37,"line":144},[35,150949,30741],{"class":58},[35,150951,150952],{"class":359},"(student.name, student.score)\n",[438,150954,150956],{"id":150955},"_1111-多态","11.11 多态",[21,150958,150959],{},"多态指不同对象响应同一个方法，表现出不同结果。",[25,150961,150963],{"className":30704,"code":150962,"language":30706,"meta":30,"style":30},"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",[32,150964,150965,150973,150981,150991,150995,150999,151007,151015,151025,151029,151033,151043,151048,151052,151056,151061],{"__ignoreMap":30},[35,150966,150967,150969,150971],{"class":37,"line":38},[35,150968,15028],{"class":495},[35,150970,150615],{"class":48},[35,150972,4073],{"class":359},[35,150974,150975,150977,150979],{"class":37,"line":45},[35,150976,31127],{"class":495},[35,150978,150697],{"class":48},[35,150980,31133],{"class":359},[35,150982,150983,150985,150987,150989],{"class":37,"line":55},[35,150984,32777],{"class":58},[35,150986,499],{"class":359},[35,150988,150640],{"class":306},[35,150990,505],{"class":359},[35,150992,150993],{"class":37,"line":65},[35,150994,141],{"emptyLinePlaceholder":140},[35,150996,150997],{"class":37,"line":74},[35,150998,141],{"emptyLinePlaceholder":140},[35,151000,151001,151003,151005],{"class":37,"line":83},[35,151002,15028],{"class":495},[35,151004,150763],{"class":48},[35,151006,4073],{"class":359},[35,151008,151009,151011,151013],{"class":37,"line":92},[35,151010,31127],{"class":495},[35,151012,150697],{"class":48},[35,151014,31133],{"class":359},[35,151016,151017,151019,151021,151023],{"class":37,"line":101},[35,151018,32777],{"class":58},[35,151020,499],{"class":359},[35,151022,150786],{"class":306},[35,151024,505],{"class":359},[35,151026,151027],{"class":37,"line":110},[35,151028,141],{"emptyLinePlaceholder":140},[35,151030,151031],{"class":37,"line":119},[35,151032,141],{"emptyLinePlaceholder":140},[35,151034,151035,151037,151040],{"class":37,"line":128},[35,151036,32273],{"class":495},[35,151038,151039],{"class":48}," make_sound",[35,151041,151042],{"class":359},"(animal):\n",[35,151044,151045],{"class":37,"line":137},[35,151046,151047],{"class":359},"    animal.speak()\n",[35,151049,151050],{"class":37,"line":144},[35,151051,141],{"emptyLinePlaceholder":140},[35,151053,151054],{"class":37,"line":150},[35,151055,141],{"emptyLinePlaceholder":140},[35,151057,151058],{"class":37,"line":159},[35,151059,151060],{"class":359},"make_sound(Dog())\n",[35,151062,151063],{"class":37,"line":168},[35,151064,151065],{"class":359},"make_sound(Cat())\n",[21,151067,151068],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[438,151070,151072],{"id":151071},"_1112-类属性和实例属性","11.12 类属性和实例属性",[21,151074,151075],{},"实例属性属于对象：",[25,151077,151079],{"className":30704,"code":151078,"language":30706,"meta":30,"style":30},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[32,151080,151081,151089,151097],{"__ignoreMap":30},[35,151082,151083,151085,151087],{"class":37,"line":38},[35,151084,15028],{"class":495},[35,151086,8232],{"class":48},[35,151088,4073],{"class":359},[35,151090,151091,151093,151095],{"class":37,"line":45},[35,151092,31127],{"class":495},[35,151094,31130],{"class":58},[35,151096,150861],{"class":359},[35,151098,151099,151101,151103,151105],{"class":37,"line":55},[35,151100,31171],{"class":58},[35,151102,150041],{"class":359},[35,151104,544],{"class":495},[35,151106,150046],{"class":359},[21,151108,151109],{},"类属性属于类，所有对象共享：",[25,151111,151113],{"className":30704,"code":151112,"language":30706,"meta":30,"style":30},"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",[32,151114,151115,151123,151133,151137,151145,151155,151159,151163,151176,151190,151194,151201,151208],{"__ignoreMap":30},[35,151116,151117,151119,151121],{"class":37,"line":38},[35,151118,15028],{"class":495},[35,151120,8232],{"class":48},[35,151122,4073],{"class":359},[35,151124,151125,151128,151130],{"class":37,"line":45},[35,151126,151127],{"class":359},"    school ",[35,151129,544],{"class":495},[35,151131,151132],{"class":306}," \"黑马学校\"\n",[35,151134,151135],{"class":37,"line":55},[35,151136,141],{"emptyLinePlaceholder":140},[35,151138,151139,151141,151143],{"class":37,"line":65},[35,151140,31127],{"class":495},[35,151142,31130],{"class":58},[35,151144,150861],{"class":359},[35,151146,151147,151149,151151,151153],{"class":37,"line":74},[35,151148,31171],{"class":58},[35,151150,150041],{"class":359},[35,151152,544],{"class":495},[35,151154,150046],{"class":359},[35,151156,151157],{"class":37,"line":83},[35,151158,141],{"emptyLinePlaceholder":140},[35,151160,151161],{"class":37,"line":92},[35,151162,141],{"emptyLinePlaceholder":140},[35,151164,151165,151168,151170,151172,151174],{"class":37,"line":101},[35,151166,151167],{"class":359},"s1 ",[35,151169,544],{"class":495},[35,151171,150136],{"class":359},[35,151173,150139],{"class":306},[35,151175,505],{"class":359},[35,151177,151178,151181,151183,151185,151188],{"class":37,"line":110},[35,151179,151180],{"class":359},"s2 ",[35,151182,544],{"class":495},[35,151184,150136],{"class":359},[35,151186,151187],{"class":306},"\"小红\"",[35,151189,505],{"class":359},[35,151191,151192],{"class":37,"line":119},[35,151193,141],{"emptyLinePlaceholder":140},[35,151195,151196,151198],{"class":37,"line":128},[35,151197,30741],{"class":58},[35,151199,151200],{"class":359},"(s1.school)\n",[35,151202,151203,151205],{"class":37,"line":137},[35,151204,30741],{"class":58},[35,151206,151207],{"class":359},"(s2.school)\n",[35,151209,151210,151212],{"class":37,"line":144},[35,151211,30741],{"class":58},[35,151213,151214],{"class":359},"(Student.school)\n",[21,151216,151217],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[438,151219,151221],{"id":151220},"_1113-类方法和静态方法","11.13 类方法和静态方法",[465,151223,151225],{"id":151224},"_11131-类方法","11.13.1 类方法",[21,151227,151228,151229,151232,151233,28711],{},"类方法使用 ",[32,151230,151231],{},"@classmethod","，第一个参数通常是 ",[32,151234,151235],{},"cls",[25,151237,151239],{"className":30704,"code":151238,"language":30706,"meta":30,"style":30},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[32,151240,151241,151249,151257,151261,151269,151279,151289,151293,151297],{"__ignoreMap":30},[35,151242,151243,151245,151247],{"class":37,"line":38},[35,151244,15028],{"class":495},[35,151246,8232],{"class":48},[35,151248,4073],{"class":359},[35,151250,151251,151253,151255],{"class":37,"line":45},[35,151252,151127],{"class":359},[35,151254,544],{"class":495},[35,151256,151132],{"class":306},[35,151258,151259],{"class":37,"line":55},[35,151260,141],{"emptyLinePlaceholder":140},[35,151262,151263,151266],{"class":37,"line":65},[35,151264,151265],{"class":48},"    @",[35,151267,151268],{"class":58},"classmethod\n",[35,151270,151271,151273,151276],{"class":37,"line":74},[35,151272,31127],{"class":495},[35,151274,151275],{"class":48}," get_school",[35,151277,151278],{"class":359},"(cls):\n",[35,151280,151281,151283,151286],{"class":37,"line":83},[35,151282,15086],{"class":495},[35,151284,151285],{"class":58}," cls",[35,151287,151288],{"class":359},".school\n",[35,151290,151291],{"class":37,"line":92},[35,151292,141],{"emptyLinePlaceholder":140},[35,151294,151295],{"class":37,"line":101},[35,151296,141],{"emptyLinePlaceholder":140},[35,151298,151299,151301],{"class":37,"line":110},[35,151300,30741],{"class":58},[35,151302,151303],{"class":359},"(Student.get_school())\n",[465,151305,151307],{"id":151306},"_11132-静态方法","11.13.2 静态方法",[21,151309,151310,151311,151314],{},"静态方法使用 ",[32,151312,151313],{},"@staticmethod","，不需要访问实例和类。",[25,151316,151318],{"className":30704,"code":151317,"language":30706,"meta":30,"style":30},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[32,151319,151320,151329,151336,151345,151356,151360,151364],{"__ignoreMap":30},[35,151321,151322,151324,151327],{"class":37,"line":38},[35,151323,15028],{"class":495},[35,151325,151326],{"class":48}," MathUtils",[35,151328,4073],{"class":359},[35,151330,151331,151333],{"class":37,"line":45},[35,151332,151265],{"class":48},[35,151334,151335],{"class":58},"staticmethod\n",[35,151337,151338,151340,151342],{"class":37,"line":55},[35,151339,31127],{"class":495},[35,151341,5543],{"class":48},[35,151343,151344],{"class":359},"(a, b):\n",[35,151346,151347,151349,151351,151353],{"class":37,"line":65},[35,151348,15086],{"class":495},[35,151350,11203],{"class":359},[35,151352,975],{"class":495},[35,151354,151355],{"class":359}," b\n",[35,151357,151358],{"class":37,"line":74},[35,151359,141],{"emptyLinePlaceholder":140},[35,151361,151362],{"class":37,"line":83},[35,151363,141],{"emptyLinePlaceholder":140},[35,151365,151366,151368,151371,151373,151375,151377],{"class":37,"line":92},[35,151367,30741],{"class":58},[35,151369,151370],{"class":359},"(MathUtils.add(",[35,151372,713],{"class":58},[35,151374,12769],{"class":359},[35,151376,574],{"class":58},[35,151378,30823],{"class":359},[21,151380,151381],{},"静态方法本质上是放在类命名空间里的普通函数。",[438,151383,151385],{"id":151384},"_1114-dataclass","11.14 dataclass",[21,151387,151388,151391],{},[32,151389,151390],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[25,151393,151395],{"className":30704,"code":151394,"language":30706,"meta":30,"style":30},"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",[32,151396,151397,151409,151413,151417,151422,151430,151438,151446,151454,151458,151462,151482],{"__ignoreMap":30},[35,151398,151399,151401,151404,151406],{"class":37,"line":38},[35,151400,31063],{"class":495},[35,151402,151403],{"class":359}," dataclasses ",[35,151405,30718],{"class":495},[35,151407,151408],{"class":359}," dataclass\n",[35,151410,151411],{"class":37,"line":45},[35,151412,141],{"emptyLinePlaceholder":140},[35,151414,151415],{"class":37,"line":55},[35,151416,141],{"emptyLinePlaceholder":140},[35,151418,151419],{"class":37,"line":65},[35,151420,151421],{"class":48},"@dataclass\n",[35,151423,151424,151426,151428],{"class":37,"line":74},[35,151425,15028],{"class":495},[35,151427,8232],{"class":48},[35,151429,4073],{"class":359},[35,151431,151432,151435],{"class":37,"line":83},[35,151433,151434],{"class":359},"    name: ",[35,151436,151437],{"class":58},"str\n",[35,151439,151440,151443],{"class":37,"line":92},[35,151441,151442],{"class":359},"    age: ",[35,151444,151445],{"class":58},"int\n",[35,151447,151448,151451],{"class":37,"line":101},[35,151449,151450],{"class":359},"    score: ",[35,151452,151453],{"class":58},"float\n",[35,151455,151456],{"class":37,"line":110},[35,151457,141],{"emptyLinePlaceholder":140},[35,151459,151460],{"class":37,"line":119},[35,151461,141],{"emptyLinePlaceholder":140},[35,151463,151464,151466,151468,151470,151472,151474,151476,151478,151480],{"class":37,"line":128},[35,151465,149732],{"class":359},[35,151467,544],{"class":495},[35,151469,150136],{"class":359},[35,151471,150139],{"class":306},[35,151473,12769],{"class":359},[35,151475,1144],{"class":58},[35,151477,12769],{"class":359},[35,151479,1483],{"class":58},[35,151481,505],{"class":359},[35,151483,151484,151486],{"class":37,"line":137},[35,151485,30741],{"class":58},[35,151487,150293],{"class":359},[21,151489,151490,151491,708,151493,151496],{},"它会自动生成 ",[32,151492,31155],{},[32,151494,151495],{},"__repr__"," 等方法。适合数据模型类。",[438,151498,151500],{"id":151499},"_1115-小案例学生类","11.15 小案例：学生类",[25,151502,151504],{"className":30704,"code":151503,"language":30706,"meta":30,"style":30},"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",[32,151505,151506,151514,151523,151535,151545,151555,151565,151569,151578,151591,151595,151604,151610,151622,151634,151646,151658,151662,151666,151672,151682,151691,151701,151709,151717,151726,151730,151734,151742,151778,151782,151786,151811,151818],{"__ignoreMap":30},[35,151507,151508,151510,151512],{"class":37,"line":38},[35,151509,15028],{"class":495},[35,151511,8232],{"class":48},[35,151513,4073],{"class":359},[35,151515,151516,151518,151520],{"class":37,"line":45},[35,151517,31127],{"class":495},[35,151519,31130],{"class":58},[35,151521,151522],{"class":359},"(self, student_id, name, age, score):\n",[35,151524,151525,151527,151530,151532],{"class":37,"line":55},[35,151526,31171],{"class":58},[35,151528,151529],{"class":359},".student_id ",[35,151531,544],{"class":495},[35,151533,151534],{"class":359}," student_id\n",[35,151536,151537,151539,151541,151543],{"class":37,"line":65},[35,151538,31171],{"class":58},[35,151540,150041],{"class":359},[35,151542,544],{"class":495},[35,151544,150046],{"class":359},[35,151546,151547,151549,151551,151553],{"class":37,"line":74},[35,151548,31171],{"class":58},[35,151550,150053],{"class":359},[35,151552,544],{"class":495},[35,151554,150058],{"class":359},[35,151556,151557,151559,151561,151563],{"class":37,"line":83},[35,151558,31171],{"class":58},[35,151560,150065],{"class":359},[35,151562,544],{"class":495},[35,151564,1940],{"class":359},[35,151566,151567],{"class":37,"line":92},[35,151568,141],{"emptyLinePlaceholder":140},[35,151570,151571,151573,151576],{"class":37,"line":101},[35,151572,31127],{"class":495},[35,151574,151575],{"class":48}," is_passed",[35,151577,31133],{"class":359},[35,151579,151580,151582,151584,151586,151588],{"class":37,"line":110},[35,151581,15086],{"class":495},[35,151583,39199],{"class":58},[35,151585,150065],{"class":359},[35,151587,2060],{"class":495},[35,151589,151590],{"class":58}," 60\n",[35,151592,151593],{"class":37,"line":119},[35,151594,141],{"emptyLinePlaceholder":140},[35,151596,151597,151599,151602],{"class":37,"line":128},[35,151598,31127],{"class":495},[35,151600,151601],{"class":48}," to_dict",[35,151603,31133],{"class":359},[35,151605,151606,151608],{"class":37,"line":137},[35,151607,15086],{"class":495},[35,151609,15906],{"class":359},[35,151611,151612,151615,151617,151619],{"class":37,"line":144},[35,151613,151614],{"class":306},"            \"student_id\"",[35,151616,51763],{"class":359},[35,151618,31149],{"class":58},[35,151620,151621],{"class":359},".student_id,\n",[35,151623,151624,151627,151629,151631],{"class":37,"line":150},[35,151625,151626],{"class":306},"            \"name\"",[35,151628,51763],{"class":359},[35,151630,31149],{"class":58},[35,151632,151633],{"class":359},".name,\n",[35,151635,151636,151639,151641,151643],{"class":37,"line":159},[35,151637,151638],{"class":306},"            \"age\"",[35,151640,51763],{"class":359},[35,151642,31149],{"class":58},[35,151644,151645],{"class":359},".age,\n",[35,151647,151648,151651,151653,151655],{"class":37,"line":168},[35,151649,151650],{"class":306},"            \"score\"",[35,151652,51763],{"class":359},[35,151654,31149],{"class":58},[35,151656,151657],{"class":359},".score,\n",[35,151659,151660],{"class":37,"line":177},[35,151661,2869],{"class":359},[35,151663,151664],{"class":37,"line":182},[35,151665,141],{"emptyLinePlaceholder":140},[35,151667,151668,151670],{"class":37,"line":188},[35,151669,151265],{"class":48},[35,151671,151268],{"class":58},[35,151673,151674,151676,151679],{"class":37,"line":197},[35,151675,31127],{"class":495},[35,151677,151678],{"class":48}," from_dict",[35,151680,151681],{"class":359},"(cls, data):\n",[35,151683,151684,151686,151688],{"class":37,"line":206},[35,151685,15086],{"class":495},[35,151687,151285],{"class":58},[35,151689,151690],{"class":359},"(\n",[35,151692,151693,151696,151699],{"class":37,"line":215},[35,151694,151695],{"class":359},"            data[",[35,151697,151698],{"class":306},"\"student_id\"",[35,151700,88161],{"class":359},[35,151702,151703,151705,151707],{"class":37,"line":224},[35,151704,151695],{"class":359},[35,151706,63005],{"class":306},[35,151708,88161],{"class":359},[35,151710,151711,151713,151715],{"class":37,"line":233},[35,151712,151695],{"class":359},[35,151714,69450],{"class":306},[35,151716,88161],{"class":359},[35,151718,151719,151721,151724],{"class":37,"line":238},[35,151720,151695],{"class":359},[35,151722,151723],{"class":306},"\"score\"",[35,151725,88161],{"class":359},[35,151727,151728],{"class":37,"line":244},[35,151729,38452],{"class":359},[35,151731,151732],{"class":37,"line":253},[35,151733,141],{"emptyLinePlaceholder":140},[35,151735,151736,151738,151740],{"class":37,"line":262},[35,151737,31127],{"class":495},[35,151739,150232],{"class":58},[35,151741,31133],{"class":359},[35,151743,151744,151746,151748,151750,151752,151755,151757,151760,151762,151764,151766,151768,151770,151772,151774,151776],{"class":37,"line":271},[35,151745,15086],{"class":495},[35,151747,150241],{"class":495},[35,151749,747],{"class":306},[35,151751,149703],{"class":58},[35,151753,151754],{"class":359},".student_id",[35,151756,1440],{"class":58},[35,151758,151759],{"class":58}," {self",[35,151761,80626],{"class":359},[35,151763,1440],{"class":58},[35,151765,151759],{"class":58},[35,151767,80638],{"class":359},[35,151769,1440],{"class":58},[35,151771,151759],{"class":58},[35,151773,150113],{"class":359},[35,151775,1440],{"class":58},[35,151777,25465],{"class":306},[35,151779,151780],{"class":37,"line":280},[35,151781,141],{"emptyLinePlaceholder":140},[35,151783,151784],{"class":37,"line":289},[35,151785,141],{"emptyLinePlaceholder":140},[35,151787,151788,151790,151792,151794,151797,151799,151801,151803,151805,151807,151809],{"class":37,"line":294},[35,151789,149732],{"class":359},[35,151791,544],{"class":495},[35,151793,150136],{"class":359},[35,151795,151796],{"class":306},"\"001\"",[35,151798,12769],{"class":359},[35,151800,150139],{"class":306},[35,151802,12769],{"class":359},[35,151804,1144],{"class":58},[35,151806,12769],{"class":359},[35,151808,1483],{"class":58},[35,151810,505],{"class":359},[35,151812,151813,151815],{"class":37,"line":300},[35,151814,30741],{"class":58},[35,151816,151817],{"class":359},"(student.is_passed())\n",[35,151819,151820,151822],{"class":37,"line":313},[35,151821,30741],{"class":58},[35,151823,151824],{"class":359},"(student.to_dict())\n",[21,151826,151827,101343,151830,151833],{},[32,151828,151829],{},"to_dict()",[32,151831,151832],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[438,151835,151837],{"id":151836},"_1116-易错点","11.16 易错点",[14,151839,151840,151846,151852,151857,151860,151863],{},[17,151841,151842,151843,28711],{},"类名推荐使用大驼峰，如 ",[32,151844,151845],{},"StudentManager",[17,151847,151848,151849,151851],{},"方法第一个参数必须写 ",[32,151850,31149],{},"，调用时不用传。",[17,151853,151854,151856],{},[32,151855,31155],{}," 不是普通方法，它在创建对象时自动执行。",[17,151858,151859],{},"私有属性不是绝对安全，只是约定和名称改写。",[17,151861,151862],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[17,151864,151865],{},"类中方法太多时，说明职责可能过重。",[438,151867,151869],{"id":151868},"_1117-本章练习","11.17 本章练习",[14,151871,151872,151878,151884,151889,151902],{},[17,151873,151874,151875,151877],{},"定义 ",[32,151876,149819],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[17,151879,151874,151880,151883],{},[32,151881,151882],{},"Account"," 类，实现存款、取款、查询余额。",[17,151885,151874,151886,151888],{},[32,151887,17560],{}," 类，计算圆的周长和面积。",[17,151890,151874,151891,708,151894,151897,151898,151901],{},[32,151892,151893],{},"Dog",[32,151895,151896],{},"Cat"," 类，并用同一个函数调用它们的 ",[32,151899,151900],{},"speak()"," 方法。",[17,151903,104688,151904,151906,151907,28711],{},[32,151905,151390],{}," 定义一个商品类 ",[32,151908,151909],{},"Product",[416,151911,151912],{},"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":30,"searchDepth":45,"depth":45,"links":151914},[151915,151916,151917,151918,151919,151920,151922,151923,151924,151925,151926,151927,151928,151932,151933,151934,151935],{"id":149583,"depth":45,"text":149584},{"id":149766,"depth":45,"text":149767},{"id":149830,"depth":45,"text":149831},{"id":149907,"depth":45,"text":149908},{"id":150006,"depth":45,"text":150007},{"id":150170,"depth":45,"text":151921},"11.6 str",{"id":150296,"depth":45,"text":150297},{"id":150562,"depth":45,"text":150563},{"id":150676,"depth":45,"text":150677},{"id":150831,"depth":45,"text":150832},{"id":150955,"depth":45,"text":150956},{"id":151071,"depth":45,"text":151072},{"id":151220,"depth":45,"text":151221,"children":151929},[151930,151931],{"id":151224,"depth":55,"text":151225},{"id":151306,"depth":55,"text":151307},{"id":151384,"depth":45,"text":151385},{"id":151499,"depth":45,"text":151500},{"id":151836,"depth":45,"text":151837},{"id":151868,"depth":45,"text":151869},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149575,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151942,"title":151943,"body":151944,"description":421,"extension":422,"meta":155257,"navigation":140,"path":155258,"seo":155259,"stem":155260,"__hash__":155261},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151945,"toc":155233},[151946,151949,151953,151956,151959,151988,151991,151999,152003,152007,152010,152033,152036,152042,152046,153492,153495,153516,153520,153523,153535,153538,153722,153725,153851,153854,153858,153862,153998,154002,154088,154092,154174,154178,154215,154219,154408,154412,154415,154645,154649,154652,154833,154836,154840,154843,154849,154852,154878,154882,154885,154899,154902,154927,154930,154944,154947,154964,154967,154984,154987,155004,155008,155034,155038,155061,155065,155068,155070,155076,155078,155099,155102,155108,155114,155118,155121,155197,155200,155204,155230],[10,151947,151943],{"id":151948},"_12-综合案例与复习路线",[438,151950,151952],{"id":151951},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[21,151954,151955],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[21,151957,151958],{},"一个合格的入门综合项目最好覆盖：",[14,151960,151961,151964,151967,151970,151973,151976,151979,151982,151985],{},[17,151962,151963],{},"输入输出。",[17,151965,151966],{},"判断和循环。",[17,151968,151969],{},"函数拆分。",[17,151971,151972],{},"列表、字典等容器。",[17,151974,151975],{},"文件持久化。",[17,151977,151978],{},"异常处理。",[17,151980,151981],{},"模块拆分。",[17,151983,151984],{},"可选：面向对象。",[17,151986,151987],{},"可选：数据可视化。",[21,151989,151990],{},"本章整理两个方向：",[14,151992,151993,151996],{},[17,151994,151995],{},"学生管理系统。",[17,151997,151998],{},"销售数据统计和可视化。",[438,152000,152002],{"id":152001},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[465,152004,152006],{"id":152005},"_1221-需求","12.2.1 需求",[21,152008,152009],{},"实现一个命令行学生管理系统：",[14,152011,152012,152015,152018,152021,152024,152027,152030],{},[17,152013,152014],{},"添加学生。",[17,152016,152017],{},"删除学生。",[17,152019,152020],{},"修改学生。",[17,152022,152023],{},"查询学生。",[17,152025,152026],{},"显示所有学生。",[17,152028,152029],{},"保存到 JSON 文件。",[17,152031,152032],{},"程序启动时自动读取 JSON 文件。",[21,152034,152035],{},"学生字段：",[25,152037,152040],{"className":152038,"code":152039,"language":5521,"meta":30},[5519],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[32,152041,152039],{"__ignoreMap":30},[438,152043,152045],{"id":152044},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[25,152047,152049],{"className":30704,"code":152048,"language":30706,"meta":30,"style":30},"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",[32,152050,152051,152057,152067,152071,152085,152089,152093,152102,152114,152120,152124,152130,152161,152171,152178,152189,152195,152199,152203,152213,152244,152270,152274,152278,152287,152298,152309,152320,152331,152342,152353,152364,152368,152372,152382,152394,152410,152417,152424,152428,152432,152442,152450,152457,152470,152480,152491,152495,152499,152508,152516,152522,152534,152542,152553,152557,152561,152570,152586,152590,152597,152608,152613,152617,152633,152648,152663,152667,152672,152680,152688,152696,152704,152708,152713,152724,152728,152732,152741,152756,152766,152770,152782,152793,152797,152801,152806,152810,152821,152825,152829,152838,152853,152861,152865,152877,152887,152891,152895,152910,152923,152936,152940,152953,152965,152977,152981,152985,152996,153000,153004,153013,153028,153036,153040,153052,153062,153066,153070,153075,153079,153083,153093,153099,153121,153140,153159,153178,153183,153187,153191,153200,153208,153219,153223,153227,153253,153263,153268,153272,153276,153284,153294,153298,153306,153311,153327,153331,153345,153350,153364,153369,153382,153387,153400,153405,153418,153423,153436,153447,153451,153457,153468,153472,153476,153488],{"__ignoreMap":30},[35,152052,152053,152055],{"class":37,"line":38},[35,152054,30718],{"class":495},[35,152056,147342],{"class":359},[35,152058,152059,152061,152063,152065],{"class":37,"line":45},[35,152060,31063],{"class":495},[35,152062,108633],{"class":359},[35,152064,30718],{"class":495},[35,152066,108638],{"class":359},[35,152068,152069],{"class":37,"line":55},[35,152070,141],{"emptyLinePlaceholder":140},[35,152072,152073,152076,152078,152080,152083],{"class":37,"line":65},[35,152074,152075],{"class":58},"DATA_FILE",[35,152077,13898],{"class":495},[35,152079,108867],{"class":359},[35,152081,152082],{"class":306},"\"students.json\"",[35,152084,505],{"class":359},[35,152086,152087],{"class":37,"line":74},[35,152088,141],{"emptyLinePlaceholder":140},[35,152090,152091],{"class":37,"line":83},[35,152092,141],{"emptyLinePlaceholder":140},[35,152094,152095,152097,152100],{"class":37,"line":92},[35,152096,32273],{"class":495},[35,152098,152099],{"class":48}," load_students",[35,152101,32279],{"class":359},[35,152103,152104,152106,152108,152111],{"class":37,"line":101},[35,152105,3435],{"class":495},[35,152107,39256],{"class":495},[35,152109,152110],{"class":58}," DATA_FILE",[35,152112,152113],{"class":359},".exists():\n",[35,152115,152116,152118],{"class":37,"line":110},[35,152117,15086],{"class":495},[35,152119,52164],{"class":359},[35,152121,152122],{"class":37,"line":119},[35,152123,141],{"emptyLinePlaceholder":140},[35,152125,152126,152128],{"class":37,"line":128},[35,152127,126035],{"class":495},[35,152129,4073],{"class":359},[35,152131,152132,152135,152137,152139,152141,152143,152145,152147,152149,152151,152153,152155,152157,152159],{"class":37,"line":137},[35,152133,152134],{"class":495},"        with",[35,152136,147042],{"class":58},[35,152138,499],{"class":359},[35,152140,152075],{"class":58},[35,152142,12769],{"class":359},[35,152144,147052],{"class":306},[35,152146,12769],{"class":359},[35,152148,147057],{"class":5550},[35,152150,544],{"class":495},[35,152152,147062],{"class":306},[35,152154,14048],{"class":359},[35,152156,31709],{"class":495},[35,152158,148404],{"class":5550},[35,152160,4073],{"class":359},[35,152162,152163,152165,152167,152169],{"class":37,"line":144},[35,152164,16066],{"class":495},[35,152166,148415],{"class":359},[35,152168,45680],{"class":5550},[35,152170,505],{"class":359},[35,152172,152173,152175],{"class":37,"line":150},[35,152174,126063],{"class":495},[35,152176,152177],{"class":359}," json.JSONDecodeError:\n",[35,152179,152180,152182,152184,152187],{"class":37,"line":159},[35,152181,32777],{"class":58},[35,152183,499],{"class":359},[35,152185,152186],{"class":306},"\"数据文件格式错误，已使用空数据启动\"",[35,152188,505],{"class":359},[35,152190,152191,152193],{"class":37,"line":168},[35,152192,15086],{"class":495},[35,152194,52164],{"class":359},[35,152196,152197],{"class":37,"line":177},[35,152198,141],{"emptyLinePlaceholder":140},[35,152200,152201],{"class":37,"line":182},[35,152202,141],{"emptyLinePlaceholder":140},[35,152204,152205,152207,152210],{"class":37,"line":188},[35,152206,32273],{"class":495},[35,152208,152209],{"class":48}," save_students",[35,152211,152212],{"class":359},"(students):\n",[35,152214,152215,152217,152219,152221,152223,152225,152228,152230,152232,152234,152236,152238,152240,152242],{"class":37,"line":197},[35,152216,34504],{"class":495},[35,152218,147042],{"class":58},[35,152220,499],{"class":359},[35,152222,152075],{"class":58},[35,152224,12769],{"class":359},[35,152226,152227],{"class":306},"\"w\"",[35,152229,12769],{"class":359},[35,152231,147057],{"class":5550},[35,152233,544],{"class":495},[35,152235,147062],{"class":306},[35,152237,14048],{"class":359},[35,152239,31709],{"class":495},[35,152241,148404],{"class":5550},[35,152243,4073],{"class":359},[35,152245,152246,152249,152251,152253,152255,152257,152259,152261,152264,152266,152268],{"class":37,"line":206},[35,152247,152248],{"class":359},"        json.dump(students, ",[35,152250,45680],{"class":5550},[35,152252,12769],{"class":359},[35,152254,147388],{"class":5550},[35,152256,544],{"class":495},[35,152258,34313],{"class":58},[35,152260,12769],{"class":359},[35,152262,152263],{"class":5550},"indent",[35,152265,544],{"class":495},[35,152267,574],{"class":58},[35,152269,505],{"class":359},[35,152271,152272],{"class":37,"line":215},[35,152273,141],{"emptyLinePlaceholder":140},[35,152275,152276],{"class":37,"line":224},[35,152277,141],{"emptyLinePlaceholder":140},[35,152279,152280,152282,152285],{"class":37,"line":233},[35,152281,32273],{"class":495},[35,152283,152284],{"class":48}," show_menu",[35,152286,32279],{"class":359},[35,152288,152289,152291,152293,152296],{"class":37,"line":238},[35,152290,31625],{"class":58},[35,152292,499],{"class":359},[35,152294,152295],{"class":306},"\"====== 学生管理系统 ======\"",[35,152297,505],{"class":359},[35,152299,152300,152302,152304,152307],{"class":37,"line":244},[35,152301,31625],{"class":58},[35,152303,499],{"class":359},[35,152305,152306],{"class":306},"\"1. 添加学生\"",[35,152308,505],{"class":359},[35,152310,152311,152313,152315,152318],{"class":37,"line":253},[35,152312,31625],{"class":58},[35,152314,499],{"class":359},[35,152316,152317],{"class":306},"\"2. 删除学生\"",[35,152319,505],{"class":359},[35,152321,152322,152324,152326,152329],{"class":37,"line":262},[35,152323,31625],{"class":58},[35,152325,499],{"class":359},[35,152327,152328],{"class":306},"\"3. 修改学生\"",[35,152330,505],{"class":359},[35,152332,152333,152335,152337,152340],{"class":37,"line":271},[35,152334,31625],{"class":58},[35,152336,499],{"class":359},[35,152338,152339],{"class":306},"\"4. 查询学生\"",[35,152341,505],{"class":359},[35,152343,152344,152346,152348,152351],{"class":37,"line":280},[35,152345,31625],{"class":58},[35,152347,499],{"class":359},[35,152349,152350],{"class":306},"\"5. 显示所有学生\"",[35,152352,505],{"class":359},[35,152354,152355,152357,152359,152362],{"class":37,"line":289},[35,152356,31625],{"class":58},[35,152358,499],{"class":359},[35,152360,152361],{"class":306},"\"0. 退出系统\"",[35,152363,505],{"class":359},[35,152365,152366],{"class":37,"line":294},[35,152367,141],{"emptyLinePlaceholder":140},[35,152369,152370],{"class":37,"line":300},[35,152371,141],{"emptyLinePlaceholder":140},[35,152373,152374,152376,152379],{"class":37,"line":313},[35,152375,32273],{"class":495},[35,152377,152378],{"class":48}," find_student",[35,152380,152381],{"class":359},"(students, student_id):\n",[35,152383,152384,152386,152389,152391],{"class":37,"line":324},[35,152385,3535],{"class":495},[35,152387,152388],{"class":359}," student ",[35,152390,26374],{"class":495},[35,152392,152393],{"class":359}," students:\n",[35,152395,152396,152398,152401,152403,152405,152407],{"class":37,"line":2955},[35,152397,2837],{"class":495},[35,152399,152400],{"class":359}," student[",[35,152402,151698],{"class":306},[35,152404,4777],{"class":359},[35,152406,3283],{"class":495},[35,152408,152409],{"class":359}," student_id:\n",[35,152411,152412,152414],{"class":37,"line":8282},[35,152413,16066],{"class":495},[35,152415,152416],{"class":359}," student\n",[35,152418,152419,152421],{"class":37,"line":8306},[35,152420,4424],{"class":495},[35,152422,152423],{"class":58}," None\n",[35,152425,152426],{"class":37,"line":8311},[35,152427,141],{"emptyLinePlaceholder":140},[35,152429,152430],{"class":37,"line":8317},[35,152431,141],{"emptyLinePlaceholder":140},[35,152433,152434,152436,152439],{"class":37,"line":8344},[35,152435,32273],{"class":495},[35,152437,152438],{"class":48}," input_int",[35,152440,152441],{"class":359},"(prompt):\n",[35,152443,152444,152446,152448],{"class":37,"line":8349},[35,152445,2592],{"class":495},[35,152447,95617],{"class":58},[35,152449,4073],{"class":359},[35,152451,152452,152455],{"class":37,"line":8355},[35,152453,152454],{"class":495},"        try",[35,152456,4073],{"class":359},[35,152458,152459,152461,152463,152465,152467],{"class":37,"line":8367},[35,152460,16066],{"class":495},[35,152462,2723],{"class":58},[35,152464,499],{"class":359},[35,152466,54147],{"class":58},[35,152468,152469],{"class":359},"(prompt))\n",[35,152471,152472,152475,152478],{"class":37,"line":8379},[35,152473,152474],{"class":495},"        except",[35,152476,152477],{"class":58}," ValueError",[35,152479,4073],{"class":359},[35,152481,152482,152484,152486,152489],{"class":37,"line":8391},[35,152483,34976],{"class":58},[35,152485,499],{"class":359},[35,152487,152488],{"class":306},"\"请输入整数\"",[35,152490,505],{"class":359},[35,152492,152493],{"class":37,"line":10050},[35,152494,141],{"emptyLinePlaceholder":140},[35,152496,152497],{"class":37,"line":10075},[35,152498,141],{"emptyLinePlaceholder":140},[35,152500,152501,152503,152506],{"class":37,"line":10098},[35,152502,32273],{"class":495},[35,152504,152505],{"class":48}," input_float",[35,152507,152441],{"class":359},[35,152509,152510,152512,152514],{"class":37,"line":10122},[35,152511,2592],{"class":495},[35,152513,95617],{"class":58},[35,152515,4073],{"class":359},[35,152517,152518,152520],{"class":37,"line":10127},[35,152519,152454],{"class":495},[35,152521,4073],{"class":359},[35,152523,152524,152526,152528,152530,152532],{"class":37,"line":10132},[35,152525,16066],{"class":495},[35,152527,110119],{"class":58},[35,152529,499],{"class":359},[35,152531,54147],{"class":58},[35,152533,152469],{"class":359},[35,152535,152536,152538,152540],{"class":37,"line":10137},[35,152537,152474],{"class":495},[35,152539,152477],{"class":58},[35,152541,4073],{"class":359},[35,152543,152544,152546,152548,152551],{"class":37,"line":10146},[35,152545,34976],{"class":58},[35,152547,499],{"class":359},[35,152549,152550],{"class":306},"\"请输入数字\"",[35,152552,505],{"class":359},[35,152554,152555],{"class":37,"line":10151},[35,152556,141],{"emptyLinePlaceholder":140},[35,152558,152559],{"class":37,"line":10157},[35,152560,141],{"emptyLinePlaceholder":140},[35,152562,152563,152565,152568],{"class":37,"line":10178},[35,152564,32273],{"class":495},[35,152566,152567],{"class":48}," add_student",[35,152569,152212],{"class":359},[35,152571,152572,152575,152577,152579,152581,152584],{"class":37,"line":10184},[35,152573,152574],{"class":359},"    student_id ",[35,152576,544],{"class":495},[35,152578,60931],{"class":58},[35,152580,499],{"class":359},[35,152582,152583],{"class":306},"\"请输入学号:\"",[35,152585,505],{"class":359},[35,152587,152588],{"class":37,"line":10198},[35,152589,141],{"emptyLinePlaceholder":140},[35,152591,152592,152594],{"class":37,"line":10204},[35,152593,3435],{"class":495},[35,152595,152596],{"class":359}," find_student(students, student_id):\n",[35,152598,152599,152601,152603,152606],{"class":37,"line":10231},[35,152600,32777],{"class":58},[35,152602,499],{"class":359},[35,152604,152605],{"class":306},"\"学号已存在\"",[35,152607,505],{"class":359},[35,152609,152610],{"class":37,"line":10240},[35,152611,152612],{"class":495},"        return\n",[35,152614,152615],{"class":37,"line":10246},[35,152616,141],{"emptyLinePlaceholder":140},[35,152618,152619,152622,152624,152626,152628,152631],{"class":37,"line":10254},[35,152620,152621],{"class":359},"    name ",[35,152623,544],{"class":495},[35,152625,60931],{"class":58},[35,152627,499],{"class":359},[35,152629,152630],{"class":306},"\"请输入姓名:\"",[35,152632,505],{"class":359},[35,152634,152635,152638,152640,152643,152646],{"class":37,"line":10259},[35,152636,152637],{"class":359},"    age ",[35,152639,544],{"class":495},[35,152641,152642],{"class":359}," input_int(",[35,152644,152645],{"class":306},"\"请输入年龄:\"",[35,152647,505],{"class":359},[35,152649,152650,152653,152655,152658,152661],{"class":37,"line":16938},[35,152651,152652],{"class":359},"    score ",[35,152654,544],{"class":495},[35,152656,152657],{"class":359}," input_float(",[35,152659,152660],{"class":306},"\"请输入成绩:\"",[35,152662,505],{"class":359},[35,152664,152665],{"class":37,"line":16944},[35,152666,141],{"emptyLinePlaceholder":140},[35,152668,152669],{"class":37,"line":16967},[35,152670,152671],{"class":359},"    students.append({\n",[35,152673,152674,152677],{"class":37,"line":16973},[35,152675,152676],{"class":306},"        \"student_id\"",[35,152678,152679],{"class":359},": student_id,\n",[35,152681,152682,152685],{"class":37,"line":16996},[35,152683,152684],{"class":306},"        \"name\"",[35,152686,152687],{"class":359},": name,\n",[35,152689,152690,152693],{"class":37,"line":17010},[35,152691,152692],{"class":306},"        \"age\"",[35,152694,152695],{"class":359},": age,\n",[35,152697,152698,152701],{"class":37,"line":17030},[35,152699,152700],{"class":306},"        \"score\"",[35,152702,152703],{"class":359},": score,\n",[35,152705,152706],{"class":37,"line":17036},[35,152707,33787],{"class":359},[35,152709,152710],{"class":37,"line":17047},[35,152711,152712],{"class":359},"    save_students(students)\n",[35,152714,152715,152717,152719,152722],{"class":37,"line":17070},[35,152716,31625],{"class":58},[35,152718,499],{"class":359},[35,152720,152721],{"class":306},"\"添加成功\"",[35,152723,505],{"class":359},[35,152725,152726],{"class":37,"line":17092},[35,152727,141],{"emptyLinePlaceholder":140},[35,152729,152730],{"class":37,"line":17097},[35,152731,141],{"emptyLinePlaceholder":140},[35,152733,152734,152736,152739],{"class":37,"line":17103},[35,152735,32273],{"class":495},[35,152737,152738],{"class":48}," delete_student",[35,152740,152212],{"class":359},[35,152742,152743,152745,152747,152749,152751,152754],{"class":37,"line":17117},[35,152744,152574],{"class":359},[35,152746,544],{"class":495},[35,152748,60931],{"class":58},[35,152750,499],{"class":359},[35,152752,152753],{"class":306},"\"请输入要删除的学号:\"",[35,152755,505],{"class":359},[35,152757,152758,152761,152763],{"class":37,"line":17130},[35,152759,152760],{"class":359},"    student ",[35,152762,544],{"class":495},[35,152764,152765],{"class":359}," find_student(students, student_id)\n",[35,152767,152768],{"class":37,"line":17135},[35,152769,141],{"emptyLinePlaceholder":140},[35,152771,152772,152774,152776,152778,152780],{"class":37,"line":17149},[35,152773,3435],{"class":495},[35,152775,152388],{"class":359},[35,152777,39253],{"class":495},[35,152779,39259],{"class":58},[35,152781,4073],{"class":359},[35,152783,152784,152786,152788,152791],{"class":37,"line":17154},[35,152785,32777],{"class":58},[35,152787,499],{"class":359},[35,152789,152790],{"class":306},"\"学生不存在\"",[35,152792,505],{"class":359},[35,152794,152795],{"class":37,"line":17160},[35,152796,152612],{"class":495},[35,152798,152799],{"class":37,"line":17165},[35,152800,141],{"emptyLinePlaceholder":140},[35,152802,152803],{"class":37,"line":17179},[35,152804,152805],{"class":359},"    students.remove(student)\n",[35,152807,152808],{"class":37,"line":17184},[35,152809,152712],{"class":359},[35,152811,152812,152814,152816,152819],{"class":37,"line":17189},[35,152813,31625],{"class":58},[35,152815,499],{"class":359},[35,152817,152818],{"class":306},"\"删除成功\"",[35,152820,505],{"class":359},[35,152822,152823],{"class":37,"line":17203},[35,152824,141],{"emptyLinePlaceholder":140},[35,152826,152827],{"class":37,"line":17215},[35,152828,141],{"emptyLinePlaceholder":140},[35,152830,152831,152833,152836],{"class":37,"line":17220},[35,152832,32273],{"class":495},[35,152834,152835],{"class":48}," update_student",[35,152837,152212],{"class":359},[35,152839,152840,152842,152844,152846,152848,152851],{"class":37,"line":17233},[35,152841,152574],{"class":359},[35,152843,544],{"class":495},[35,152845,60931],{"class":58},[35,152847,499],{"class":359},[35,152849,152850],{"class":306},"\"请输入要修改的学号:\"",[35,152852,505],{"class":359},[35,152854,152855,152857,152859],{"class":37,"line":17238},[35,152856,152760],{"class":359},[35,152858,544],{"class":495},[35,152860,152765],{"class":359},[35,152862,152863],{"class":37,"line":17243},[35,152864,141],{"emptyLinePlaceholder":140},[35,152866,152867,152869,152871,152873,152875],{"class":37,"line":17248},[35,152868,3435],{"class":495},[35,152870,152388],{"class":359},[35,152872,39253],{"class":495},[35,152874,39259],{"class":58},[35,152876,4073],{"class":359},[35,152878,152879,152881,152883,152885],{"class":37,"line":17261},[35,152880,32777],{"class":58},[35,152882,499],{"class":359},[35,152884,152790],{"class":306},[35,152886,505],{"class":359},[35,152888,152889],{"class":37,"line":17266},[35,152890,152612],{"class":495},[35,152892,152893],{"class":37,"line":32959},[35,152894,141],{"emptyLinePlaceholder":140},[35,152896,152897,152899,152901,152903,152905,152908],{"class":37,"line":32965},[35,152898,152621],{"class":359},[35,152900,544],{"class":495},[35,152902,60931],{"class":58},[35,152904,499],{"class":359},[35,152906,152907],{"class":306},"\"请输入新姓名:\"",[35,152909,505],{"class":359},[35,152911,152912,152914,152916,152918,152921],{"class":37,"line":32971},[35,152913,152637],{"class":359},[35,152915,544],{"class":495},[35,152917,152642],{"class":359},[35,152919,152920],{"class":306},"\"请输入新年龄:\"",[35,152922,505],{"class":359},[35,152924,152925,152927,152929,152931,152934],{"class":37,"line":32977},[35,152926,152652],{"class":359},[35,152928,544],{"class":495},[35,152930,152657],{"class":359},[35,152932,152933],{"class":306},"\"请输入新成绩:\"",[35,152935,505],{"class":359},[35,152937,152938],{"class":37,"line":32983},[35,152939,141],{"emptyLinePlaceholder":140},[35,152941,152942,152945,152947,152949,152951],{"class":37,"line":32994},[35,152943,152944],{"class":359},"    student[",[35,152946,63005],{"class":306},[35,152948,4777],{"class":359},[35,152950,544],{"class":495},[35,152952,150046],{"class":359},[35,152954,152955,152957,152959,152961,152963],{"class":37,"line":33000},[35,152956,152944],{"class":359},[35,152958,69450],{"class":306},[35,152960,4777],{"class":359},[35,152962,544],{"class":495},[35,152964,150058],{"class":359},[35,152966,152967,152969,152971,152973,152975],{"class":37,"line":33020},[35,152968,152944],{"class":359},[35,152970,151723],{"class":306},[35,152972,4777],{"class":359},[35,152974,544],{"class":495},[35,152976,1940],{"class":359},[35,152978,152979],{"class":37,"line":33026},[35,152980,141],{"emptyLinePlaceholder":140},[35,152982,152983],{"class":37,"line":33037},[35,152984,152712],{"class":359},[35,152986,152987,152989,152991,152994],{"class":37,"line":33043},[35,152988,31625],{"class":58},[35,152990,499],{"class":359},[35,152992,152993],{"class":306},"\"修改成功\"",[35,152995,505],{"class":359},[35,152997,152998],{"class":37,"line":33049},[35,152999,141],{"emptyLinePlaceholder":140},[35,153001,153002],{"class":37,"line":33055},[35,153003,141],{"emptyLinePlaceholder":140},[35,153005,153006,153008,153011],{"class":37,"line":33061},[35,153007,32273],{"class":495},[35,153009,153010],{"class":48}," query_student",[35,153012,152212],{"class":359},[35,153014,153015,153017,153019,153021,153023,153026],{"class":37,"line":33067},[35,153016,152574],{"class":359},[35,153018,544],{"class":495},[35,153020,60931],{"class":58},[35,153022,499],{"class":359},[35,153024,153025],{"class":306},"\"请输入要查询的学号:\"",[35,153027,505],{"class":359},[35,153029,153030,153032,153034],{"class":37,"line":33073},[35,153031,152760],{"class":359},[35,153033,544],{"class":495},[35,153035,152765],{"class":359},[35,153037,153038],{"class":37,"line":33079},[35,153039,141],{"emptyLinePlaceholder":140},[35,153041,153042,153044,153046,153048,153050],{"class":37,"line":33099},[35,153043,3435],{"class":495},[35,153045,152388],{"class":359},[35,153047,39253],{"class":495},[35,153049,39259],{"class":58},[35,153051,4073],{"class":359},[35,153053,153054,153056,153058,153060],{"class":37,"line":33105},[35,153055,32777],{"class":58},[35,153057,499],{"class":359},[35,153059,152790],{"class":306},[35,153061,505],{"class":359},[35,153063,153064],{"class":37,"line":33121},[35,153065,152612],{"class":495},[35,153067,153068],{"class":37,"line":33127},[35,153069,141],{"emptyLinePlaceholder":140},[35,153071,153072],{"class":37,"line":33141},[35,153073,153074],{"class":359},"    print_student(student)\n",[35,153076,153077],{"class":37,"line":33147},[35,153078,141],{"emptyLinePlaceholder":140},[35,153080,153081],{"class":37,"line":33162},[35,153082,141],{"emptyLinePlaceholder":140},[35,153084,153085,153087,153090],{"class":37,"line":33168},[35,153086,32273],{"class":495},[35,153088,153089],{"class":48}," print_student",[35,153091,153092],{"class":359},"(student):\n",[35,153094,153095,153097],{"class":37,"line":33177},[35,153096,31625],{"class":58},[35,153098,151690],{"class":359},[35,153100,153101,153104,153106,153108,153111,153114,153116,153119],{"class":37,"line":33183},[35,153102,153103],{"class":495},"        f",[35,153105,747],{"class":306},[35,153107,1390],{"class":58},[35,153109,153110],{"class":359},"student[",[35,153112,153113],{"class":306},"'student_id'",[35,153115,1434],{"class":359},[35,153117,153118],{"class":58},"}\\t",[35,153120,25465],{"class":306},[35,153122,153123,153125,153127,153129,153131,153134,153136,153138],{"class":37,"line":33192},[35,153124,153103],{"class":495},[35,153126,747],{"class":306},[35,153128,1390],{"class":58},[35,153130,153110],{"class":359},[35,153132,153133],{"class":306},"'name'",[35,153135,1434],{"class":359},[35,153137,153118],{"class":58},[35,153139,25465],{"class":306},[35,153141,153142,153144,153146,153148,153150,153153,153155,153157],{"class":37,"line":33198},[35,153143,153103],{"class":495},[35,153145,747],{"class":306},[35,153147,1390],{"class":58},[35,153149,153110],{"class":359},[35,153151,153152],{"class":306},"'age'",[35,153154,1434],{"class":359},[35,153156,153118],{"class":58},[35,153158,25465],{"class":306},[35,153160,153161,153163,153165,153167,153169,153172,153174,153176],{"class":37,"line":33204},[35,153162,153103],{"class":495},[35,153164,747],{"class":306},[35,153166,1390],{"class":58},[35,153168,153110],{"class":359},[35,153170,153171],{"class":306},"'score'",[35,153173,1434],{"class":359},[35,153175,1440],{"class":58},[35,153177,25465],{"class":306},[35,153179,153180],{"class":37,"line":33213},[35,153181,153182],{"class":359},"    )\n",[35,153184,153185],{"class":37,"line":33219},[35,153186,141],{"emptyLinePlaceholder":140},[35,153188,153189],{"class":37,"line":33230},[35,153190,141],{"emptyLinePlaceholder":140},[35,153192,153193,153195,153198],{"class":37,"line":33236},[35,153194,32273],{"class":495},[35,153196,153197],{"class":48}," show_all_students",[35,153199,152212],{"class":359},[35,153201,153202,153204,153206],{"class":37,"line":33255},[35,153203,3435],{"class":495},[35,153205,39256],{"class":495},[35,153207,152393],{"class":359},[35,153209,153210,153212,153214,153217],{"class":37,"line":33261},[35,153211,32777],{"class":58},[35,153213,499],{"class":359},[35,153215,153216],{"class":306},"\"暂无学生\"",[35,153218,505],{"class":359},[35,153220,153221],{"class":37,"line":33272},[35,153222,152612],{"class":495},[35,153224,153225],{"class":37,"line":33278},[35,153226,141],{"emptyLinePlaceholder":140},[35,153228,153229,153231,153233,153236,153238,153241,153243,153246,153248,153251],{"class":37,"line":33298},[35,153230,31625],{"class":58},[35,153232,499],{"class":359},[35,153234,153235],{"class":306},"\"学号",[35,153237,1595],{"class":58},[35,153239,153240],{"class":306},"姓名",[35,153242,1595],{"class":58},[35,153244,153245],{"class":306},"年龄",[35,153247,1595],{"class":58},[35,153249,153250],{"class":306},"成绩\"",[35,153252,505],{"class":359},[35,153254,153255,153257,153259,153261],{"class":37,"line":33314},[35,153256,3535],{"class":495},[35,153258,152388],{"class":359},[35,153260,26374],{"class":495},[35,153262,152393],{"class":359},[35,153264,153265],{"class":37,"line":33320},[35,153266,153267],{"class":359},"        print_student(student)\n",[35,153269,153270],{"class":37,"line":33334},[35,153271,141],{"emptyLinePlaceholder":140},[35,153273,153274],{"class":37,"line":33340},[35,153275,141],{"emptyLinePlaceholder":140},[35,153277,153278,153280,153282],{"class":37,"line":33346},[35,153279,32273],{"class":495},[35,153281,2314],{"class":48},[35,153283,32279],{"class":359},[35,153285,153286,153289,153291],{"class":37,"line":33357},[35,153287,153288],{"class":359},"    students ",[35,153290,544],{"class":495},[35,153292,153293],{"class":359}," load_students()\n",[35,153295,153296],{"class":37,"line":33363},[35,153297,141],{"emptyLinePlaceholder":140},[35,153299,153300,153302,153304],{"class":37,"line":33369},[35,153301,2592],{"class":495},[35,153303,95617],{"class":58},[35,153305,4073],{"class":359},[35,153307,153308],{"class":37,"line":33379},[35,153309,153310],{"class":359},"        show_menu()\n",[35,153312,153313,153316,153318,153320,153322,153325],{"class":37,"line":33385},[35,153314,153315],{"class":359},"        choice ",[35,153317,544],{"class":495},[35,153319,60931],{"class":58},[35,153321,499],{"class":359},[35,153323,153324],{"class":306},"\"请输入操作:\"",[35,153326,505],{"class":359},[35,153328,153329],{"class":37,"line":33396},[35,153330,141],{"emptyLinePlaceholder":140},[35,153332,153333,153335,153338,153340,153343],{"class":37,"line":33402},[35,153334,2837],{"class":495},[35,153336,153337],{"class":359}," choice ",[35,153339,3283],{"class":495},[35,153341,153342],{"class":306}," \"1\"",[35,153344,4073],{"class":359},[35,153346,153347],{"class":37,"line":33412},[35,153348,153349],{"class":359},"            add_student(students)\n",[35,153351,153352,153355,153357,153359,153362],{"class":37,"line":33417},[35,153353,153354],{"class":495},"        elif",[35,153356,153337],{"class":359},[35,153358,3283],{"class":495},[35,153360,153361],{"class":306}," \"2\"",[35,153363,4073],{"class":359},[35,153365,153366],{"class":37,"line":33423},[35,153367,153368],{"class":359},"            delete_student(students)\n",[35,153370,153371,153373,153375,153377,153380],{"class":37,"line":33472},[35,153372,153354],{"class":495},[35,153374,153337],{"class":359},[35,153376,3283],{"class":495},[35,153378,153379],{"class":306}," \"3\"",[35,153381,4073],{"class":359},[35,153383,153384],{"class":37,"line":33519},[35,153385,153386],{"class":359},"            update_student(students)\n",[35,153388,153389,153391,153393,153395,153398],{"class":37,"line":33524},[35,153390,153354],{"class":495},[35,153392,153337],{"class":359},[35,153394,3283],{"class":495},[35,153396,153397],{"class":306}," \"4\"",[35,153399,4073],{"class":359},[35,153401,153402],{"class":37,"line":33530},[35,153403,153404],{"class":359},"            query_student(students)\n",[35,153406,153407,153409,153411,153413,153416],{"class":37,"line":33549},[35,153408,153354],{"class":495},[35,153410,153337],{"class":359},[35,153412,3283],{"class":495},[35,153414,153415],{"class":306}," \"5\"",[35,153417,4073],{"class":359},[35,153419,153420],{"class":37,"line":33555},[35,153421,153422],{"class":359},"            show_all_students(students)\n",[35,153424,153425,153427,153429,153431,153434],{"class":37,"line":33575},[35,153426,153354],{"class":495},[35,153428,153337],{"class":359},[35,153430,3283],{"class":495},[35,153432,153433],{"class":306}," \"0\"",[35,153435,4073],{"class":359},[35,153437,153438,153440,153442,153445],{"class":37,"line":33581},[35,153439,34976],{"class":58},[35,153441,499],{"class":359},[35,153443,153444],{"class":306},"\"退出系统\"",[35,153446,505],{"class":359},[35,153448,153449],{"class":37,"line":33587},[35,153450,115420],{"class":495},[35,153452,153453,153455],{"class":37,"line":33597},[35,153454,2874],{"class":495},[35,153456,4073],{"class":359},[35,153458,153459,153461,153463,153466],{"class":37,"line":33602},[35,153460,34976],{"class":58},[35,153462,499],{"class":359},[35,153464,153465],{"class":306},"\"输入错误\"",[35,153467,505],{"class":359},[35,153469,153470],{"class":37,"line":33608},[35,153471,141],{"emptyLinePlaceholder":140},[35,153473,153474],{"class":37,"line":33624},[35,153475,141],{"emptyLinePlaceholder":140},[35,153477,153478,153480,153482,153484,153486],{"class":37,"line":33669},[35,153479,1892],{"class":495},[35,153481,31546],{"class":58},[35,153483,101881],{"class":495},[35,153485,101884],{"class":306},[35,153487,4073],{"class":359},[35,153489,153490],{"class":37,"line":33675},[35,153491,101891],{"class":359},[21,153493,153494],{},"这个项目串联了：",[14,153496,153497,153500,153503,153506,153509,153511],{},[17,153498,153499],{},"菜单循环。",[17,153501,153502],{},"函数封装。",[17,153504,153505],{},"列表字典。",[17,153507,153508],{},"JSON 读写。",[17,153510,151978],{},[17,153512,153513,28711],{},[32,153514,153515],{},"if __name__ == \"__main__\"",[438,153517,153519],{"id":153518},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[21,153521,153522],{},"可以进一步拆成两个类：",[14,153524,153525,153530],{},[17,153526,153527,153529],{},[32,153528,149819],{},"：表示单个学生。",[17,153531,153532,153534],{},[32,153533,151845],{},"：负责学生增删改查和文件保存。",[21,153536,153537],{},"示意代码：",[25,153539,153541],{"className":30704,"code":153540,"language":30706,"meta":30,"style":30},"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",[32,153542,153543,153553,153557,153561,153565,153573,153580,153586,153592,153598,153602,153610,153616,153626,153636,153646,153656,153660,153664,153670,153678,153686,153694,153702,153710,153718],{"__ignoreMap":30},[35,153544,153545,153547,153549,153551],{"class":37,"line":38},[35,153546,31063],{"class":495},[35,153548,151403],{"class":359},[35,153550,30718],{"class":495},[35,153552,151408],{"class":359},[35,153554,153555],{"class":37,"line":45},[35,153556,141],{"emptyLinePlaceholder":140},[35,153558,153559],{"class":37,"line":55},[35,153560,141],{"emptyLinePlaceholder":140},[35,153562,153563],{"class":37,"line":65},[35,153564,151421],{"class":48},[35,153566,153567,153569,153571],{"class":37,"line":74},[35,153568,15028],{"class":495},[35,153570,8232],{"class":48},[35,153572,4073],{"class":359},[35,153574,153575,153578],{"class":37,"line":83},[35,153576,153577],{"class":359},"    student_id: ",[35,153579,151437],{"class":58},[35,153581,153582,153584],{"class":37,"line":92},[35,153583,151434],{"class":359},[35,153585,151437],{"class":58},[35,153587,153588,153590],{"class":37,"line":101},[35,153589,151442],{"class":359},[35,153591,151445],{"class":58},[35,153593,153594,153596],{"class":37,"line":110},[35,153595,151450],{"class":359},[35,153597,151453],{"class":58},[35,153599,153600],{"class":37,"line":119},[35,153601,141],{"emptyLinePlaceholder":140},[35,153603,153604,153606,153608],{"class":37,"line":128},[35,153605,31127],{"class":495},[35,153607,151601],{"class":48},[35,153609,31133],{"class":359},[35,153611,153612,153614],{"class":37,"line":137},[35,153613,15086],{"class":495},[35,153615,15906],{"class":359},[35,153617,153618,153620,153622,153624],{"class":37,"line":144},[35,153619,151614],{"class":306},[35,153621,51763],{"class":359},[35,153623,31149],{"class":58},[35,153625,151621],{"class":359},[35,153627,153628,153630,153632,153634],{"class":37,"line":150},[35,153629,151626],{"class":306},[35,153631,51763],{"class":359},[35,153633,31149],{"class":58},[35,153635,151633],{"class":359},[35,153637,153638,153640,153642,153644],{"class":37,"line":159},[35,153639,151638],{"class":306},[35,153641,51763],{"class":359},[35,153643,31149],{"class":58},[35,153645,151645],{"class":359},[35,153647,153648,153650,153652,153654],{"class":37,"line":168},[35,153649,151650],{"class":306},[35,153651,51763],{"class":359},[35,153653,31149],{"class":58},[35,153655,151657],{"class":359},[35,153657,153658],{"class":37,"line":177},[35,153659,2869],{"class":359},[35,153661,153662],{"class":37,"line":182},[35,153663,141],{"emptyLinePlaceholder":140},[35,153665,153666,153668],{"class":37,"line":188},[35,153667,151265],{"class":48},[35,153669,151268],{"class":58},[35,153671,153672,153674,153676],{"class":37,"line":197},[35,153673,31127],{"class":495},[35,153675,151678],{"class":48},[35,153677,151681],{"class":359},[35,153679,153680,153682,153684],{"class":37,"line":206},[35,153681,15086],{"class":495},[35,153683,151285],{"class":58},[35,153685,151690],{"class":359},[35,153687,153688,153690,153692],{"class":37,"line":215},[35,153689,151695],{"class":359},[35,153691,151698],{"class":306},[35,153693,88161],{"class":359},[35,153695,153696,153698,153700],{"class":37,"line":224},[35,153697,151695],{"class":359},[35,153699,63005],{"class":306},[35,153701,88161],{"class":359},[35,153703,153704,153706,153708],{"class":37,"line":233},[35,153705,151695],{"class":359},[35,153707,69450],{"class":306},[35,153709,88161],{"class":359},[35,153711,153712,153714,153716],{"class":37,"line":238},[35,153713,151695],{"class":359},[35,153715,151723],{"class":306},[35,153717,88161],{"class":359},[35,153719,153720],{"class":37,"line":244},[35,153721,38452],{"class":359},[21,153723,153724],{},"管理器示意：",[25,153726,153728],{"className":30704,"code":153727,"language":30706,"meta":30,"style":30},"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",[32,153729,153730,153739,153747,153758,153762,153772,153785,153796,153803,153809,153813,153822,153831,153837,153844],{"__ignoreMap":30},[35,153731,153732,153734,153737],{"class":37,"line":38},[35,153733,15028],{"class":495},[35,153735,153736],{"class":48}," StudentManager",[35,153738,4073],{"class":359},[35,153740,153741,153743,153745],{"class":37,"line":45},[35,153742,31127],{"class":495},[35,153744,31130],{"class":58},[35,153746,31133],{"class":359},[35,153748,153749,153751,153754,153756],{"class":37,"line":55},[35,153750,31171],{"class":58},[35,153752,153753],{"class":359},".students ",[35,153755,544],{"class":495},[35,153757,52164],{"class":359},[35,153759,153760],{"class":37,"line":65},[35,153761,141],{"emptyLinePlaceholder":140},[35,153763,153764,153766,153769],{"class":37,"line":74},[35,153765,31127],{"class":495},[35,153767,153768],{"class":48}," find_by_id",[35,153770,153771],{"class":359},"(self, student_id):\n",[35,153773,153774,153776,153778,153780,153782],{"class":37,"line":83},[35,153775,3737],{"class":495},[35,153777,152388],{"class":359},[35,153779,26374],{"class":495},[35,153781,39199],{"class":58},[35,153783,153784],{"class":359},".students:\n",[35,153786,153787,153789,153792,153794],{"class":37,"line":92},[35,153788,4976],{"class":495},[35,153790,153791],{"class":359}," student.student_id ",[35,153793,3283],{"class":495},[35,153795,152409],{"class":359},[35,153797,153798,153801],{"class":37,"line":101},[35,153799,153800],{"class":495},"                return",[35,153802,152416],{"class":359},[35,153804,153805,153807],{"class":37,"line":110},[35,153806,15086],{"class":495},[35,153808,152423],{"class":58},[35,153810,153811],{"class":37,"line":119},[35,153812,141],{"emptyLinePlaceholder":140},[35,153814,153815,153817,153819],{"class":37,"line":128},[35,153816,31127],{"class":495},[35,153818,5543],{"class":48},[35,153820,153821],{"class":359},"(self, student):\n",[35,153823,153824,153826,153828],{"class":37,"line":137},[35,153825,2837],{"class":495},[35,153827,39199],{"class":58},[35,153829,153830],{"class":359},".find_by_id(student.student_id):\n",[35,153832,153833,153835],{"class":37,"line":144},[35,153834,16066],{"class":495},[35,153836,126058],{"class":58},[35,153838,153839,153841],{"class":37,"line":150},[35,153840,31171],{"class":58},[35,153842,153843],{"class":359},".students.append(student)\n",[35,153845,153846,153848],{"class":37,"line":159},[35,153847,15086],{"class":495},[35,153849,153850],{"class":58}," True\n",[21,153852,153853],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[438,153855,153857],{"id":153856},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[465,153859,153861],{"id":153860},"_1251-数据结构","12.5.1 数据结构",[25,153863,153865],{"className":30704,"code":153864,"language":30706,"meta":30,"style":30},"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",[32,153866,153867,153875,153906,153936,153965,153994],{"__ignoreMap":30},[35,153868,153869,153871,153873],{"class":37,"line":38},[35,153870,148716],{"class":359},[35,153872,544],{"class":495},[35,153874,55773],{"class":359},[35,153876,153877,153879,153881,153883,153885,153887,153890,153892,153895,153897,153899,153901,153904],{"class":37,"line":45},[35,153878,148636],{"class":359},[35,153880,148248],{"class":306},[35,153882,51763],{"class":359},[35,153884,148859],{"class":306},[35,153886,12769],{"class":359},[35,153888,153889],{"class":306},"\"category\"",[35,153891,51763],{"class":359},[35,153893,153894],{"class":306},"\"手机\"",[35,153896,12769],{"class":359},[35,153898,84409],{"class":306},[35,153900,51763],{"class":359},[35,153902,153903],{"class":58},"12000",[35,153905,5264],{"class":359},[35,153907,153908,153910,153912,153914,153916,153918,153920,153922,153925,153927,153929,153931,153934],{"class":37,"line":55},[35,153909,148636],{"class":359},[35,153911,148248],{"class":306},[35,153913,51763],{"class":359},[35,153915,148859],{"class":306},[35,153917,12769],{"class":359},[35,153919,153889],{"class":306},[35,153921,51763],{"class":359},[35,153923,153924],{"class":306},"\"电脑\"",[35,153926,12769],{"class":359},[35,153928,84409],{"class":306},[35,153930,51763],{"class":359},[35,153932,153933],{"class":58},"18000",[35,153935,5264],{"class":359},[35,153937,153938,153940,153942,153944,153946,153948,153950,153952,153954,153956,153958,153960,153963],{"class":37,"line":65},[35,153939,148636],{"class":359},[35,153941,148248],{"class":306},[35,153943,51763],{"class":359},[35,153945,148880],{"class":306},[35,153947,12769],{"class":359},[35,153949,153889],{"class":306},[35,153951,51763],{"class":359},[35,153953,153894],{"class":306},[35,153955,12769],{"class":359},[35,153957,84409],{"class":306},[35,153959,51763],{"class":359},[35,153961,153962],{"class":58},"15000",[35,153964,5264],{"class":359},[35,153966,153967,153969,153971,153973,153975,153977,153979,153981,153983,153985,153987,153989,153992],{"class":37,"line":74},[35,153968,148636],{"class":359},[35,153970,148248],{"class":306},[35,153972,51763],{"class":359},[35,153974,148880],{"class":306},[35,153976,12769],{"class":359},[35,153978,153889],{"class":306},[35,153980,51763],{"class":359},[35,153982,153924],{"class":306},[35,153984,12769],{"class":359},[35,153986,84409],{"class":306},[35,153988,51763],{"class":359},[35,153990,153991],{"class":58},"16000",[35,153993,5264],{"class":359},[35,153995,153996],{"class":37,"line":83},[35,153997,33572],{"class":359},[465,153999,154001],{"id":154000},"_1252-按日期统计","12.5.2 按日期统计",[25,154003,154005],{"className":30704,"code":154004,"language":30706,"meta":30,"style":30},"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",[32,154006,154007,154016,154020,154031,154045,154058,154077,154081],{"__ignoreMap":30},[35,154008,154009,154012,154014],{"class":37,"line":38},[35,154010,154011],{"class":359},"daily_total ",[35,154013,544],{"class":495},[35,154015,88193],{"class":359},[35,154017,154018],{"class":37,"line":45},[35,154019,141],{"emptyLinePlaceholder":140},[35,154021,154022,154024,154026,154028],{"class":37,"line":55},[35,154023,3359],{"class":495},[35,154025,148460],{"class":359},[35,154027,26374],{"class":495},[35,154029,154030],{"class":359}," sales:\n",[35,154032,154033,154036,154038,154041,154043],{"class":37,"line":65},[35,154034,154035],{"class":359},"    date ",[35,154037,544],{"class":495},[35,154039,154040],{"class":359}," item[",[35,154042,148248],{"class":306},[35,154044,33572],{"class":359},[35,154046,154047,154050,154052,154054,154056],{"class":37,"line":74},[35,154048,154049],{"class":359},"    amount ",[35,154051,544],{"class":495},[35,154053,154040],{"class":359},[35,154055,84409],{"class":306},[35,154057,33572],{"class":359},[35,154059,154060,154063,154065,154068,154070,154072,154074],{"class":37,"line":83},[35,154061,154062],{"class":359},"    daily_total[date] ",[35,154064,544],{"class":495},[35,154066,154067],{"class":359}," daily_total.get(date, ",[35,154069,687],{"class":58},[35,154071,14048],{"class":359},[35,154073,975],{"class":495},[35,154075,154076],{"class":359}," amount\n",[35,154078,154079],{"class":37,"line":92},[35,154080,141],{"emptyLinePlaceholder":140},[35,154082,154083,154085],{"class":37,"line":101},[35,154084,30741],{"class":58},[35,154086,154087],{"class":359},"(daily_total)\n",[465,154089,154091],{"id":154090},"_1253-按类别统计","12.5.3 按类别统计",[25,154093,154095],{"className":30704,"code":154094,"language":30706,"meta":30,"style":30},"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",[32,154096,154097,154106,154110,154120,154133,154145,154163,154167],{"__ignoreMap":30},[35,154098,154099,154102,154104],{"class":37,"line":38},[35,154100,154101],{"class":359},"category_total ",[35,154103,544],{"class":495},[35,154105,88193],{"class":359},[35,154107,154108],{"class":37,"line":45},[35,154109,141],{"emptyLinePlaceholder":140},[35,154111,154112,154114,154116,154118],{"class":37,"line":55},[35,154113,3359],{"class":495},[35,154115,148460],{"class":359},[35,154117,26374],{"class":495},[35,154119,154030],{"class":359},[35,154121,154122,154125,154127,154129,154131],{"class":37,"line":65},[35,154123,154124],{"class":359},"    category ",[35,154126,544],{"class":495},[35,154128,154040],{"class":359},[35,154130,153889],{"class":306},[35,154132,33572],{"class":359},[35,154134,154135,154137,154139,154141,154143],{"class":37,"line":74},[35,154136,154049],{"class":359},[35,154138,544],{"class":495},[35,154140,154040],{"class":359},[35,154142,84409],{"class":306},[35,154144,33572],{"class":359},[35,154146,154147,154150,154152,154155,154157,154159,154161],{"class":37,"line":83},[35,154148,154149],{"class":359},"    category_total[category] ",[35,154151,544],{"class":495},[35,154153,154154],{"class":359}," category_total.get(category, ",[35,154156,687],{"class":58},[35,154158,14048],{"class":359},[35,154160,975],{"class":495},[35,154162,154076],{"class":359},[35,154164,154165],{"class":37,"line":92},[35,154166,141],{"emptyLinePlaceholder":140},[35,154168,154169,154171],{"class":37,"line":101},[35,154170,30741],{"class":58},[35,154172,154173],{"class":359},"(category_total)\n",[465,154175,154177],{"id":154176},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[25,154179,154181],{"className":30704,"code":154180,"language":30706,"meta":30,"style":30},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[32,154182,154183,154208],{"__ignoreMap":30},[35,154184,154185,154188,154190,154192,154195,154198,154201,154204,154206],{"class":37,"line":38},[35,154186,154187],{"class":359},"top_date, top_amount ",[35,154189,544],{"class":495},[35,154191,6285],{"class":58},[35,154193,154194],{"class":359},"(daily_total.items(), ",[35,154196,154197],{"class":5550},"key",[35,154199,154200],{"class":495},"=lambda",[35,154202,154203],{"class":359}," item: item[",[35,154205,713],{"class":58},[35,154207,4991],{"class":359},[35,154209,154210,154212],{"class":37,"line":45},[35,154211,30741],{"class":58},[35,154213,154214],{"class":359},"(top_date, top_amount)\n",[438,154216,154218],{"id":154217},"_126-绘制柱状图","12.6 绘制柱状图",[25,154220,154222],{"className":30704,"code":154221,"language":30706,"meta":30,"style":30},"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",[32,154223,154224,154238,154249,154253,154261,154273,154285,154296,154300,154304,154314,154325,154339,154344,154361,154378,154394,154398],{"__ignoreMap":30},[35,154225,154226,154228,154230,154232,154234,154236],{"class":37,"line":38},[35,154227,31063],{"class":495},[35,154229,147630],{"class":359},[35,154231,30718],{"class":495},[35,154233,147635],{"class":359},[35,154235,31709],{"class":495},[35,154237,147640],{"class":359},[35,154239,154240,154242,154244,154246],{"class":37,"line":45},[35,154241,31063],{"class":495},[35,154243,147489],{"class":359},[35,154245,30718],{"class":495},[35,154247,154248],{"class":359}," Bar\n",[35,154250,154251],{"class":37,"line":55},[35,154252,141],{"emptyLinePlaceholder":140},[35,154254,154255,154257,154259],{"class":37,"line":65},[35,154256,154101],{"class":359},[35,154258,544],{"class":495},[35,154260,15906],{"class":359},[35,154262,154263,154266,154268,154271],{"class":37,"line":74},[35,154264,154265],{"class":306},"    \"手机\"",[35,154267,51763],{"class":359},[35,154269,154270],{"class":58},"27000",[35,154272,31792],{"class":359},[35,154274,154275,154278,154280,154283],{"class":37,"line":83},[35,154276,154277],{"class":306},"    \"电脑\"",[35,154279,51763],{"class":359},[35,154281,154282],{"class":58},"34000",[35,154284,31792],{"class":359},[35,154286,154287,154290,154292,154294],{"class":37,"line":92},[35,154288,154289],{"class":306},"    \"耳机\"",[35,154291,51763],{"class":359},[35,154293,124650],{"class":58},[35,154295,31792],{"class":359},[35,154297,154298],{"class":37,"line":101},[35,154299,1926],{"class":359},[35,154301,154302],{"class":37,"line":110},[35,154303,141],{"emptyLinePlaceholder":140},[35,154305,154306,154309,154311],{"class":37,"line":119},[35,154307,154308],{"class":359},"bar ",[35,154310,544],{"class":495},[35,154312,154313],{"class":359}," Bar()\n",[35,154315,154316,154319,154322],{"class":37,"line":128},[35,154317,154318],{"class":359},"bar.add_xaxis(",[35,154320,154321],{"class":58},"list",[35,154323,154324],{"class":359},"(category_total.keys()))\n",[35,154326,154327,154330,154332,154334,154336],{"class":37,"line":137},[35,154328,154329],{"class":359},"bar.add_yaxis(",[35,154331,147546],{"class":306},[35,154333,12769],{"class":359},[35,154335,154321],{"class":58},[35,154337,154338],{"class":359},"(category_total.values()))\n",[35,154340,154341],{"class":37,"line":144},[35,154342,154343],{"class":359},"bar.set_global_opts(\n",[35,154345,154346,154348,154350,154352,154354,154356,154359],{"class":37,"line":150},[35,154347,147724],{"class":5550},[35,154349,544],{"class":495},[35,154351,147729],{"class":359},[35,154353,51733],{"class":5550},[35,154355,544],{"class":495},[35,154357,154358],{"class":306},"\"品类销售额\"",[35,154360,38373],{"class":359},[35,154362,154363,154365,154367,154369,154371,154373,154376],{"class":37,"line":159},[35,154364,147743],{"class":5550},[35,154366,544],{"class":495},[35,154368,147748],{"class":359},[35,154370,80135],{"class":5550},[35,154372,544],{"class":495},[35,154374,154375],{"class":306},"\"品类\"",[35,154377,38373],{"class":359},[35,154379,154380,154382,154384,154386,154388,154390,154392],{"class":37,"line":168},[35,154381,147762],{"class":5550},[35,154383,544],{"class":495},[35,154385,147748],{"class":359},[35,154387,80135],{"class":5550},[35,154389,544],{"class":495},[35,154391,147546],{"class":306},[35,154393,38373],{"class":359},[35,154395,154396],{"class":37,"line":177},[35,154397,505],{"class":359},[35,154399,154400,154403,154406],{"class":37,"line":182},[35,154401,154402],{"class":359},"bar.render(",[35,154404,154405],{"class":306},"\"category_sales.html\"",[35,154407,505],{"class":359},[438,154409,154411],{"id":154410},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[21,154413,154414],{},"时间线适合展示不同日期、月份、年份的数据变化。",[25,154416,154418],{"className":30704,"code":154417,"language":30706,"meta":30,"style":30},"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",[32,154419,154420,154434,154445,154449,154457,154481,154504,154529,154533,154537,154547,154551,154562,154571,154581,154595,154626,154631,154635],{"__ignoreMap":30},[35,154421,154422,154424,154426,154428,154430,154432],{"class":37,"line":38},[35,154423,31063],{"class":495},[35,154425,147630],{"class":359},[35,154427,30718],{"class":495},[35,154429,147635],{"class":359},[35,154431,31709],{"class":495},[35,154433,147640],{"class":359},[35,154435,154436,154438,154440,154442],{"class":37,"line":45},[35,154437,31063],{"class":495},[35,154439,147489],{"class":359},[35,154441,30718],{"class":495},[35,154443,154444],{"class":359}," Bar, Timeline\n",[35,154446,154447],{"class":37,"line":55},[35,154448,141],{"emptyLinePlaceholder":140},[35,154450,154451,154453,154455],{"class":37,"line":65},[35,154452,101980],{"class":359},[35,154454,544],{"class":495},[35,154456,15906],{"class":359},[35,154458,154459,154462,154465,154467,154469,154471,154473,154475,154477,154479],{"class":37,"line":74},[35,154460,154461],{"class":306},"    \"2024-10-01\"",[35,154463,154464],{"class":359},": {",[35,154466,153894],{"class":306},[35,154468,51763],{"class":359},[35,154470,153903],{"class":58},[35,154472,12769],{"class":359},[35,154474,153924],{"class":306},[35,154476,51763],{"class":359},[35,154478,153933],{"class":58},[35,154480,5264],{"class":359},[35,154482,154483,154486,154488,154490,154492,154494,154496,154498,154500,154502],{"class":37,"line":83},[35,154484,154485],{"class":306},"    \"2024-10-02\"",[35,154487,154464],{"class":359},[35,154489,153894],{"class":306},[35,154491,51763],{"class":359},[35,154493,153962],{"class":58},[35,154495,12769],{"class":359},[35,154497,153924],{"class":306},[35,154499,51763],{"class":359},[35,154501,153991],{"class":58},[35,154503,5264],{"class":359},[35,154505,154506,154509,154511,154513,154515,154518,154520,154522,154524,154527],{"class":37,"line":92},[35,154507,154508],{"class":306},"    \"2024-10-03\"",[35,154510,154464],{"class":359},[35,154512,153894],{"class":306},[35,154514,51763],{"class":359},[35,154516,154517],{"class":58},"17000",[35,154519,12769],{"class":359},[35,154521,153924],{"class":306},[35,154523,51763],{"class":359},[35,154525,154526],{"class":58},"19000",[35,154528,5264],{"class":359},[35,154530,154531],{"class":37,"line":101},[35,154532,1926],{"class":359},[35,154534,154535],{"class":37,"line":110},[35,154536,141],{"emptyLinePlaceholder":140},[35,154538,154539,154542,154544],{"class":37,"line":119},[35,154540,154541],{"class":359},"timeline ",[35,154543,544],{"class":495},[35,154545,154546],{"class":359}," Timeline()\n",[35,154548,154549],{"class":37,"line":128},[35,154550,141],{"emptyLinePlaceholder":140},[35,154552,154553,154555,154558,154560],{"class":37,"line":137},[35,154554,3359],{"class":495},[35,154556,154557],{"class":359}," date, category_data ",[35,154559,26374],{"class":495},[35,154561,149399],{"class":359},[35,154563,154564,154567,154569],{"class":37,"line":144},[35,154565,154566],{"class":359},"    bar ",[35,154568,544],{"class":495},[35,154570,154313],{"class":359},[35,154572,154573,154576,154578],{"class":37,"line":150},[35,154574,154575],{"class":359},"    bar.add_xaxis(",[35,154577,154321],{"class":58},[35,154579,154580],{"class":359},"(category_data.keys()))\n",[35,154582,154583,154586,154588,154590,154592],{"class":37,"line":159},[35,154584,154585],{"class":359},"    bar.add_yaxis(",[35,154587,147546],{"class":306},[35,154589,12769],{"class":359},[35,154591,154321],{"class":58},[35,154593,154594],{"class":359},"(category_data.values()))\n",[35,154596,154597,154600,154603,154605,154607,154609,154611,154613,154615,154617,154619,154621,154624],{"class":37,"line":168},[35,154598,154599],{"class":359},"    bar.set_global_opts(",[35,154601,154602],{"class":5550},"title_opts",[35,154604,544],{"class":495},[35,154606,147729],{"class":359},[35,154608,51733],{"class":5550},[35,154610,544],{"class":495},[35,154612,550],{"class":495},[35,154614,747],{"class":306},[35,154616,1390],{"class":58},[35,154618,74251],{"class":359},[35,154620,1440],{"class":58},[35,154622,154623],{"class":306},"销售额\"",[35,154625,30823],{"class":359},[35,154627,154628],{"class":37,"line":177},[35,154629,154630],{"class":359},"    timeline.add(bar, date)\n",[35,154632,154633],{"class":37,"line":182},[35,154634,141],{"emptyLinePlaceholder":140},[35,154636,154637,154640,154643],{"class":37,"line":188},[35,154638,154639],{"class":359},"timeline.render(",[35,154641,154642],{"class":306},"\"timeline_sales.html\"",[35,154644,505],{"class":359},[438,154646,154648],{"id":154647},"_128-绘制地图","12.8 绘制地图",[21,154650,154651],{},"地图适合展示地区数据。",[25,154653,154655],{"className":30704,"code":154654,"language":30706,"meta":30,"style":30},"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",[32,154656,154657,154671,154682,154686,154694,154707,154719,154732,154745,154749,154753,154763,154778,154783,154800,154819,154823],{"__ignoreMap":30},[35,154658,154659,154661,154663,154665,154667,154669],{"class":37,"line":38},[35,154660,31063],{"class":495},[35,154662,147630],{"class":359},[35,154664,30718],{"class":495},[35,154666,147635],{"class":359},[35,154668,31709],{"class":495},[35,154670,147640],{"class":359},[35,154672,154673,154675,154677,154679],{"class":37,"line":45},[35,154674,31063],{"class":495},[35,154676,147489],{"class":359},[35,154678,30718],{"class":495},[35,154680,154681],{"class":359}," Map\n",[35,154683,154684],{"class":37,"line":55},[35,154685,141],{"emptyLinePlaceholder":140},[35,154687,154688,154690,154692],{"class":37,"line":65},[35,154689,101980],{"class":359},[35,154691,544],{"class":495},[35,154693,55773],{"class":359},[35,154695,154696,154699,154701,154703,154705],{"class":37,"line":74},[35,154697,154698],{"class":359},"    (",[35,154700,69595],{"class":306},[35,154702,12769],{"class":359},[35,154704,1311],{"class":58},[35,154706,38373],{"class":359},[35,154708,154709,154711,154713,154715,154717],{"class":37,"line":83},[35,154710,154698],{"class":359},[35,154712,69615],{"class":306},[35,154714,12769],{"class":359},[35,154716,147563],{"class":58},[35,154718,38373],{"class":359},[35,154720,154721,154723,154726,154728,154730],{"class":37,"line":92},[35,154722,154698],{"class":359},[35,154724,154725],{"class":306},"\"广东\"",[35,154727,12769],{"class":359},[35,154729,2072],{"class":58},[35,154731,38373],{"class":359},[35,154733,154734,154736,154739,154741,154743],{"class":37,"line":101},[35,154735,154698],{"class":359},[35,154737,154738],{"class":306},"\"浙江\"",[35,154740,12769],{"class":359},[35,154742,147568],{"class":58},[35,154744,38373],{"class":359},[35,154746,154747],{"class":37,"line":110},[35,154748,33572],{"class":359},[35,154750,154751],{"class":37,"line":119},[35,154752,141],{"emptyLinePlaceholder":140},[35,154754,154755,154758,154760],{"class":37,"line":128},[35,154756,154757],{"class":359},"map_chart ",[35,154759,544],{"class":495},[35,154761,154762],{"class":359}," Map()\n",[35,154764,154765,154768,154770,154773,154776],{"class":37,"line":137},[35,154766,154767],{"class":359},"map_chart.add(",[35,154769,147546],{"class":306},[35,154771,154772],{"class":359},", data, ",[35,154774,154775],{"class":306},"\"china\"",[35,154777,505],{"class":359},[35,154779,154780],{"class":37,"line":144},[35,154781,154782],{"class":359},"map_chart.set_global_opts(\n",[35,154784,154785,154787,154789,154791,154793,154795,154798],{"class":37,"line":150},[35,154786,147724],{"class":5550},[35,154788,544],{"class":495},[35,154790,147729],{"class":359},[35,154792,51733],{"class":5550},[35,154794,544],{"class":495},[35,154796,154797],{"class":306},"\"地区销售额\"",[35,154799,38373],{"class":359},[35,154801,154802,154805,154807,154810,154813,154815,154817],{"class":37,"line":159},[35,154803,154804],{"class":5550},"    visualmap_opts",[35,154806,544],{"class":495},[35,154808,154809],{"class":359},"opts.VisualMapOpts(",[35,154811,154812],{"class":5550},"max_",[35,154814,544],{"class":495},[35,154816,2072],{"class":58},[35,154818,38373],{"class":359},[35,154820,154821],{"class":37,"line":168},[35,154822,505],{"class":359},[35,154824,154825,154828,154831],{"class":37,"line":177},[35,154826,154827],{"class":359},"map_chart.render(",[35,154829,154830],{"class":306},"\"map_sales.html\"",[35,154832,505],{"class":359},[21,154834,154835],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[438,154837,154839],{"id":154838},"_129-项目拆分建议","12.9 项目拆分建议",[21,154841,154842],{},"当代码超过一个文件时，可以这样组织：",[25,154844,154847],{"className":154845,"code":154846,"language":5521,"meta":30},[5519],"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",[32,154848,154846],{"__ignoreMap":30},[21,154850,154851],{},"职责：",[14,154853,154854,154860,154866,154872],{},[17,154855,154856,154859],{},[32,154857,154858],{},"main.py","：程序入口。",[17,154861,154862,154865],{},[32,154863,154864],{},"file_utils.py","：读写 JSON。",[17,154867,154868,154871],{},[32,154869,154870],{},"sales_service.py","：统计销售数据。",[17,154873,154874,154877],{},[32,154875,154876],{},"chart_builder.py","：生成图表。",[438,154879,154881],{"id":154880},"_1210-python基础复习清单","12.10 Python基础复习清单",[21,154883,154884],{},"语法基础：",[14,154886,154887,154890,154893,154896],{},[17,154888,154889],{},"会写变量、注释、输入输出。",[17,154891,154892],{},"会使用 int、float、str、bool。",[17,154894,154895],{},"会做类型转换。",[17,154897,154898],{},"会使用 f-string 格式化输出。",[21,154900,154901],{},"流程控制：",[14,154903,154904,154910,154916,154924],{},[17,154905,154906,154907,28711],{},"会写 ",[32,154908,154909],{},"if elif else",[17,154911,154906,154912,101343,154914,28711],{},[32,154913,108985],{},[32,154915,3359],{},[17,154917,154918,154919,101343,154921,28711],{},"理解 ",[32,154920,2394],{},[32,154922,154923],{},"continue",[17,154925,154926],{},"能写嵌套循环。",[21,154928,154929],{},"函数：",[14,154931,154932,154935,154938,154941],{},[17,154933,154934],{},"会定义和调用函数。",[17,154936,154937],{},"理解参数和返回值。",[17,154939,154940],{},"知道局部变量和全局变量。",[17,154942,154943],{},"会使用默认参数、关键字参数、不定长参数。",[21,154945,154946],{},"容器：",[14,154948,154949,154952,154955,154958,154961],{},[17,154950,154951],{},"会使用列表增删改查。",[17,154953,154954],{},"会遍历列表、字典。",[17,154956,154957],{},"会使用切片。",[17,154959,154960],{},"会用集合去重。",[17,154962,154963],{},"会处理列表嵌套字典。",[21,154965,154966],{},"文件和模块：",[14,154968,154969,154972,154975,154978,154981],{},[17,154970,154971],{},"会读写文本文件。",[17,154973,154974],{},"会读写 JSON。",[17,154976,154977],{},"会捕获常见异常。",[17,154979,154980],{},"会导入模块和第三方包。",[17,154982,154983],{},"会创建简单包结构。",[21,154985,154986],{},"项目能力：",[14,154988,154989,154992,154995,154998,155001],{},[17,154990,154991],{},"能把代码拆成函数。",[17,154993,154994],{},"能把数据保存到文件。",[17,154996,154997],{},"能处理用户输入错误。",[17,154999,155000],{},"能写一个完整菜单程序。",[17,155002,155003],{},"能用 pyecharts 生成图表。",[438,155005,155007],{"id":155006},"_1211-推荐练习顺序","12.11 推荐练习顺序",[14,155009,155010,155013,155016,155019,155022,155025,155028,155031],{},[17,155011,155012],{},"猜数字游戏。",[17,155014,155015],{},"ATM 菜单程序。",[17,155017,155018],{},"学生成绩统计。",[17,155020,155021],{},"学生管理系统函数版。",[17,155023,155024],{},"学生管理系统文件持久化版。",[17,155026,155027],{},"学生管理系统面向对象版。",[17,155029,155030],{},"销售数据统计。",[17,155032,155033],{},"销售数据可视化。",[438,155035,155037],{"id":155036},"_1212-常见学习误区","12.12 常见学习误区",[14,155039,155040,155043,155046,155049,155052,155055,155058],{},[17,155041,155042],{},"只看视频不敲代码。",[17,155044,155045],{},"一报错就复制错误去搜，不先读报错位置。",[17,155047,155048],{},"变量名随便写，后续自己看不懂。",[17,155050,155051],{},"所有代码都写在一个文件一个函数里。",[17,155053,155054],{},"不保存练习代码，复习时没有材料。",[17,155056,155057],{},"还没掌握列表字典就急着学框架。",[17,155059,155060],{},"不会读官方文档，只依赖教程。",[438,155062,155064],{"id":155063},"_1213-如何读报错","12.13 如何读报错",[21,155066,155067],{},"报错通常从下往上看最后几行。",[21,155069,15469],{},[25,155071,155074],{"className":155072,"code":155073,"language":5521,"meta":30},[5519],"ValueError: invalid literal for int() with base 10: 'abc'\n",[32,155075,155073],{"__ignoreMap":30},[21,155077,24932],{},[14,155079,155080,155086,155096],{},[17,155081,155082,155083,28711],{},"异常类型是 ",[32,155084,155085],{},"ValueError",[17,155087,107667,155088,155091,155092,155095],{},[32,155089,155090],{},"int()"," 无法把 ",[32,155093,155094],{},"'abc'"," 转成整数。",[17,155097,155098],{},"应该检查输入内容或增加异常处理。",[21,155100,155101],{},"再看文件名和行号：",[25,155103,155106],{"className":155104,"code":155105,"language":5521,"meta":30},[5519],"File \"main.py\", line 10, in \u003Cmodule>\n",[32,155107,155105],{"__ignoreMap":30},[21,155109,155110,155111,155113],{},"表示错误发生在 ",[32,155112,154858],{}," 第 10 行。",[438,155115,155117],{"id":155116},"_1214-后续学习方向","12.14 后续学习方向",[21,155119,155120],{},"Python 基础完成后，可以按兴趣选择方向：",[14,155122,155123,155135,155144,155156,155167,155176,155186],{},[17,155124,155125,155126,708,155129,708,155132,28711],{},"自动化办公：",[32,155127,155128],{},"openpyxl",[32,155130,155131],{},"python-docx",[32,155133,155134],{},"pdfplumber",[17,155136,155137,155138,708,155140,708,155142,28711],{},"数据分析：",[32,155139,100951],{},[32,155141,146436],{},[32,155143,146444],{},[17,155145,155146,155147,708,155150,708,155153,28711],{},"Web 后端：",[32,155148,155149],{},"Flask",[32,155151,155152],{},"FastAPI",[32,155154,155155],{},"Django",[17,155157,155158,155159,708,155161,708,155164,28711],{},"爬虫：",[32,155160,146421],{},[32,155162,155163],{},"BeautifulSoup",[32,155165,155166],{},"Scrapy",[17,155168,155169,155170,708,155172,155175],{},"测试开发：",[32,155171,146468],{},[32,155173,155174],{},"selenium","、接口测试。",[17,155177,155178,155179,708,155181,708,155183,28711],{},"人工智能：",[32,155180,100951],{},[32,155182,146436],{},[32,155184,155185],{},"pytorch",[17,155187,155188,155189,708,155191,708,155194,28711],{},"运维脚本：",[32,155190,146037],{},[32,155192,155193],{},"subprocess",[32,155195,155196],{},"paramiko",[21,155198,155199],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[438,155201,155203],{"id":155202},"_1215-结课练习","12.15 结课练习",[14,155205,155206,155209,155212,155215,155218,155221,155224,155227],{},[17,155207,155208],{},"完成函数版学生管理系统。",[17,155210,155211],{},"给学生管理系统增加 JSON 持久化。",[17,155213,155214],{},"给学生管理系统增加异常处理。",[17,155216,155217],{},"把学生管理系统改成面向对象版。",[17,155219,155220],{},"使用 pyecharts 绘制学生成绩柱状图。",[17,155222,155223],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[17,155225,155226],{},"按品类统计销售额并绘制柱状图。",[17,155228,155229],{},"写一份自己的 Python 学习路线图。",[416,155231,155232],{},"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":30,"searchDepth":45,"depth":45,"links":155234},[155235,155236,155239,155240,155241,155247,155248,155249,155250,155251,155252,155253,155254,155255,155256],{"id":151951,"depth":45,"text":151952},{"id":152001,"depth":45,"text":152002,"children":155237},[155238],{"id":152005,"depth":55,"text":152006},{"id":152044,"depth":45,"text":152045},{"id":153518,"depth":45,"text":153519},{"id":153856,"depth":45,"text":153857,"children":155242},[155243,155244,155245,155246],{"id":153860,"depth":55,"text":153861},{"id":154000,"depth":55,"text":154001},{"id":154090,"depth":55,"text":154091},{"id":154176,"depth":55,"text":154177},{"id":154217,"depth":45,"text":154218},{"id":154410,"depth":45,"text":154411},{"id":154647,"depth":45,"text":154648},{"id":154838,"depth":45,"text":154839},{"id":154880,"depth":45,"text":154881},{"id":155006,"depth":45,"text":155007},{"id":155036,"depth":45,"text":155037},{"id":155063,"depth":45,"text":155064},{"id":155116,"depth":45,"text":155117},{"id":155202,"depth":45,"text":155203},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151943,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155263,"title":155264,"body":155265,"description":421,"extension":422,"meta":157734,"navigation":140,"path":157735,"seo":157736,"stem":157737,"__hash__":157738},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155266,"toc":157709},[155267,155270,155274,155277,155280,155300,155303,155326,155329,155332,155354,155357,155379,155383,155386,155426,155429,155550,155554,155557,155597,155600,155624,155627,155631,155634,155648,155681,155684,155719,155722,155745,155748,155781,155784,155786,155792,155867,155870,155876,155893,155933,155937,155940,155986,155988,156026,156029,156064,156067,156102,156105,156137,156140,156159,156163,156167,156280,156282,156357,156361,156407,156410,156436,156445,156449,156452,156515,156523,156551,156555,156595,156660,156664,156667,156706,156709,156754,156757,156818,156822,156849,156852,156880,156883,156887,156891,156956,156959,156997,157000,157032,157036,157135,157139,157142,157215,157218,157266,157270,157276,157316,157319,157366,157369,157418,157422,157424,157438,157440,157621,157625,157652,157672,157679,157683,157700,157706],[10,155268,155264],{"id":155269},"_2-基础语法变量与字符串",[438,155271,155273],{"id":155272},"_21-注释","2.1 注释",[21,155275,155276],{},"注释是给人看的说明文字，不会被 Python 执行。",[21,155278,155279],{},"单行注释：",[25,155281,155283],{"className":30704,"code":155282,"language":30706,"meta":30,"style":30},"# 这是单行注释\nprint(\"hello\")\n",[32,155284,155285,155290],{"__ignoreMap":30},[35,155286,155287],{"class":37,"line":38},[35,155288,155289],{"class":41},"# 这是单行注释\n",[35,155291,155292,155294,155296,155298],{"class":37,"line":45},[35,155293,30741],{"class":58},[35,155295,499],{"class":359},[35,155297,6178],{"class":306},[35,155299,505],{"class":359},[21,155301,155302],{},"多行说明常用三引号：",[25,155304,155306],{"className":30704,"code":155305,"language":30706,"meta":30,"style":30},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[32,155307,155308,155312,155317,155322],{"__ignoreMap":30},[35,155309,155310],{"class":37,"line":38},[35,155311,96023],{"class":306},[35,155313,155314],{"class":37,"line":45},[35,155315,155316],{"class":306},"这是多行说明。\n",[35,155318,155319],{"class":37,"line":55},[35,155320,155321],{"class":306},"常用于文件顶部说明、函数说明等。\n",[35,155323,155324],{"class":37,"line":65},[35,155325,96023],{"class":306},[21,155327,155328],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[21,155330,155331],{},"不好：",[25,155333,155335],{"className":30704,"code":155334,"language":30706,"meta":30,"style":30},"# age 加 1\nage = age + 1\n",[32,155336,155337,155342],{"__ignoreMap":30},[35,155338,155339],{"class":37,"line":38},[35,155340,155341],{"class":41},"# age 加 1\n",[35,155343,155344,155346,155348,155350,155352],{"class":37,"line":45},[35,155345,146797],{"class":359},[35,155347,544],{"class":495},[35,155349,16041],{"class":359},[35,155351,975],{"class":495},[35,155353,56025],{"class":58},[21,155355,155356],{},"较好：",[25,155358,155360],{"className":30704,"code":155359,"language":30706,"meta":30,"style":30},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[32,155361,155362,155367],{"__ignoreMap":30},[35,155363,155364],{"class":37,"line":38},[35,155365,155366],{"class":41},"# 用户过完生日后，年龄增加一岁\n",[35,155368,155369,155371,155373,155375,155377],{"class":37,"line":45},[35,155370,146797],{"class":359},[35,155372,544],{"class":495},[35,155374,16041],{"class":359},[35,155376,975],{"class":495},[35,155378,56025],{"class":58},[438,155380,155382],{"id":155381},"_22-字面量","2.2 字面量",[21,155384,155385],{},"字面量就是代码中直接写出来的数据。",[25,155387,155389],{"className":30704,"code":155388,"language":30706,"meta":30,"style":30},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[32,155390,155391,155398,155405,155412,155419],{"__ignoreMap":30},[35,155392,155393,155395],{"class":37,"line":38},[35,155394,807],{"class":58},[35,155396,155397],{"class":41},"          # 整数\n",[35,155399,155400,155402],{"class":37,"line":45},[35,155401,547],{"class":58},[35,155403,155404],{"class":41},"         # 小数\n",[35,155406,155407,155409],{"class":37,"line":55},[35,155408,6178],{"class":306},[35,155410,155411],{"class":41},"      # 字符串\n",[35,155413,155414,155416],{"class":37,"line":65},[35,155415,31802],{"class":58},[35,155417,155418],{"class":41},"         # 布尔值\n",[35,155420,155421,155423],{"class":37,"line":74},[35,155422,96011],{"class":58},[35,155424,155425],{"class":41},"         # 空值\n",[21,155427,155428],{},"常见字面量类型：",[633,155430,155431,155441],{},[636,155432,155433],{},[639,155434,155435,155437,155439],{},[642,155436,24071],{},[642,155438,27820],{},[642,155440,26200],{},[680,155442,155443,155454,155465,155476,155488,155500,155512,155525,155537],{},[639,155444,155445,155447,155451],{},[685,155446,502],{},[685,155448,155449],{},[32,155450,807],{},[685,155452,155453],{},"整数",[639,155455,155456,155458,155462],{},[685,155457,538],{},[685,155459,155460],{},[32,155461,547],{},[685,155463,155464],{},"浮点数",[639,155466,155467,155469,155473],{},[685,155468,1664],{},[685,155470,155471],{},[32,155472,6178],{},[685,155474,155475],{},"字符串",[639,155477,155478,155480,155486],{},[685,155479,1716],{},[685,155481,155482,708,155484],{},[32,155483,31802],{},[32,155485,34313],{},[685,155487,66341],{},[639,155489,155490,155493,155497],{},[685,155491,155492],{},"NoneType",[685,155494,155495],{},[32,155496,96011],{},[685,155498,155499],{},"空值",[639,155501,155502,155504,155509],{},[685,155503,154321],{},[685,155505,155506],{},[32,155507,155508],{},"[1, 2, 3]",[685,155510,155511],{},"列表",[639,155513,155514,155517,155522],{},[685,155515,155516],{},"tuple",[685,155518,155519],{},[32,155520,155521],{},"(1, 2, 3)",[685,155523,155524],{},"元组",[639,155526,155527,155529,155534],{},[685,155528,114868],{},[685,155530,155531],{},[32,155532,155533],{},"{\"name\": \"张三\"}",[685,155535,155536],{},"字典",[639,155538,155539,155542,155547],{},[685,155540,155541],{},"set",[685,155543,155544],{},[32,155545,155546],{},"{1, 2, 3}",[685,155548,155549],{},"集合",[438,155551,155553],{"id":155552},"_23-变量","2.3 变量",[21,155555,155556],{},"变量是保存数据的名字。",[25,155558,155560],{"className":30704,"code":155559,"language":30706,"meta":30,"style":30},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[32,155561,155562,155570,155578,155588],{"__ignoreMap":30},[35,155563,155564,155566,155568],{"class":37,"line":38},[35,155565,146787],{"class":359},[35,155567,544],{"class":495},[35,155569,149604],{"class":306},[35,155571,155572,155574,155576],{"class":37,"line":45},[35,155573,146797],{"class":359},[35,155575,544],{"class":495},[35,155577,146802],{"class":58},[35,155579,155580,155583,155585],{"class":37,"line":55},[35,155581,155582],{"class":359},"height ",[35,155584,544],{"class":495},[35,155586,155587],{"class":58}," 1.75\n",[35,155589,155590,155593,155595],{"class":37,"line":65},[35,155591,155592],{"class":359},"is_student ",[35,155594,544],{"class":495},[35,155596,153850],{"class":58},[21,155598,155599],{},"Python 的变量不需要提前声明类型：",[25,155601,155603],{"className":30704,"code":155602,"language":30706,"meta":30,"style":30},"score = 100\nscore = \"满分\"\n",[32,155604,155605,155615],{"__ignoreMap":30},[35,155606,155607,155610,155612],{"class":37,"line":38},[35,155608,155609],{"class":359},"score ",[35,155611,544],{"class":495},[35,155613,155614],{"class":58}," 100\n",[35,155616,155617,155619,155621],{"class":37,"line":45},[35,155618,155609],{"class":359},[35,155620,544],{"class":495},[35,155622,155623],{"class":306}," \"满分\"\n",[21,155625,155626],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[438,155628,155630],{"id":155629},"_24-变量命名规则","2.4 变量命名规则",[21,155632,155633],{},"硬性规则：",[14,155635,155636,155639,155642,155645],{},[17,155637,155638],{},"只能由字母、数字、下划线组成。",[17,155640,155641],{},"不能以数字开头。",[17,155643,155644],{},"不能使用 Python 关键字。",[17,155646,155647],{},"区分大小写。",[25,155649,155651],{"className":30704,"code":155650,"language":30706,"meta":30,"style":30},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[32,155652,155653,155662,155671],{"__ignoreMap":30},[35,155654,155655,155658,155660],{"class":37,"line":38},[35,155656,155657],{"class":359},"user_name ",[35,155659,544],{"class":495},[35,155661,146792],{"class":306},[35,155663,155664,155667,155669],{"class":37,"line":45},[35,155665,155666],{"class":359},"age2 ",[35,155668,544],{"class":495},[35,155670,146802],{"class":58},[35,155672,155673,155676,155678],{"class":37,"line":55},[35,155674,155675],{"class":359},"_token ",[35,155677,544],{"class":495},[35,155679,155680],{"class":306}," \"abc\"\n",[21,155682,155683],{},"错误写法：",[25,155685,155687],{"className":30704,"code":155686,"language":30706,"meta":30,"style":30},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[32,155688,155689,155698,155710],{"__ignoreMap":30},[35,155690,155691,155694,155696],{"class":37,"line":38},[35,155692,155693],{"class":77728},"2age",[35,155695,13898],{"class":495},[35,155697,146802],{"class":58},[35,155699,155700,155702,155704,155706,155708],{"class":37,"line":45},[35,155701,131835],{"class":359},[35,155703,1026],{"class":495},[35,155705,146787],{"class":359},[35,155707,544],{"class":495},[35,155709,146792],{"class":306},[35,155711,155712,155714,155716],{"class":37,"line":55},[35,155713,15028],{"class":495},[35,155715,13898],{"class":495},[35,155717,155718],{"class":306}," \"一班\"\n",[21,155720,155721],{},"查看关键字：",[25,155723,155725],{"className":30704,"code":155724,"language":30706,"meta":30,"style":30},"import keyword\n\nprint(keyword.kwlist)\n",[32,155726,155727,155734,155738],{"__ignoreMap":30},[35,155728,155729,155731],{"class":37,"line":38},[35,155730,30718],{"class":495},[35,155732,155733],{"class":359}," keyword\n",[35,155735,155736],{"class":37,"line":45},[35,155737,141],{"emptyLinePlaceholder":140},[35,155739,155740,155742],{"class":37,"line":55},[35,155741,30741],{"class":58},[35,155743,155744],{"class":359},"(keyword.kwlist)\n",[21,155746,155747],{},"推荐命名风格：",[25,155749,155751],{"className":30704,"code":155750,"language":30706,"meta":30,"style":30},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[32,155752,155753,155762,155772],{"__ignoreMap":30},[35,155754,155755,155758,155760],{"class":37,"line":38},[35,155756,155757],{"class":359},"student_name ",[35,155759,544],{"class":495},[35,155761,149604],{"class":306},[35,155763,155764,155767,155769],{"class":37,"line":45},[35,155765,155766],{"class":359},"total_price ",[35,155768,544],{"class":495},[35,155770,155771],{"class":58}," 99.8\n",[35,155773,155774,155777,155779],{"class":37,"line":55},[35,155775,155776],{"class":359},"is_finished ",[35,155778,544],{"class":495},[35,155780,126058],{"class":58},[21,155782,155783],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[438,155785,51058],{"id":51057},[21,155787,104688,155788,155791],{},[32,155789,155790],{},"type()"," 查看数据类型：",[25,155793,155795],{"className":30704,"code":155794,"language":30706,"meta":30,"style":30},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[32,155796,155797,155811,155825,155839,155853],{"__ignoreMap":30},[35,155798,155799,155801,155803,155805,155807,155809],{"class":37,"line":38},[35,155800,30741],{"class":58},[35,155802,499],{"class":359},[35,155804,103429],{"class":58},[35,155806,499],{"class":359},[35,155808,807],{"class":58},[35,155810,30823],{"class":359},[35,155812,155813,155815,155817,155819,155821,155823],{"class":37,"line":45},[35,155814,30741],{"class":58},[35,155816,499],{"class":359},[35,155818,103429],{"class":58},[35,155820,499],{"class":359},[35,155822,547],{"class":58},[35,155824,30823],{"class":359},[35,155826,155827,155829,155831,155833,155835,155837],{"class":37,"line":55},[35,155828,30741],{"class":58},[35,155830,499],{"class":359},[35,155832,103429],{"class":58},[35,155834,499],{"class":359},[35,155836,6178],{"class":306},[35,155838,30823],{"class":359},[35,155840,155841,155843,155845,155847,155849,155851],{"class":37,"line":65},[35,155842,30741],{"class":58},[35,155844,499],{"class":359},[35,155846,103429],{"class":58},[35,155848,499],{"class":359},[35,155850,31802],{"class":58},[35,155852,30823],{"class":359},[35,155854,155855,155857,155859,155861,155863,155865],{"class":37,"line":74},[35,155856,30741],{"class":58},[35,155858,499],{"class":359},[35,155860,103429],{"class":58},[35,155862,499],{"class":359},[35,155864,96011],{"class":58},[35,155866,30823],{"class":359},[21,155868,155869],{},"输出类似：",[25,155871,155874],{"className":155872,"code":155873,"language":5521,"meta":30},[5519],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[32,155875,155873],{"__ignoreMap":30},[21,155877,9359,155878,107605,155880,155882,155883,155885,155886,21834,155888,155885,155890,155892],{},[32,155879,1716],{},[32,155881,502],{}," 的子类，",[32,155884,31802],{}," 可以当作 ",[32,155887,713],{},[32,155889,34313],{},[32,155891,687],{},"，但业务代码中不要滥用。",[25,155894,155896],{"className":30704,"code":155895,"language":30706,"meta":30,"style":30},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[32,155897,155898,155916],{"__ignoreMap":30},[35,155899,155900,155902,155904,155906,155908,155910,155913],{"class":37,"line":38},[35,155901,30741],{"class":58},[35,155903,499],{"class":359},[35,155905,31802],{"class":58},[35,155907,45892],{"class":495},[35,155909,25450],{"class":58},[35,155911,155912],{"class":359},")   ",[35,155914,155915],{"class":41},"# 2\n",[35,155917,155918,155920,155922,155924,155926,155928,155930],{"class":37,"line":45},[35,155919,30741],{"class":58},[35,155921,499],{"class":359},[35,155923,34313],{"class":58},[35,155925,45892],{"class":495},[35,155927,25450],{"class":58},[35,155929,46134],{"class":359},[35,155931,155932],{"class":41},"# 1\n",[438,155934,155936],{"id":155935},"_26-类型转换","2.6 类型转换",[21,155938,155939],{},"常用转换函数：",[25,155941,155943],{"className":30704,"code":155942,"language":30706,"meta":30,"style":30},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[32,155944,155945,155955,155966,155976],{"__ignoreMap":30},[35,155946,155947,155949,155951,155953],{"class":37,"line":38},[35,155948,502],{"class":58},[35,155950,499],{"class":359},[35,155952,54642],{"class":306},[35,155954,505],{"class":359},[35,155956,155957,155959,155961,155964],{"class":37,"line":45},[35,155958,538],{"class":58},[35,155960,499],{"class":359},[35,155962,155963],{"class":306},"\"3.14\"",[35,155965,505],{"class":359},[35,155967,155968,155970,155972,155974],{"class":37,"line":55},[35,155969,1664],{"class":58},[35,155971,499],{"class":359},[35,155973,807],{"class":58},[35,155975,505],{"class":359},[35,155977,155978,155980,155982,155984],{"class":37,"line":65},[35,155979,1716],{"class":58},[35,155981,499],{"class":359},[35,155983,713],{"class":58},[35,155985,505],{"class":359},[21,155987,15469],{},[25,155989,155991],{"className":30704,"code":155990,"language":30706,"meta":30,"style":30},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[32,155992,155993,156002,156013],{"__ignoreMap":30},[35,155994,155995,155997,155999],{"class":37,"line":38},[35,155996,146797],{"class":359},[35,155998,544],{"class":495},[35,156000,156001],{"class":306}," \"18\"\n",[35,156003,156004,156006,156008,156010],{"class":37,"line":45},[35,156005,146797],{"class":359},[35,156007,544],{"class":495},[35,156009,2723],{"class":58},[35,156011,156012],{"class":359},"(age)\n",[35,156014,156015,156017,156020,156022,156024],{"class":37,"line":55},[35,156016,30741],{"class":58},[35,156018,156019],{"class":359},"(age ",[35,156021,975],{"class":495},[35,156023,25450],{"class":58},[35,156025,505],{"class":359},[21,156027,156028],{},"输入得到的内容永远是字符串：",[25,156030,156032],{"className":30704,"code":156031,"language":30706,"meta":30,"style":30},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[32,156033,156034,156050],{"__ignoreMap":30},[35,156035,156036,156039,156041,156043,156045,156048],{"class":37,"line":38},[35,156037,156038],{"class":359},"num ",[35,156040,544],{"class":495},[35,156042,60931],{"class":58},[35,156044,499],{"class":359},[35,156046,156047],{"class":306},"\"请输入数字:\"",[35,156049,505],{"class":359},[35,156051,156052,156054,156056,156058,156061],{"class":37,"line":45},[35,156053,30741],{"class":58},[35,156055,499],{"class":359},[35,156057,103429],{"class":58},[35,156059,156060],{"class":359},"(num))  ",[35,156062,156063],{"class":41},"# str\n",[21,156065,156066],{},"如果要做数学运算，必须转换：",[25,156068,156070],{"className":30704,"code":156069,"language":30706,"meta":30,"style":30},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[32,156071,156072,156090],{"__ignoreMap":30},[35,156073,156074,156076,156078,156080,156082,156084,156086,156088],{"class":37,"line":38},[35,156075,156038],{"class":359},[35,156077,544],{"class":495},[35,156079,2723],{"class":58},[35,156081,499],{"class":359},[35,156083,54147],{"class":58},[35,156085,499],{"class":359},[35,156087,156047],{"class":306},[35,156089,30823],{"class":359},[35,156091,156092,156094,156096,156098,156100],{"class":37,"line":45},[35,156093,30741],{"class":58},[35,156095,45945],{"class":359},[35,156097,975],{"class":495},[35,156099,2379],{"class":58},[35,156101,505],{"class":359},[21,156103,156104],{},"常见错误：",[25,156106,156108],{"className":30704,"code":156107,"language":30706,"meta":30,"style":30},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[32,156109,156110,156123],{"__ignoreMap":30},[35,156111,156112,156114,156116,156118,156120],{"class":37,"line":38},[35,156113,502],{"class":58},[35,156115,499],{"class":359},[35,156117,155963],{"class":306},[35,156119,155912],{"class":359},[35,156121,156122],{"class":41},"# 错误\n",[35,156124,156125,156127,156129,156132,156135],{"class":37,"line":45},[35,156126,502],{"class":58},[35,156128,499],{"class":359},[35,156130,156131],{"class":306},"\"abc\"",[35,156133,156134],{"class":359},")    ",[35,156136,156122],{"class":41},[21,156138,156139],{},"正确写法：",[25,156141,156143],{"className":30704,"code":156142,"language":30706,"meta":30,"style":30},"num = float(\"3.14\")\n",[32,156144,156145],{"__ignoreMap":30},[35,156146,156147,156149,156151,156153,156155,156157],{"class":37,"line":38},[35,156148,156038],{"class":359},[35,156150,544],{"class":495},[35,156152,110119],{"class":58},[35,156154,499],{"class":359},[35,156156,155963],{"class":306},[35,156158,505],{"class":359},[438,156160,156162],{"id":156161},"_27-运算符","2.7 运算符",[465,156164,156166],{"id":156165},"_271-算术运算符","2.7.1 算术运算符",[633,156168,156169,156180],{},[636,156170,156171],{},[639,156172,156173,156176,156178],{},[642,156174,156175],{},"运算符",[642,156177,26200],{},[642,156179,27820],{},[680,156181,156182,156196,156210,156224,156238,156252,156266],{},[639,156183,156184,156188,156191],{},[685,156185,156186],{},[32,156187,975],{},[685,156189,156190],{},"加法",[685,156192,156193],{},[32,156194,156195],{},"1 + 2",[639,156197,156198,156202,156205],{},[685,156199,156200],{},[32,156201,1026],{},[685,156203,156204],{},"减法",[685,156206,156207],{},[32,156208,156209],{},"5 - 3",[639,156211,156212,156216,156219],{},[685,156213,156214],{},[32,156215,949],{},[685,156217,156218],{},"乘法",[685,156220,156221],{},[32,156222,156223],{},"2 * 3",[639,156225,156226,156230,156233],{},[685,156227,156228],{},[32,156229,1078],{},[685,156231,156232],{},"除法，结果是浮点数",[685,156234,156235],{},[32,156236,156237],{},"5 \u002F 2",[639,156239,156240,156244,156247],{},[685,156241,156242],{},[32,156243,33655],{},[685,156245,156246],{},"整除",[685,156248,156249],{},[32,156250,156251],{},"5 \u002F\u002F 2",[639,156253,156254,156258,156261],{},[685,156255,156256],{},[32,156257,823],{},[685,156259,156260],{},"取余",[685,156262,156263],{},[32,156264,156265],{},"5 % 2",[639,156267,156268,156272,156275],{},[685,156269,156270],{},[32,156271,10995],{},[685,156273,156274],{},"幂运算",[685,156276,156277],{},[32,156278,156279],{},"2 ** 3",[21,156281,15469],{},[25,156283,156285],{"className":30704,"code":156284,"language":30706,"meta":30,"style":30},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[32,156286,156287,156305,156322,156339],{"__ignoreMap":30},[35,156288,156289,156291,156293,156295,156298,156300,156302],{"class":37,"line":38},[35,156290,30741],{"class":58},[35,156292,499],{"class":359},[35,156294,372],{"class":58},[35,156296,156297],{"class":495}," \u002F",[35,156299,15089],{"class":58},[35,156301,155912],{"class":359},[35,156303,156304],{"class":41},"# 2.5\n",[35,156306,156307,156309,156311,156313,156316,156318,156320],{"class":37,"line":45},[35,156308,30741],{"class":58},[35,156310,499],{"class":359},[35,156312,372],{"class":58},[35,156314,156315],{"class":495}," \u002F\u002F",[35,156317,15089],{"class":58},[35,156319,46134],{"class":359},[35,156321,155915],{"class":41},[35,156323,156324,156326,156328,156330,156333,156335,156337],{"class":37,"line":55},[35,156325,30741],{"class":58},[35,156327,499],{"class":359},[35,156329,372],{"class":58},[35,156331,156332],{"class":495}," %",[35,156334,15089],{"class":58},[35,156336,155912],{"class":359},[35,156338,155932],{"class":41},[35,156340,156341,156343,156345,156347,156350,156352,156354],{"class":37,"line":65},[35,156342,30741],{"class":58},[35,156344,499],{"class":359},[35,156346,574],{"class":58},[35,156348,156349],{"class":495}," **",[35,156351,78395],{"class":58},[35,156353,46134],{"class":359},[35,156355,156356],{"class":41},"# 8\n",[465,156358,156360],{"id":156359},"_272-赋值运算符","2.7.2 赋值运算符",[25,156362,156364],{"className":30704,"code":156363,"language":30706,"meta":30,"style":30},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[32,156365,156366,156374,156382,156390,156398],{"__ignoreMap":30},[35,156367,156368,156370,156372],{"class":37,"line":38},[35,156369,156038],{"class":359},[35,156371,544],{"class":495},[35,156373,58754],{"class":58},[35,156375,156376,156378,156380],{"class":37,"line":45},[35,156377,156038],{"class":359},[35,156379,9811],{"class":495},[35,156381,54753],{"class":58},[35,156383,156384,156386,156388],{"class":37,"line":55},[35,156385,156038],{"class":359},[35,156387,150503],{"class":495},[35,156389,48049],{"class":58},[35,156391,156392,156394,156396],{"class":37,"line":65},[35,156393,156038],{"class":359},[35,156395,137399],{"class":495},[35,156397,120354],{"class":58},[35,156399,156400,156402,156405],{"class":37,"line":74},[35,156401,156038],{"class":359},[35,156403,156404],{"class":495},"\u002F=",[35,156406,48049],{"class":58},[21,156408,156409],{},"等价关系：",[25,156411,156413],{"className":30704,"code":156412,"language":30706,"meta":30,"style":30},"num += 1\nnum = num + 1\n",[32,156414,156415,156423],{"__ignoreMap":30},[35,156416,156417,156419,156421],{"class":37,"line":38},[35,156418,156038],{"class":359},[35,156420,9811],{"class":495},[35,156422,56025],{"class":58},[35,156424,156425,156427,156429,156432,156434],{"class":37,"line":45},[35,156426,156038],{"class":359},[35,156428,544],{"class":495},[35,156430,156431],{"class":359}," num ",[35,156433,975],{"class":495},[35,156435,56025],{"class":58},[21,156437,156438,156439,101343,156442,28711],{},"Python 没有 ",[32,156440,156441],{},"num++",[32,156443,156444],{},"num--",[465,156446,156448],{"id":156447},"_273-比较运算符","2.7.3 比较运算符",[21,156450,156451],{},"比较运算结果是布尔值。",[25,156453,156455],{"className":30704,"code":156454,"language":30706,"meta":30,"style":30},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[32,156456,156457,156471,156486,156500],{"__ignoreMap":30},[35,156458,156459,156461,156463,156465,156467,156469],{"class":37,"line":38},[35,156460,30741],{"class":58},[35,156462,499],{"class":359},[35,156464,940],{"class":58},[35,156466,26552],{"class":495},[35,156468,2489],{"class":58},[35,156470,505],{"class":359},[35,156472,156473,156475,156477,156479,156482,156484],{"class":37,"line":45},[35,156474,30741],{"class":58},[35,156476,499],{"class":359},[35,156478,940],{"class":58},[35,156480,156481],{"class":495}," >=",[35,156483,2379],{"class":58},[35,156485,505],{"class":359},[35,156487,156488,156490,156492,156494,156496,156498],{"class":37,"line":55},[35,156489,30741],{"class":58},[35,156491,499],{"class":359},[35,156493,940],{"class":58},[35,156495,101881],{"class":495},[35,156497,2424],{"class":58},[35,156499,505],{"class":359},[35,156501,156502,156504,156506,156508,156511,156513],{"class":37,"line":65},[35,156503,30741],{"class":58},[35,156505,499],{"class":359},[35,156507,940],{"class":58},[35,156509,156510],{"class":495}," !=",[35,156512,2424],{"class":58},[35,156514,505],{"class":359},[21,156516,156517,156518,156520,156521,28711],{},"注意：判断相等用 ",[32,156519,3283],{},"，赋值用 ",[32,156522,544],{},[25,156524,156526],{"className":30704,"code":156525,"language":30706,"meta":30,"style":30},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[32,156527,156528,156540],{"__ignoreMap":30},[35,156529,156530,156532,156534,156537],{"class":37,"line":38},[35,156531,146797],{"class":359},[35,156533,544],{"class":495},[35,156535,156536],{"class":58}," 18",[35,156538,156539],{"class":41},"       # 赋值\n",[35,156541,156542,156544,156546,156548],{"class":37,"line":45},[35,156543,146797],{"class":359},[35,156545,3283],{"class":495},[35,156547,156536],{"class":58},[35,156549,156550],{"class":41},"      # 判断是否相等\n",[465,156552,156554],{"id":156553},"_274-逻辑运算符","2.7.4 逻辑运算符",[633,156556,156557,156565],{},[636,156558,156559],{},[639,156560,156561,156563],{},[642,156562,156175],{},[642,156564,26200],{},[680,156566,156567,156576,156585],{},[639,156568,156569,156573],{},[685,156570,156571],{},[32,156572,30788],{},[685,156574,156575],{},"并且",[639,156577,156578,156582],{},[685,156579,156580],{},[32,156581,115412],{},[685,156583,156584],{},"或者",[639,156586,156587,156592],{},[685,156588,156589],{},[32,156590,156591],{},"not",[685,156593,156594],{},"取反",[25,156596,156598],{"className":30704,"code":156597,"language":30706,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[32,156599,156600,156608,156617,156621,156636,156650],{"__ignoreMap":30},[35,156601,156602,156604,156606],{"class":37,"line":38},[35,156603,146797],{"class":359},[35,156605,544],{"class":495},[35,156607,88390],{"class":58},[35,156609,156610,156613,156615],{"class":37,"line":45},[35,156611,156612],{"class":359},"has_ticket ",[35,156614,544],{"class":495},[35,156616,153850],{"class":58},[35,156618,156619],{"class":37,"line":55},[35,156620,141],{"emptyLinePlaceholder":140},[35,156622,156623,156625,156627,156629,156631,156633],{"class":37,"line":65},[35,156624,30741],{"class":58},[35,156626,156019],{"class":359},[35,156628,2060],{"class":495},[35,156630,156536],{"class":58},[35,156632,120746],{"class":495},[35,156634,156635],{"class":359}," has_ticket)\n",[35,156637,156638,156640,156642,156644,156646,156648],{"class":37,"line":74},[35,156639,30741],{"class":58},[35,156641,156019],{"class":359},[35,156643,1404],{"class":495},[35,156645,156536],{"class":58},[35,156647,114523],{"class":495},[35,156649,156635],{"class":359},[35,156651,156652,156654,156656,156658],{"class":37,"line":83},[35,156653,30741],{"class":58},[35,156655,499],{"class":359},[35,156657,156591],{"class":495},[35,156659,156635],{"class":359},[438,156661,156663],{"id":156662},"_28-字符串定义","2.8 字符串定义",[21,156665,156666],{},"三种常见写法：",[25,156668,156670],{"className":30704,"code":156669,"language":30706,"meta":30,"style":30},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[32,156671,156672,156682,156691,156701],{"__ignoreMap":30},[35,156673,156674,156677,156679],{"class":37,"line":38},[35,156675,156676],{"class":359},"name1 ",[35,156678,544],{"class":495},[35,156680,156681],{"class":306}," '小明'\n",[35,156683,156684,156687,156689],{"class":37,"line":45},[35,156685,156686],{"class":359},"name2 ",[35,156688,544],{"class":495},[35,156690,149604],{"class":306},[35,156692,156693,156696,156698],{"class":37,"line":55},[35,156694,156695],{"class":359},"text ",[35,156697,544],{"class":495},[35,156699,156700],{"class":306}," \"\"\"这是多行字符串\n",[35,156702,156703],{"class":37,"line":65},[35,156704,156705],{"class":306},"可以换行\"\"\"\n",[21,156707,156708],{},"字符串中包含引号：",[25,156710,156712],{"className":30704,"code":156711,"language":30706,"meta":30,"style":30},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[32,156713,156714,156724,156734],{"__ignoreMap":30},[35,156715,156716,156719,156721],{"class":37,"line":38},[35,156717,156718],{"class":359},"msg ",[35,156720,544],{"class":495},[35,156722,156723],{"class":306}," \"他说:'你好'\"\n",[35,156725,156726,156729,156731],{"class":37,"line":45},[35,156727,156728],{"class":359},"msg2 ",[35,156730,544],{"class":495},[35,156732,156733],{"class":306}," '他说:\"你好\"'\n",[35,156735,156736,156739,156741,156744,156747,156750,156752],{"class":37,"line":55},[35,156737,156738],{"class":359},"msg3 ",[35,156740,544],{"class":495},[35,156742,156743],{"class":306}," \"他说:",[35,156745,156746],{"class":58},"\\\"",[35,156748,156749],{"class":306},"你好",[35,156751,156746],{"class":58},[35,156753,25465],{"class":306},[21,156755,156756],{},"常见转义字符：",[633,156758,156759,156768],{},[636,156760,156761],{},[639,156762,156763,156766],{},[642,156764,156765],{},"写法",[642,156767,101025],{},[680,156769,156770,156780,156789,156799,156808],{},[639,156771,156772,156777],{},[685,156773,156774],{},[32,156775,156776],{},"\\n",[685,156778,156779],{},"换行",[639,156781,156782,156786],{},[685,156783,156784],{},[32,156785,1595],{},[685,156787,156788],{},"制表符",[639,156790,156791,156796],{},[685,156792,156793],{},[32,156794,156795],{},"\\\\",[685,156797,156798],{},"反斜杠",[639,156800,156801,156805],{},[685,156802,156803],{},[32,156804,156746],{},[685,156806,156807],{},"双引号",[639,156809,156810,156815],{},[685,156811,156812],{},[32,156813,156814],{},"\\'",[685,156816,156817],{},"单引号",[438,156819,156821],{"id":156820},"_29-字符串拼接","2.9 字符串拼接",[25,156823,156825],{"className":30704,"code":156824,"language":30706,"meta":30,"style":30},"name = \"小明\"\nprint(\"你好，\" + name)\n",[32,156826,156827,156835],{"__ignoreMap":30},[35,156828,156829,156831,156833],{"class":37,"line":38},[35,156830,146787],{"class":359},[35,156832,544],{"class":495},[35,156834,149604],{"class":306},[35,156836,156837,156839,156841,156844,156846],{"class":37,"line":45},[35,156838,30741],{"class":58},[35,156840,499],{"class":359},[35,156842,156843],{"class":306},"\"你好，\"",[35,156845,45892],{"class":495},[35,156847,156848],{"class":359}," name)\n",[21,156850,156851],{},"字符串只能和字符串拼接：",[25,156853,156855],{"className":30704,"code":156854,"language":30706,"meta":30,"style":30},"age = 18\nprint(\"年龄:\" + str(age))\n",[32,156856,156857,156865],{"__ignoreMap":30},[35,156858,156859,156861,156863],{"class":37,"line":38},[35,156860,146797],{"class":359},[35,156862,544],{"class":495},[35,156864,146802],{"class":58},[35,156866,156867,156869,156871,156873,156875,156877],{"class":37,"line":45},[35,156868,30741],{"class":58},[35,156870,499],{"class":359},[35,156872,146768],{"class":306},[35,156874,45892],{"class":495},[35,156876,74244],{"class":58},[35,156878,156879],{"class":359},"(age))\n",[21,156881,156882],{},"更推荐使用格式化字符串。",[438,156884,156886],{"id":156885},"_210-字符串格式化","2.10 字符串格式化",[465,156888,156890],{"id":156889},"_2101-百分号格式化","2.10.1 百分号格式化",[25,156892,156894],{"className":30704,"code":156893,"language":30706,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[32,156895,156896,156904,156912,156921,156925],{"__ignoreMap":30},[35,156897,156898,156900,156902],{"class":37,"line":38},[35,156899,146787],{"class":359},[35,156901,544],{"class":495},[35,156903,149604],{"class":306},[35,156905,156906,156908,156910],{"class":37,"line":45},[35,156907,146797],{"class":359},[35,156909,544],{"class":495},[35,156911,146802],{"class":58},[35,156913,156914,156916,156918],{"class":37,"line":55},[35,156915,155609],{"class":359},[35,156917,544],{"class":495},[35,156919,156920],{"class":58}," 95.5\n",[35,156922,156923],{"class":37,"line":65},[35,156924,141],{"emptyLinePlaceholder":140},[35,156926,156927,156929,156931,156934,156937,156940,156943,156946,156949,156951,156953],{"class":37,"line":74},[35,156928,30741],{"class":58},[35,156930,499],{"class":359},[35,156932,156933],{"class":306},"\"姓名:",[35,156935,156936],{"class":58},"%s",[35,156938,156939],{"class":306}," 年龄:",[35,156941,156942],{"class":58},"%d",[35,156944,156945],{"class":306}," 分数:",[35,156947,156948],{"class":58},"%.1f",[35,156950,747],{"class":306},[35,156952,156332],{"class":495},[35,156954,156955],{"class":359}," (name, age, score))\n",[21,156957,156958],{},"常用占位符：",[633,156960,156961,156970],{},[636,156962,156963],{},[639,156964,156965,156968],{},[642,156966,156967],{},"占位符",[642,156969,26200],{},[680,156971,156972,156980,156988],{},[639,156973,156974,156978],{},[685,156975,156976],{},[32,156977,156936],{},[685,156979,155475],{},[639,156981,156982,156986],{},[685,156983,156984],{},[32,156985,156942],{},[685,156987,155453],{},[639,156989,156990,156995],{},[685,156991,156992],{},[32,156993,156994],{},"%f",[685,156996,155464],{},[21,156998,156999],{},"精度控制：",[25,157001,157003],{"className":30704,"code":157002,"language":30706,"meta":30,"style":30},"price = 12.3456\nprint(\"%.2f\" % price)\n",[32,157004,157005,157014],{"__ignoreMap":30},[35,157006,157007,157009,157011],{"class":37,"line":38},[35,157008,146932],{"class":359},[35,157010,544],{"class":495},[35,157012,157013],{"class":58}," 12.3456\n",[35,157015,157016,157018,157020,157022,157025,157027,157029],{"class":37,"line":45},[35,157017,30741],{"class":58},[35,157019,499],{"class":359},[35,157021,747],{"class":306},[35,157023,157024],{"class":58},"%.2f",[35,157026,747],{"class":306},[35,157028,156332],{"class":495},[35,157030,157031],{"class":359}," price)\n",[465,157033,157035],{"id":157034},"_2102-format方法","2.10.2 format方法",[25,157037,157039],{"className":30704,"code":157038,"language":30706,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[32,157040,157041,157049,157057,157061,157080,157100],{"__ignoreMap":30},[35,157042,157043,157045,157047],{"class":37,"line":38},[35,157044,146787],{"class":359},[35,157046,544],{"class":495},[35,157048,149604],{"class":306},[35,157050,157051,157053,157055],{"class":37,"line":45},[35,157052,146797],{"class":359},[35,157054,544],{"class":495},[35,157056,146802],{"class":58},[35,157058,157059],{"class":37,"line":55},[35,157060,141],{"emptyLinePlaceholder":140},[35,157062,157063,157065,157067,157069,157071,157073,157075,157077],{"class":37,"line":65},[35,157064,30741],{"class":58},[35,157066,499],{"class":359},[35,157068,156933],{"class":306},[35,157070,32785],{"class":58},[35,157072,156939],{"class":306},[35,157074,32785],{"class":58},[35,157076,747],{"class":306},[35,157078,157079],{"class":359},".format(name, age))\n",[35,157081,157082,157084,157086,157088,157091,157093,157096,157098],{"class":37,"line":74},[35,157083,30741],{"class":58},[35,157085,499],{"class":359},[35,157087,156933],{"class":306},[35,157089,157090],{"class":58},"{0}",[35,157092,156939],{"class":306},[35,157094,157095],{"class":58},"{1}",[35,157097,747],{"class":306},[35,157099,157079],{"class":359},[35,157101,157102,157104,157106,157108,157111,157113,157116,157118,157121,157123,157125,157128,157130,157132],{"class":37,"line":83},[35,157103,30741],{"class":58},[35,157105,499],{"class":359},[35,157107,156933],{"class":306},[35,157109,157110],{"class":58},"{name}",[35,157112,156939],{"class":306},[35,157114,157115],{"class":58},"{age}",[35,157117,747],{"class":306},[35,157119,157120],{"class":359},".format(",[35,157122,80135],{"class":5550},[35,157124,544],{"class":495},[35,157126,157127],{"class":359},"name, ",[35,157129,70546],{"class":5550},[35,157131,544],{"class":495},[35,157133,157134],{"class":359},"age))\n",[465,157136,157138],{"id":157137},"_2103-f-string","2.10.3 f-string",[21,157140,157141],{},"推荐写法：",[25,157143,157145],{"className":30704,"code":157144,"language":30706,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[32,157146,157147,157155,157163,157171,157175],{"__ignoreMap":30},[35,157148,157149,157151,157153],{"class":37,"line":38},[35,157150,146787],{"class":359},[35,157152,544],{"class":495},[35,157154,149604],{"class":306},[35,157156,157157,157159,157161],{"class":37,"line":45},[35,157158,146797],{"class":359},[35,157160,544],{"class":495},[35,157162,146802],{"class":58},[35,157164,157165,157167,157169],{"class":37,"line":55},[35,157166,155609],{"class":359},[35,157168,544],{"class":495},[35,157170,156920],{"class":58},[35,157172,157173],{"class":37,"line":65},[35,157174,141],{"emptyLinePlaceholder":140},[35,157176,157177,157179,157181,157183,157185,157187,157189,157191,157193,157195,157197,157199,157201,157203,157206,157209,157211,157213],{"class":37,"line":74},[35,157178,30741],{"class":58},[35,157180,499],{"class":359},[35,157182,550],{"class":495},[35,157184,156933],{"class":306},[35,157186,1390],{"class":58},[35,157188,80135],{"class":359},[35,157190,1440],{"class":58},[35,157192,156939],{"class":306},[35,157194,1390],{"class":58},[35,157196,70546],{"class":359},[35,157198,1440],{"class":58},[35,157200,156945],{"class":306},[35,157202,1390],{"class":58},[35,157204,157205],{"class":359},"score",[35,157207,157208],{"class":495},":.1f",[35,157210,1440],{"class":58},[35,157212,747],{"class":306},[35,157214,505],{"class":359},[21,157216,157217],{},"表达式也可以放进去：",[25,157219,157221],{"className":30704,"code":157220,"language":30706,"meta":30,"style":30},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[32,157222,157223,157231,157239],{"__ignoreMap":30},[35,157224,157225,157227,157229],{"class":37,"line":38},[35,157226,146932],{"class":359},[35,157228,544],{"class":495},[35,157230,146937],{"class":58},[35,157232,157233,157235,157237],{"class":37,"line":45},[35,157234,146942],{"class":359},[35,157236,544],{"class":495},[35,157238,54753],{"class":58},[35,157240,157241,157243,157245,157247,157250,157252,157254,157256,157259,157261,157264],{"class":37,"line":55},[35,157242,30741],{"class":58},[35,157244,499],{"class":359},[35,157246,550],{"class":495},[35,157248,157249],{"class":306},"\"总价:",[35,157251,1390],{"class":58},[35,157253,146932],{"class":359},[35,157255,949],{"class":495},[35,157257,157258],{"class":359}," count",[35,157260,1440],{"class":58},[35,157262,157263],{"class":306},"元\"",[35,157265,505],{"class":359},[438,157267,157269],{"id":157268},"_211-input输入","2.11 input输入",[21,157271,157272,157275],{},[32,157273,157274],{},"input()"," 会暂停程序，等待用户输入。",[25,157277,157279],{"className":30704,"code":157278,"language":30706,"meta":30,"style":30},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[32,157280,157281,157295],{"__ignoreMap":30},[35,157282,157283,157285,157287,157289,157291,157293],{"class":37,"line":38},[35,157284,146787],{"class":359},[35,157286,544],{"class":495},[35,157288,60931],{"class":58},[35,157290,499],{"class":359},[35,157292,152630],{"class":306},[35,157294,505],{"class":359},[35,157296,157297,157299,157301,157303,157306,157308,157310,157312,157314],{"class":37,"line":45},[35,157298,30741],{"class":58},[35,157300,499],{"class":359},[35,157302,550],{"class":495},[35,157304,157305],{"class":306},"\"你好，",[35,157307,1390],{"class":58},[35,157309,80135],{"class":359},[35,157311,1440],{"class":58},[35,157313,747],{"class":306},[35,157315,505],{"class":359},[21,157317,157318],{},"输入整数：",[25,157320,157322],{"className":30704,"code":157321,"language":30706,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[32,157323,157324,157342],{"__ignoreMap":30},[35,157325,157326,157328,157330,157332,157334,157336,157338,157340],{"class":37,"line":38},[35,157327,146797],{"class":359},[35,157329,544],{"class":495},[35,157331,2723],{"class":58},[35,157333,499],{"class":359},[35,157335,54147],{"class":58},[35,157337,499],{"class":359},[35,157339,152645],{"class":306},[35,157341,30823],{"class":359},[35,157343,157344,157346,157348,157350,157353,157355,157357,157359,157362,157364],{"class":37,"line":45},[35,157345,30741],{"class":58},[35,157347,499],{"class":359},[35,157349,550],{"class":495},[35,157351,157352],{"class":306},"\"明年你",[35,157354,1390],{"class":58},[35,157356,146797],{"class":359},[35,157358,975],{"class":495},[35,157360,157361],{"class":58}," 1}",[35,157363,149655],{"class":306},[35,157365,505],{"class":359},[21,157367,157368],{},"输入小数：",[25,157370,157372],{"className":30704,"code":157371,"language":30706,"meta":30,"style":30},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[32,157373,157374,157393],{"__ignoreMap":30},[35,157375,157376,157378,157380,157382,157384,157386,157388,157391],{"class":37,"line":38},[35,157377,155582],{"class":359},[35,157379,544],{"class":495},[35,157381,110119],{"class":58},[35,157383,499],{"class":359},[35,157385,54147],{"class":58},[35,157387,499],{"class":359},[35,157389,157390],{"class":306},"\"请输入身高:\"",[35,157392,30823],{"class":359},[35,157394,157395,157397,157399,157401,157404,157406,157408,157411,157413,157416],{"class":37,"line":45},[35,157396,30741],{"class":58},[35,157398,499],{"class":359},[35,157400,550],{"class":495},[35,157402,157403],{"class":306},"\"身高:",[35,157405,1390],{"class":58},[35,157407,25313],{"class":359},[35,157409,157410],{"class":495},":.2f",[35,157412,1440],{"class":58},[35,157414,157415],{"class":306},"米\"",[35,157417,505],{"class":359},[438,157419,157421],{"id":157420},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[21,157423,123543],{},[14,157425,157426,157429,157432,157435],{},[17,157427,157428],{},"输入商品单价。",[17,157430,157431],{},"输入购买数量。",[17,157433,157434],{},"输入折扣，例如 0.8 表示八折。",[17,157436,157437],{},"输出最终金额，保留两位小数。",[21,157439,10369],{},[25,157441,157443],{"className":30704,"code":157442,"language":30706,"meta":30,"style":30},"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",[32,157444,157445,157464,157483,157503,157507,157527,157531,157554,157575,157597],{"__ignoreMap":30},[35,157446,157447,157449,157451,157453,157455,157457,157459,157462],{"class":37,"line":38},[35,157448,146932],{"class":359},[35,157450,544],{"class":495},[35,157452,110119],{"class":58},[35,157454,499],{"class":359},[35,157456,54147],{"class":58},[35,157458,499],{"class":359},[35,157460,157461],{"class":306},"\"请输入商品单价:\"",[35,157463,30823],{"class":359},[35,157465,157466,157468,157470,157472,157474,157476,157478,157481],{"class":37,"line":45},[35,157467,146942],{"class":359},[35,157469,544],{"class":495},[35,157471,2723],{"class":58},[35,157473,499],{"class":359},[35,157475,54147],{"class":58},[35,157477,499],{"class":359},[35,157479,157480],{"class":306},"\"请输入购买数量:\"",[35,157482,30823],{"class":359},[35,157484,157485,157488,157490,157492,157494,157496,157498,157501],{"class":37,"line":55},[35,157486,157487],{"class":359},"discount ",[35,157489,544],{"class":495},[35,157491,110119],{"class":58},[35,157493,499],{"class":359},[35,157495,54147],{"class":58},[35,157497,499],{"class":359},[35,157499,157500],{"class":306},"\"请输入折扣:\"",[35,157502,30823],{"class":359},[35,157504,157505],{"class":37,"line":65},[35,157506,141],{"emptyLinePlaceholder":140},[35,157508,157509,157512,157514,157517,157519,157522,157524],{"class":37,"line":74},[35,157510,157511],{"class":359},"total ",[35,157513,544],{"class":495},[35,157515,157516],{"class":359}," price ",[35,157518,949],{"class":495},[35,157520,157521],{"class":359}," count ",[35,157523,949],{"class":495},[35,157525,157526],{"class":359}," discount\n",[35,157528,157529],{"class":37,"line":83},[35,157530,141],{"emptyLinePlaceholder":140},[35,157532,157533,157535,157537,157539,157542,157544,157546,157548,157550,157552],{"class":37,"line":92},[35,157534,30741],{"class":58},[35,157536,499],{"class":359},[35,157538,550],{"class":495},[35,157540,157541],{"class":306},"\"商品单价:",[35,157543,1390],{"class":58},[35,157545,80140],{"class":359},[35,157547,157410],{"class":495},[35,157549,1440],{"class":58},[35,157551,747],{"class":306},[35,157553,505],{"class":359},[35,157555,157556,157558,157560,157562,157565,157567,157569,157571,157573],{"class":37,"line":101},[35,157557,30741],{"class":58},[35,157559,499],{"class":359},[35,157561,550],{"class":495},[35,157563,157564],{"class":306},"\"购买数量:",[35,157566,1390],{"class":58},[35,157568,84759],{"class":359},[35,157570,1440],{"class":58},[35,157572,747],{"class":306},[35,157574,505],{"class":359},[35,157576,157577,157579,157581,157583,157586,157588,157591,157593,157595],{"class":37,"line":110},[35,157578,30741],{"class":58},[35,157580,499],{"class":359},[35,157582,550],{"class":495},[35,157584,157585],{"class":306},"\"折扣:",[35,157587,1390],{"class":58},[35,157589,157590],{"class":359},"discount",[35,157592,1440],{"class":58},[35,157594,747],{"class":306},[35,157596,505],{"class":359},[35,157598,157599,157601,157603,157605,157608,157610,157613,157615,157617,157619],{"class":37,"line":119},[35,157600,30741],{"class":58},[35,157602,499],{"class":359},[35,157604,550],{"class":495},[35,157606,157607],{"class":306},"\"应付金额:",[35,157609,1390],{"class":58},[35,157611,157612],{"class":359},"total",[35,157614,157410],{"class":495},[35,157616,1440],{"class":58},[35,157618,157263],{"class":306},[35,157620,505],{"class":359},[438,157622,157624],{"id":157623},"_213-易错点","2.13 易错点",[14,157626,157627,157632,157638,157646,157649],{},[17,157628,157629,157631],{},[32,157630,157274],{}," 的结果是字符串，做运算前要转换。",[17,157633,157634,157635,28711],{},"字符串拼接时，数字要先 ",[32,157636,157637],{},"str()",[17,157639,157640,157642,157643,157645],{},[32,157641,544],{}," 是赋值，",[32,157644,3283],{}," 是比较。",[17,157647,157648],{},"Python 没有自增自减运算符。",[17,157650,157651],{},"浮点数计算可能有精度误差：",[25,157653,157655],{"className":30704,"code":157654,"language":30706,"meta":30,"style":30},"print(0.1 + 0.2)\n",[32,157656,157657],{"__ignoreMap":30},[35,157658,157659,157661,157663,157665,157667,157670],{"class":37,"line":38},[35,157660,30741],{"class":58},[35,157662,499],{"class":359},[35,157664,86535],{"class":58},[35,157666,45892],{"class":495},[35,157668,157669],{"class":58}," 0.2",[35,157671,505],{"class":359},[21,157673,157674,157675,157678],{},"金额计算如果要求严格，可以后续学习 ",[32,157676,157677],{},"decimal"," 模块。",[438,157680,157682],{"id":157681},"_214-本章练习","2.14 本章练习",[14,157684,157685,157688,157691,157694,157697],{},[17,157686,157687],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[17,157689,157690],{},"输入圆的半径，计算面积，保留两位小数。",[17,157692,157693],{},"输入工资和奖金，计算总收入。",[17,157695,157696],{},"输入摄氏温度，转换为华氏温度。",[17,157698,157699],{},"写一个 BMI 计算程序：",[25,157701,157704],{"className":157702,"code":157703,"language":5521,"meta":30},[5519],"BMI = 体重kg \u002F 身高m ** 2\n",[32,157705,157703],{"__ignoreMap":30},[416,157707,157708],{},"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":30,"searchDepth":45,"depth":45,"links":157710},[157711,157712,157713,157714,157715,157716,157717,157723,157724,157725,157730,157731,157732,157733],{"id":155272,"depth":45,"text":155273},{"id":155381,"depth":45,"text":155382},{"id":155552,"depth":45,"text":155553},{"id":155629,"depth":45,"text":155630},{"id":51057,"depth":45,"text":51058},{"id":155935,"depth":45,"text":155936},{"id":156161,"depth":45,"text":156162,"children":157718},[157719,157720,157721,157722],{"id":156165,"depth":55,"text":156166},{"id":156359,"depth":55,"text":156360},{"id":156447,"depth":55,"text":156448},{"id":156553,"depth":55,"text":156554},{"id":156662,"depth":45,"text":156663},{"id":156820,"depth":45,"text":156821},{"id":156885,"depth":45,"text":156886,"children":157726},[157727,157728,157729],{"id":156889,"depth":55,"text":156890},{"id":157034,"depth":55,"text":157035},{"id":157137,"depth":55,"text":157138},{"id":157268,"depth":45,"text":157269},{"id":157420,"depth":45,"text":157421},{"id":157623,"depth":45,"text":157624},{"id":157681,"depth":45,"text":157682},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155264,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157740,"title":157741,"body":157742,"description":421,"extension":422,"meta":159378,"navigation":140,"path":159379,"seo":159380,"stem":159381,"__hash__":159382},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157743,"toc":159359},[157744,157747,157751,157754,157769,157772,157800,157804,157854,157856,157872,157875,157901,157904,157908,157975,157978,157994,157998,158001,158119,158122,158129,158178,158184,158188,158191,158304,158307,158311,158315,158318,158368,158372,158375,158425,158429,158432,158470,158474,158477,158523,158526,158561,158565,158570,158573,158619,158621,158688,158692,158698,158809,158818,158822,158824,158835,158837,159003,159007,159009,159023,159025,159239,159243,159262,159279,159282,159328,159332,159356],[10,157745,157741],{"id":157746},"_3-判断语句",[438,157748,157750],{"id":157749},"_31-布尔值","3.1 布尔值",[21,157752,157753],{},"判断语句依赖布尔值：",[25,157755,157757],{"className":30704,"code":157756,"language":30706,"meta":30,"style":30},"True\nFalse\n",[32,157758,157759,157764],{"__ignoreMap":30},[35,157760,157761],{"class":37,"line":38},[35,157762,157763],{"class":58},"True\n",[35,157765,157766],{"class":37,"line":45},[35,157767,157768],{"class":58},"False\n",[21,157770,157771],{},"比较表达式会产生布尔值：",[25,157773,157775],{"className":30704,"code":157774,"language":30706,"meta":30,"style":30},"age = 18\nprint(age >= 18)  # True\n",[32,157776,157777,157785],{"__ignoreMap":30},[35,157778,157779,157781,157783],{"class":37,"line":38},[35,157780,146797],{"class":359},[35,157782,544],{"class":495},[35,157784,146802],{"class":58},[35,157786,157787,157789,157791,157793,157795,157797],{"class":37,"line":45},[35,157788,30741],{"class":58},[35,157790,156019],{"class":359},[35,157792,2060],{"class":495},[35,157794,156536],{"class":58},[35,157796,46134],{"class":359},[35,157798,157799],{"class":41},"# True\n",[438,157801,157803],{"id":157802},"_32-if基础语法","3.2 if基础语法",[25,157805,157807],{"className":30704,"code":157806,"language":30706,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[32,157808,157809,157827,157831,157843],{"__ignoreMap":30},[35,157810,157811,157813,157815,157817,157819,157821,157823,157825],{"class":37,"line":38},[35,157812,146797],{"class":359},[35,157814,544],{"class":495},[35,157816,2723],{"class":58},[35,157818,499],{"class":359},[35,157820,54147],{"class":58},[35,157822,499],{"class":359},[35,157824,152645],{"class":306},[35,157826,30823],{"class":359},[35,157828,157829],{"class":37,"line":45},[35,157830,141],{"emptyLinePlaceholder":140},[35,157832,157833,157835,157837,157839,157841],{"class":37,"line":55},[35,157834,1892],{"class":495},[35,157836,16041],{"class":359},[35,157838,2060],{"class":495},[35,157840,156536],{"class":58},[35,157842,4073],{"class":359},[35,157844,157845,157847,157849,157852],{"class":37,"line":65},[35,157846,31625],{"class":58},[35,157848,499],{"class":359},[35,157850,157851],{"class":306},"\"可以进入网吧\"",[35,157853,505],{"class":359},[21,157855,9359],{},[14,157857,157858,157863,157866,157869],{},[17,157859,157860,157862],{},[32,157861,1892],{}," 后面是条件表达式。",[17,157864,157865],{},"条件后面必须写冒号。",[17,157867,157868],{},"条件成立时执行缩进代码块。",[17,157870,157871],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[21,157873,157874],{},"错误示例：",[25,157876,157878],{"className":30704,"code":157877,"language":30706,"meta":30,"style":30},"if age >= 18\n    print(\"可以进入\")\n",[32,157879,157880,157890],{"__ignoreMap":30},[35,157881,157882,157884,157886,157888],{"class":37,"line":38},[35,157883,1892],{"class":495},[35,157885,16041],{"class":359},[35,157887,2060],{"class":495},[35,157889,146802],{"class":58},[35,157891,157892,157894,157896,157899],{"class":37,"line":45},[35,157893,31625],{"class":58},[35,157895,499],{"class":359},[35,157897,157898],{"class":306},"\"可以进入\"",[35,157900,505],{"class":359},[21,157902,157903],{},"缺少冒号。",[438,157905,157907],{"id":157906},"_33-if-else","3.3 if else",[25,157909,157911],{"className":30704,"code":157910,"language":30706,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[32,157912,157913,157931,157935,157947,157958,157964],{"__ignoreMap":30},[35,157914,157915,157917,157919,157921,157923,157925,157927,157929],{"class":37,"line":38},[35,157916,146797],{"class":359},[35,157918,544],{"class":495},[35,157920,2723],{"class":58},[35,157922,499],{"class":359},[35,157924,54147],{"class":58},[35,157926,499],{"class":359},[35,157928,152645],{"class":306},[35,157930,30823],{"class":359},[35,157932,157933],{"class":37,"line":45},[35,157934,141],{"emptyLinePlaceholder":140},[35,157936,157937,157939,157941,157943,157945],{"class":37,"line":55},[35,157938,1892],{"class":495},[35,157940,16041],{"class":359},[35,157942,2060],{"class":495},[35,157944,156536],{"class":58},[35,157946,4073],{"class":359},[35,157948,157949,157951,157953,157956],{"class":37,"line":65},[35,157950,31625],{"class":58},[35,157952,499],{"class":359},[35,157954,157955],{"class":306},"\"成年人\"",[35,157957,505],{"class":359},[35,157959,157960,157962],{"class":37,"line":74},[35,157961,2051],{"class":495},[35,157963,4073],{"class":359},[35,157965,157966,157968,157970,157973],{"class":37,"line":83},[35,157967,31625],{"class":58},[35,157969,499],{"class":359},[35,157971,157972],{"class":306},"\"未成年人\"",[35,157974,505],{"class":359},[21,157976,157977],{},"执行逻辑：",[14,157979,157980,157986,157991],{},[17,157981,157982,157983,157985],{},"条件成立，执行 ",[32,157984,1892],{}," 代码块。",[17,157987,157988,157989,157985],{},"条件不成立，执行 ",[32,157990,2051],{},[17,157992,157993],{},"两个代码块只会执行其中一个。",[438,157995,157997],{"id":157996},"_34-if-elif-else","3.4 if elif else",[21,157999,158000],{},"多条件判断：",[25,158002,158004],{"className":30704,"code":158003,"language":30706,"meta":30,"style":30},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[32,158005,158006,158024,158028,158042,158053,158067,158078,158091,158102,158108],{"__ignoreMap":30},[35,158007,158008,158010,158012,158014,158016,158018,158020,158022],{"class":37,"line":38},[35,158009,155609],{"class":359},[35,158011,544],{"class":495},[35,158013,2723],{"class":58},[35,158015,499],{"class":359},[35,158017,54147],{"class":58},[35,158019,499],{"class":359},[35,158021,152660],{"class":306},[35,158023,30823],{"class":359},[35,158025,158026],{"class":37,"line":45},[35,158027,141],{"emptyLinePlaceholder":140},[35,158029,158030,158032,158035,158037,158040],{"class":37,"line":55},[35,158031,1892],{"class":495},[35,158033,158034],{"class":359}," score ",[35,158036,2060],{"class":495},[35,158038,158039],{"class":58}," 90",[35,158041,4073],{"class":359},[35,158043,158044,158046,158048,158051],{"class":37,"line":65},[35,158045,31625],{"class":58},[35,158047,499],{"class":359},[35,158049,158050],{"class":306},"\"优秀\"",[35,158052,505],{"class":359},[35,158054,158055,158058,158060,158062,158065],{"class":37,"line":74},[35,158056,158057],{"class":495},"elif",[35,158059,158034],{"class":359},[35,158061,2060],{"class":495},[35,158063,158064],{"class":58}," 80",[35,158066,4073],{"class":359},[35,158068,158069,158071,158073,158076],{"class":37,"line":83},[35,158070,31625],{"class":58},[35,158072,499],{"class":359},[35,158074,158075],{"class":306},"\"良好\"",[35,158077,505],{"class":359},[35,158079,158080,158082,158084,158086,158089],{"class":37,"line":92},[35,158081,158057],{"class":495},[35,158083,158034],{"class":359},[35,158085,2060],{"class":495},[35,158087,158088],{"class":58}," 60",[35,158090,4073],{"class":359},[35,158092,158093,158095,158097,158100],{"class":37,"line":101},[35,158094,31625],{"class":58},[35,158096,499],{"class":359},[35,158098,158099],{"class":306},"\"及格\"",[35,158101,505],{"class":359},[35,158103,158104,158106],{"class":37,"line":110},[35,158105,2051],{"class":495},[35,158107,4073],{"class":359},[35,158109,158110,158112,158114,158117],{"class":37,"line":119},[35,158111,31625],{"class":58},[35,158113,499],{"class":359},[35,158115,158116],{"class":306},"\"不及格\"",[35,158118,505],{"class":359},[21,158120,158121],{},"注意判断顺序很重要。",[21,158123,158124,158125,158128],{},"如果把 ",[32,158126,158127],{},"score >= 60"," 放在最前面：",[25,158130,158132],{"className":30704,"code":158131,"language":30706,"meta":30,"style":30},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[32,158133,158134,158146,158156,158168],{"__ignoreMap":30},[35,158135,158136,158138,158140,158142,158144],{"class":37,"line":38},[35,158137,1892],{"class":495},[35,158139,158034],{"class":359},[35,158141,2060],{"class":495},[35,158143,158088],{"class":58},[35,158145,4073],{"class":359},[35,158147,158148,158150,158152,158154],{"class":37,"line":45},[35,158149,31625],{"class":58},[35,158151,499],{"class":359},[35,158153,158099],{"class":306},[35,158155,505],{"class":359},[35,158157,158158,158160,158162,158164,158166],{"class":37,"line":55},[35,158159,158057],{"class":495},[35,158161,158034],{"class":359},[35,158163,2060],{"class":495},[35,158165,158039],{"class":58},[35,158167,4073],{"class":359},[35,158169,158170,158172,158174,158176],{"class":37,"line":65},[35,158171,31625],{"class":58},[35,158173,499],{"class":359},[35,158175,158050],{"class":306},[35,158177,505],{"class":359},[21,158179,158180,158181,158183],{},"成绩 95 会先满足 ",[32,158182,158127],{},"，后面的优秀分支就不会执行。",[438,158185,158187],{"id":158186},"_35-判断语句嵌套","3.5 判断语句嵌套",[21,158189,158190],{},"嵌套判断就是在一个判断内部再写判断。",[25,158192,158194],{"className":30704,"code":158193,"language":30706,"meta":30,"style":30},"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",[32,158195,158196,158214,158229,158233,158245,158259,158269,158276,158287,158293],{"__ignoreMap":30},[35,158197,158198,158200,158202,158204,158206,158208,158210,158212],{"class":37,"line":38},[35,158199,146797],{"class":359},[35,158201,544],{"class":495},[35,158203,2723],{"class":58},[35,158205,499],{"class":359},[35,158207,54147],{"class":58},[35,158209,499],{"class":359},[35,158211,152645],{"class":306},[35,158213,30823],{"class":359},[35,158215,158216,158218,158220,158222,158224,158227],{"class":37,"line":45},[35,158217,156612],{"class":359},[35,158219,544],{"class":495},[35,158221,60931],{"class":58},[35,158223,499],{"class":359},[35,158225,158226],{"class":306},"\"是否有票(y\u002Fn):\"",[35,158228,505],{"class":359},[35,158230,158231],{"class":37,"line":55},[35,158232,141],{"emptyLinePlaceholder":140},[35,158234,158235,158237,158239,158241,158243],{"class":37,"line":65},[35,158236,1892],{"class":495},[35,158238,16041],{"class":359},[35,158240,2060],{"class":495},[35,158242,156536],{"class":58},[35,158244,4073],{"class":359},[35,158246,158247,158249,158252,158254,158257],{"class":37,"line":74},[35,158248,3435],{"class":495},[35,158250,158251],{"class":359}," has_ticket ",[35,158253,3283],{"class":495},[35,158255,158256],{"class":306}," \"y\"",[35,158258,4073],{"class":359},[35,158260,158261,158263,158265,158267],{"class":37,"line":83},[35,158262,32777],{"class":58},[35,158264,499],{"class":359},[35,158266,157898],{"class":306},[35,158268,505],{"class":359},[35,158270,158271,158274],{"class":37,"line":92},[35,158272,158273],{"class":495},"    else",[35,158275,4073],{"class":359},[35,158277,158278,158280,158282,158285],{"class":37,"line":101},[35,158279,32777],{"class":58},[35,158281,499],{"class":359},[35,158283,158284],{"class":306},"\"请先买票\"",[35,158286,505],{"class":359},[35,158288,158289,158291],{"class":37,"line":110},[35,158290,2051],{"class":495},[35,158292,4073],{"class":359},[35,158294,158295,158297,158299,158302],{"class":37,"line":119},[35,158296,31625],{"class":58},[35,158298,499],{"class":359},[35,158300,158301],{"class":306},"\"未成年人禁止进入\"",[35,158303,505],{"class":359},[21,158305,158306],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[438,158308,158310],{"id":158309},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[465,158312,158314],{"id":158313},"_361-and","3.6.1 and",[21,158316,158317],{},"两个条件都成立才成立。",[25,158319,158321],{"className":30704,"code":158320,"language":30706,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[32,158322,158323,158331,158339,158343,158358],{"__ignoreMap":30},[35,158324,158325,158327,158329],{"class":37,"line":38},[35,158326,146797],{"class":359},[35,158328,544],{"class":495},[35,158330,88390],{"class":58},[35,158332,158333,158335,158337],{"class":37,"line":45},[35,158334,156612],{"class":359},[35,158336,544],{"class":495},[35,158338,153850],{"class":58},[35,158340,158341],{"class":37,"line":55},[35,158342,141],{"emptyLinePlaceholder":140},[35,158344,158345,158347,158349,158351,158353,158355],{"class":37,"line":65},[35,158346,1892],{"class":495},[35,158348,16041],{"class":359},[35,158350,2060],{"class":495},[35,158352,156536],{"class":58},[35,158354,120746],{"class":495},[35,158356,158357],{"class":359}," has_ticket:\n",[35,158359,158360,158362,158364,158366],{"class":37,"line":74},[35,158361,31625],{"class":58},[35,158363,499],{"class":359},[35,158365,157898],{"class":306},[35,158367,505],{"class":359},[465,158369,158371],{"id":158370},"_362-or","3.6.2 or",[21,158373,158374],{},"只要一个条件成立就成立。",[25,158376,158378],{"className":30704,"code":158377,"language":30706,"meta":30,"style":30},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[32,158379,158380,158389,158398,158402,158414],{"__ignoreMap":30},[35,158381,158382,158385,158387],{"class":37,"line":38},[35,158383,158384],{"class":359},"is_vip ",[35,158386,544],{"class":495},[35,158388,126058],{"class":58},[35,158390,158391,158394,158396],{"class":37,"line":45},[35,158392,158393],{"class":359},"coupon ",[35,158395,544],{"class":495},[35,158397,153850],{"class":58},[35,158399,158400],{"class":37,"line":55},[35,158401,141],{"emptyLinePlaceholder":140},[35,158403,158404,158406,158409,158411],{"class":37,"line":65},[35,158405,1892],{"class":495},[35,158407,158408],{"class":359}," is_vip ",[35,158410,115412],{"class":495},[35,158412,158413],{"class":359}," coupon:\n",[35,158415,158416,158418,158420,158423],{"class":37,"line":74},[35,158417,31625],{"class":58},[35,158419,499],{"class":359},[35,158421,158422],{"class":306},"\"可以享受优惠\"",[35,158424,505],{"class":359},[465,158426,158428],{"id":158427},"_363-not","3.6.3 not",[21,158430,158431],{},"取反。",[25,158433,158435],{"className":30704,"code":158434,"language":30706,"meta":30,"style":30},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[32,158436,158437,158446,158450,158459],{"__ignoreMap":30},[35,158438,158439,158442,158444],{"class":37,"line":38},[35,158440,158441],{"class":359},"is_closed ",[35,158443,544],{"class":495},[35,158445,126058],{"class":58},[35,158447,158448],{"class":37,"line":45},[35,158449,141],{"emptyLinePlaceholder":140},[35,158451,158452,158454,158456],{"class":37,"line":55},[35,158453,1892],{"class":495},[35,158455,39256],{"class":495},[35,158457,158458],{"class":359}," is_closed:\n",[35,158460,158461,158463,158465,158468],{"class":37,"line":65},[35,158462,31625],{"class":58},[35,158464,499],{"class":359},[35,158466,158467],{"class":306},"\"店铺营业中\"",[35,158469,505],{"class":359},[438,158471,158473],{"id":158472},"_37-链式比较","3.7 链式比较",[21,158475,158476],{},"Python 支持链式比较：",[25,158478,158480],{"className":30704,"code":158479,"language":30706,"meta":30,"style":30},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[32,158481,158482,158491,158495,158512],{"__ignoreMap":30},[35,158483,158484,158486,158488],{"class":37,"line":38},[35,158485,155609],{"class":359},[35,158487,544],{"class":495},[35,158489,158490],{"class":58}," 85\n",[35,158492,158493],{"class":37,"line":45},[35,158494,141],{"emptyLinePlaceholder":140},[35,158496,158497,158499,158501,158504,158506,158508,158510],{"class":37,"line":55},[35,158498,1892],{"class":495},[35,158500,4427],{"class":58},[35,158502,158503],{"class":495}," \u003C=",[35,158505,158034],{"class":359},[35,158507,1949],{"class":495},[35,158509,6088],{"class":58},[35,158511,4073],{"class":359},[35,158513,158514,158516,158518,158521],{"class":37,"line":65},[35,158515,31625],{"class":58},[35,158517,499],{"class":359},[35,158519,158520],{"class":306},"\"成绩合法\"",[35,158522,505],{"class":359},[21,158524,158525],{},"等价于：",[25,158527,158529],{"className":30704,"code":158528,"language":30706,"meta":30,"style":30},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[32,158530,158531,158551],{"__ignoreMap":30},[35,158532,158533,158535,158537,158539,158541,158543,158545,158547,158549],{"class":37,"line":38},[35,158534,1892],{"class":495},[35,158536,158034],{"class":359},[35,158538,2060],{"class":495},[35,158540,4427],{"class":58},[35,158542,120746],{"class":495},[35,158544,158034],{"class":359},[35,158546,1949],{"class":495},[35,158548,6088],{"class":58},[35,158550,4073],{"class":359},[35,158552,158553,158555,158557,158559],{"class":37,"line":45},[35,158554,31625],{"class":58},[35,158556,499],{"class":359},[35,158558,158520],{"class":306},[35,158560,505],{"class":359},[438,158562,158564],{"id":158563},"_38-真值和假值","3.8 真值和假值",[21,158566,116789,158567,158569],{},[32,158568,1892],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[21,158571,158572],{},"假值：",[25,158574,158576],{"className":30704,"code":158575,"language":30706,"meta":30,"style":30},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[32,158577,158578,158582,158587,158591,158595,158600,158604,158608,158613],{"__ignoreMap":30},[35,158579,158580],{"class":37,"line":38},[35,158581,157768],{"class":58},[35,158583,158584],{"class":37,"line":45},[35,158585,158586],{"class":58},"None\n",[35,158588,158589],{"class":37,"line":55},[35,158590,3419],{"class":58},[35,158592,158593],{"class":37,"line":65},[35,158594,32668],{"class":58},[35,158596,158597],{"class":37,"line":74},[35,158598,158599],{"class":306},"\"\"\n",[35,158601,158602],{"class":37,"line":83},[35,158603,32683],{"class":359},[35,158605,158606],{"class":37,"line":92},[35,158607,2317],{"class":359},[35,158609,158610],{"class":37,"line":101},[35,158611,158612],{"class":359},"{}\n",[35,158614,158615,158617],{"class":37,"line":110},[35,158616,155541],{"class":58},[35,158618,2317],{"class":359},[21,158620,15469],{},[25,158622,158624],{"className":30704,"code":158623,"language":30706,"meta":30,"style":30},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[32,158625,158626,158640,158644,158651,158671,158677],{"__ignoreMap":30},[35,158627,158628,158630,158632,158634,158636,158638],{"class":37,"line":38},[35,158629,146787],{"class":359},[35,158631,544],{"class":495},[35,158633,60931],{"class":58},[35,158635,499],{"class":359},[35,158637,152630],{"class":306},[35,158639,505],{"class":359},[35,158641,158642],{"class":37,"line":45},[35,158643,141],{"emptyLinePlaceholder":140},[35,158645,158646,158648],{"class":37,"line":55},[35,158647,1892],{"class":495},[35,158649,158650],{"class":359}," name:\n",[35,158652,158653,158655,158657,158659,158661,158663,158665,158667,158669],{"class":37,"line":65},[35,158654,31625],{"class":58},[35,158656,499],{"class":359},[35,158658,550],{"class":495},[35,158660,157305],{"class":306},[35,158662,1390],{"class":58},[35,158664,80135],{"class":359},[35,158666,1440],{"class":58},[35,158668,747],{"class":306},[35,158670,505],{"class":359},[35,158672,158673,158675],{"class":37,"line":74},[35,158674,2051],{"class":495},[35,158676,4073],{"class":359},[35,158678,158679,158681,158683,158686],{"class":37,"line":83},[35,158680,31625],{"class":58},[35,158682,499],{"class":359},[35,158684,158685],{"class":306},"\"姓名不能为空\"",[35,158687,505],{"class":359},[438,158689,158691],{"id":158690},"_39-match语句","3.9 match语句",[21,158693,158694,158695,158697],{},"Python 3.10 开始支持 ",[32,158696,71590],{},"。它适合处理固定选项。",[25,158699,158701],{"className":30704,"code":158700,"language":30706,"meta":30,"style":30},"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",[32,158702,158703,158719,158723,158730,158740,158751,158760,158771,158780,158791,158798],{"__ignoreMap":30},[35,158704,158705,158708,158710,158712,158714,158717],{"class":37,"line":38},[35,158706,158707],{"class":359},"command ",[35,158709,544],{"class":495},[35,158711,60931],{"class":58},[35,158713,499],{"class":359},[35,158715,158716],{"class":306},"\"请输入命令:\"",[35,158718,505],{"class":359},[35,158720,158721],{"class":37,"line":45},[35,158722,141],{"emptyLinePlaceholder":140},[35,158724,158725,158727],{"class":37,"line":55},[35,158726,71590],{"class":495},[35,158728,158729],{"class":359}," command:\n",[35,158731,158732,158735,158738],{"class":37,"line":65},[35,158733,158734],{"class":495},"    case",[35,158736,158737],{"class":306}," \"start\"",[35,158739,4073],{"class":359},[35,158741,158742,158744,158746,158749],{"class":37,"line":74},[35,158743,32777],{"class":58},[35,158745,499],{"class":359},[35,158747,158748],{"class":306},"\"启动\"",[35,158750,505],{"class":359},[35,158752,158753,158755,158758],{"class":37,"line":83},[35,158754,158734],{"class":495},[35,158756,158757],{"class":306}," \"stop\"",[35,158759,4073],{"class":359},[35,158761,158762,158764,158766,158769],{"class":37,"line":92},[35,158763,32777],{"class":58},[35,158765,499],{"class":359},[35,158767,158768],{"class":306},"\"停止\"",[35,158770,505],{"class":359},[35,158772,158773,158775,158778],{"class":37,"line":101},[35,158774,158734],{"class":495},[35,158776,158777],{"class":306}," \"restart\"",[35,158779,4073],{"class":359},[35,158781,158782,158784,158786,158789],{"class":37,"line":110},[35,158783,32777],{"class":58},[35,158785,499],{"class":359},[35,158787,158788],{"class":306},"\"重启\"",[35,158790,505],{"class":359},[35,158792,158793,158795],{"class":37,"line":119},[35,158794,158734],{"class":495},[35,158796,158797],{"class":359}," _:\n",[35,158799,158800,158802,158804,158807],{"class":37,"line":128},[35,158801,32777],{"class":58},[35,158803,499],{"class":359},[35,158805,158806],{"class":306},"\"未知命令\"",[35,158808,505],{"class":359},[21,158810,158811,158812,158814,158815,158817],{},"入门阶段掌握 ",[32,158813,154909],{}," 更重要，",[32,158816,71590],{}," 可以作为补充。",[438,158819,158821],{"id":158820},"_310-小案例成绩等级","3.10 小案例：成绩等级",[21,158823,123543],{},[14,158825,158826,158829,158832],{},[17,158827,158828],{},"输入成绩。",[17,158830,158831],{},"判断成绩是否合法。",[17,158833,158834],{},"输出等级。",[21,158836,10369],{},[25,158838,158840],{"className":30704,"code":158839,"language":30706,"meta":30,"style":30},"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",[32,158841,158842,158860,158864,158882,158893,158905,158916,158928,158939,158952,158963,158975,158986,158992],{"__ignoreMap":30},[35,158843,158844,158846,158848,158850,158852,158854,158856,158858],{"class":37,"line":38},[35,158845,155609],{"class":359},[35,158847,544],{"class":495},[35,158849,110119],{"class":58},[35,158851,499],{"class":359},[35,158853,54147],{"class":58},[35,158855,499],{"class":359},[35,158857,152660],{"class":306},[35,158859,30823],{"class":359},[35,158861,158862],{"class":37,"line":45},[35,158863,141],{"emptyLinePlaceholder":140},[35,158865,158866,158868,158870,158872,158874,158876,158878,158880],{"class":37,"line":55},[35,158867,1892],{"class":495},[35,158869,39256],{"class":495},[35,158871,4427],{"class":58},[35,158873,158503],{"class":495},[35,158875,158034],{"class":359},[35,158877,1949],{"class":495},[35,158879,6088],{"class":58},[35,158881,4073],{"class":359},[35,158883,158884,158886,158888,158891],{"class":37,"line":65},[35,158885,31625],{"class":58},[35,158887,499],{"class":359},[35,158889,158890],{"class":306},"\"成绩不合法\"",[35,158892,505],{"class":359},[35,158894,158895,158897,158899,158901,158903],{"class":37,"line":74},[35,158896,158057],{"class":495},[35,158898,158034],{"class":359},[35,158900,2060],{"class":495},[35,158902,158039],{"class":58},[35,158904,4073],{"class":359},[35,158906,158907,158909,158911,158914],{"class":37,"line":83},[35,158908,31625],{"class":58},[35,158910,499],{"class":359},[35,158912,158913],{"class":306},"\"等级:A\"",[35,158915,505],{"class":359},[35,158917,158918,158920,158922,158924,158926],{"class":37,"line":92},[35,158919,158057],{"class":495},[35,158921,158034],{"class":359},[35,158923,2060],{"class":495},[35,158925,158064],{"class":58},[35,158927,4073],{"class":359},[35,158929,158930,158932,158934,158937],{"class":37,"line":101},[35,158931,31625],{"class":58},[35,158933,499],{"class":359},[35,158935,158936],{"class":306},"\"等级:B\"",[35,158938,505],{"class":359},[35,158940,158941,158943,158945,158947,158950],{"class":37,"line":110},[35,158942,158057],{"class":495},[35,158944,158034],{"class":359},[35,158946,2060],{"class":495},[35,158948,158949],{"class":58}," 70",[35,158951,4073],{"class":359},[35,158953,158954,158956,158958,158961],{"class":37,"line":119},[35,158955,31625],{"class":58},[35,158957,499],{"class":359},[35,158959,158960],{"class":306},"\"等级:C\"",[35,158962,505],{"class":359},[35,158964,158965,158967,158969,158971,158973],{"class":37,"line":128},[35,158966,158057],{"class":495},[35,158968,158034],{"class":359},[35,158970,2060],{"class":495},[35,158972,158088],{"class":58},[35,158974,4073],{"class":359},[35,158976,158977,158979,158981,158984],{"class":37,"line":137},[35,158978,31625],{"class":58},[35,158980,499],{"class":359},[35,158982,158983],{"class":306},"\"等级:D\"",[35,158985,505],{"class":359},[35,158987,158988,158990],{"class":37,"line":144},[35,158989,2051],{"class":495},[35,158991,4073],{"class":359},[35,158993,158994,158996,158998,159001],{"class":37,"line":150},[35,158995,31625],{"class":58},[35,158997,499],{"class":359},[35,158999,159000],{"class":306},"\"等级:E\"",[35,159002,505],{"class":359},[438,159004,159006],{"id":159005},"_311-小案例会员折扣","3.11 小案例：会员折扣",[21,159008,123543],{},[14,159010,159011,159014,159017,159020],{},[17,159012,159013],{},"输入消费金额。",[17,159015,159016],{},"输入会员等级，普通、银卡、金卡。",[17,159018,159019],{},"普通不打折，银卡 9 折，金卡 8 折。",[17,159021,159022],{},"满 500 再减 50。",[21,159024,10369],{},[25,159026,159028],{"className":30704,"code":159027,"language":30706,"meta":30,"style":30},"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",[32,159029,159030,159050,159066,159070,159078,159082,159096,159106,159119,159128,159141,159149,159155,159166,159170,159184,159188,159202,159212,159216],{"__ignoreMap":30},[35,159031,159032,159035,159037,159039,159041,159043,159045,159048],{"class":37,"line":38},[35,159033,159034],{"class":359},"amount ",[35,159036,544],{"class":495},[35,159038,110119],{"class":58},[35,159040,499],{"class":359},[35,159042,54147],{"class":58},[35,159044,499],{"class":359},[35,159046,159047],{"class":306},"\"请输入消费金额:\"",[35,159049,30823],{"class":359},[35,159051,159052,159055,159057,159059,159061,159064],{"class":37,"line":45},[35,159053,159054],{"class":359},"level ",[35,159056,544],{"class":495},[35,159058,60931],{"class":58},[35,159060,499],{"class":359},[35,159062,159063],{"class":306},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[35,159065,505],{"class":359},[35,159067,159068],{"class":37,"line":55},[35,159069,141],{"emptyLinePlaceholder":140},[35,159071,159072,159074,159076],{"class":37,"line":65},[35,159073,157487],{"class":359},[35,159075,544],{"class":495},[35,159077,56025],{"class":58},[35,159079,159080],{"class":37,"line":74},[35,159081,141],{"emptyLinePlaceholder":140},[35,159083,159084,159086,159089,159091,159094],{"class":37,"line":83},[35,159085,1892],{"class":495},[35,159087,159088],{"class":359}," level ",[35,159090,3283],{"class":495},[35,159092,159093],{"class":306}," \"银卡\"",[35,159095,4073],{"class":359},[35,159097,159098,159101,159103],{"class":37,"line":92},[35,159099,159100],{"class":359},"    discount ",[35,159102,544],{"class":495},[35,159104,159105],{"class":58}," 0.9\n",[35,159107,159108,159110,159112,159114,159117],{"class":37,"line":101},[35,159109,158057],{"class":495},[35,159111,159088],{"class":359},[35,159113,3283],{"class":495},[35,159115,159116],{"class":306}," \"金卡\"",[35,159118,4073],{"class":359},[35,159120,159121,159123,159125],{"class":37,"line":110},[35,159122,159100],{"class":359},[35,159124,544],{"class":495},[35,159126,159127],{"class":58}," 0.8\n",[35,159129,159130,159132,159134,159136,159139],{"class":37,"line":119},[35,159131,158057],{"class":495},[35,159133,159088],{"class":359},[35,159135,3283],{"class":495},[35,159137,159138],{"class":306}," \"普通\"",[35,159140,4073],{"class":359},[35,159142,159143,159145,159147],{"class":37,"line":128},[35,159144,159100],{"class":359},[35,159146,544],{"class":495},[35,159148,56025],{"class":58},[35,159150,159151,159153],{"class":37,"line":137},[35,159152,2051],{"class":495},[35,159154,4073],{"class":359},[35,159156,159157,159159,159161,159164],{"class":37,"line":144},[35,159158,31625],{"class":58},[35,159160,499],{"class":359},[35,159162,159163],{"class":306},"\"会员等级输入错误，按普通会员计算\"",[35,159165,505],{"class":359},[35,159167,159168],{"class":37,"line":150},[35,159169,141],{"emptyLinePlaceholder":140},[35,159171,159172,159175,159177,159180,159182],{"class":37,"line":159},[35,159173,159174],{"class":359},"pay ",[35,159176,544],{"class":495},[35,159178,159179],{"class":359}," amount ",[35,159181,949],{"class":495},[35,159183,157526],{"class":359},[35,159185,159186],{"class":37,"line":168},[35,159187,141],{"emptyLinePlaceholder":140},[35,159189,159190,159192,159195,159197,159200],{"class":37,"line":177},[35,159191,1892],{"class":495},[35,159193,159194],{"class":359}," pay ",[35,159196,2060],{"class":495},[35,159198,159199],{"class":58}," 500",[35,159201,4073],{"class":359},[35,159203,159204,159207,159209],{"class":37,"line":182},[35,159205,159206],{"class":359},"    pay ",[35,159208,150503],{"class":495},[35,159210,159211],{"class":58}," 50\n",[35,159213,159214],{"class":37,"line":188},[35,159215,141],{"emptyLinePlaceholder":140},[35,159217,159218,159220,159222,159224,159226,159228,159231,159233,159235,159237],{"class":37,"line":197},[35,159219,30741],{"class":58},[35,159221,499],{"class":359},[35,159223,550],{"class":495},[35,159225,157607],{"class":306},[35,159227,1390],{"class":58},[35,159229,159230],{"class":359},"pay",[35,159232,157410],{"class":495},[35,159234,1440],{"class":58},[35,159236,157263],{"class":306},[35,159238,505],{"class":359},[438,159240,159242],{"id":159241},"_312-易错点","3.12 易错点",[14,159244,159245,159248,159251,159254,159259],{},[17,159246,159247],{},"冒号不能漏。",[17,159249,159250],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[17,159252,159253],{},"多分支判断要注意顺序。",[17,159255,159256,159257,28711],{},"判断相等用 ",[32,159258,3283],{},[17,159260,159261],{},"字符串比较区分大小写：",[25,159263,159265],{"className":30704,"code":159264,"language":30706,"meta":30,"style":30},"\"Y\" == \"y\"  # False\n",[32,159266,159267],{"__ignoreMap":30},[35,159268,159269,159272,159274,159276],{"class":37,"line":38},[35,159270,159271],{"class":306},"\"Y\"",[35,159273,101881],{"class":495},[35,159275,158256],{"class":306},[35,159277,159278],{"class":41},"  # False\n",[21,159280,159281],{},"可转换后再判断：",[25,159283,159285],{"className":30704,"code":159284,"language":30706,"meta":30,"style":30},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[32,159286,159287,159304,159317],{"__ignoreMap":30},[35,159288,159289,159292,159294,159296,159298,159301],{"class":37,"line":38},[35,159290,159291],{"class":359},"answer ",[35,159293,544],{"class":495},[35,159295,60931],{"class":58},[35,159297,499],{"class":359},[35,159299,159300],{"class":306},"\"是否继续(y\u002Fn):\"",[35,159302,159303],{"class":359},").lower()\n",[35,159305,159306,159308,159311,159313,159315],{"class":37,"line":45},[35,159307,1892],{"class":495},[35,159309,159310],{"class":359}," answer ",[35,159312,3283],{"class":495},[35,159314,158256],{"class":306},[35,159316,4073],{"class":359},[35,159318,159319,159321,159323,159326],{"class":37,"line":55},[35,159320,31625],{"class":58},[35,159322,499],{"class":359},[35,159324,159325],{"class":306},"\"继续\"",[35,159327,505],{"class":359},[438,159329,159331],{"id":159330},"_313-本章练习","3.13 本章练习",[14,159333,159334,159337,159340,159343,159353],{},[17,159335,159336],{},"输入年龄，判断是否成年。",[17,159338,159339],{},"输入年份，判断是否为闰年。",[17,159341,159342],{},"输入三个数字，输出最大值。",[17,159344,159345,159346,159349,159350,159352],{},"写登录判断：用户名是 ",[32,159347,159348],{},"admin"," 且密码是 ",[32,159351,15418],{}," 才登录成功。",[17,159354,159355],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[416,159357,159358],{},"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":30,"searchDepth":45,"depth":45,"links":159360},[159361,159362,159363,159364,159365,159366,159371,159372,159373,159374,159375,159376,159377],{"id":157749,"depth":45,"text":157750},{"id":157802,"depth":45,"text":157803},{"id":157906,"depth":45,"text":157907},{"id":157996,"depth":45,"text":157997},{"id":158186,"depth":45,"text":158187},{"id":158309,"depth":45,"text":158310,"children":159367},[159368,159369,159370],{"id":158313,"depth":55,"text":158314},{"id":158370,"depth":55,"text":158371},{"id":158427,"depth":55,"text":158428},{"id":158472,"depth":45,"text":158473},{"id":158563,"depth":45,"text":158564},{"id":158690,"depth":45,"text":158691},{"id":158820,"depth":45,"text":158821},{"id":159005,"depth":45,"text":159006},{"id":159241,"depth":45,"text":159242},{"id":159330,"depth":45,"text":159331},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157741,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159384,"title":159385,"body":159386,"description":421,"extension":422,"meta":161155,"navigation":140,"path":161156,"seo":161157,"stem":161158,"__hash__":161159},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159387,"toc":161135},[159388,159391,159395,159401,159404,159421,159425,159427,159444,159446,159491,159493,159510,159514,159517,159583,159586,159604,159608,159769,159778,159782,159786,159791,159838,159840,159846,159850,159855,159902,159904,159910,159914,159919,159955,159958,160005,160009,160015,160073,160078,160109,160114,160118,160173,160176,160248,160251,160310,160314,160317,160392,160395,160399,160505,160508,160534,160538,160550,160619,160622,160714,160718,160720,160731,160733,160863,160867,161069,161077,161081,161111,161115,161132],[10,159389,159385],{"id":159390},"_4-循环语句",[438,159392,159394],{"id":159393},"_41-为什么需要循环","4.1 为什么需要循环",[21,159396,159397,159398,159400],{},"如果要输出 1 到 100，不应该写 100 行 ",[32,159399,146723],{},"，而应该用循环。",[21,159402,159403],{},"循环适合处理重复任务：",[14,159405,159406,159409,159412,159415,159418],{},[17,159407,159408],{},"重复输出。",[17,159410,159411],{},"重复输入。",[17,159413,159414],{},"遍历数据。",[17,159416,159417],{},"持续执行菜单。",[17,159419,159420],{},"批量处理文件或数据。",[438,159422,159424],{"id":159423},"_42-while循环","4.2 while循环",[21,159426,5515],{},[25,159428,159430],{"className":30704,"code":159429,"language":30706,"meta":30,"style":30},"while 条件:\n    循环体\n",[32,159431,159432,159439],{"__ignoreMap":30},[35,159433,159434,159436],{"class":37,"line":38},[35,159435,108985],{"class":495},[35,159437,159438],{"class":359}," 条件:\n",[35,159440,159441],{"class":37,"line":45},[35,159442,159443],{"class":359},"    循环体\n",[21,159445,15469],{},[25,159447,159449],{"className":30704,"code":159448,"language":30706,"meta":30,"style":30},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[32,159450,159451,159459,159463,159475,159482],{"__ignoreMap":30},[35,159452,159453,159455,159457],{"class":37,"line":38},[35,159454,100473],{"class":359},[35,159456,544],{"class":495},[35,159458,56025],{"class":58},[35,159460,159461],{"class":37,"line":45},[35,159462,141],{"emptyLinePlaceholder":140},[35,159464,159465,159467,159469,159471,159473],{"class":37,"line":55},[35,159466,108985],{"class":495},[35,159468,9772],{"class":359},[35,159470,1949],{"class":495},[35,159472,2489],{"class":58},[35,159474,4073],{"class":359},[35,159476,159477,159479],{"class":37,"line":65},[35,159478,31625],{"class":58},[35,159480,159481],{"class":359},"(i)\n",[35,159483,159484,159487,159489],{"class":37,"line":74},[35,159485,159486],{"class":359},"    i ",[35,159488,9811],{"class":495},[35,159490,56025],{"class":58},[21,159492,81254],{},[14,159494,159495,159501,159504,159507],{},[17,159496,159497,159498,28711],{},"判断条件 ",[32,159499,159500],{},"i \u003C= 5",[17,159502,159503],{},"条件成立，执行循环体。",[17,159505,159506],{},"执行完后回到条件判断。",[17,159508,159509],{},"条件不成立，退出循环。",[438,159511,159513],{"id":159512},"_43-while累加","4.3 while累加",[21,159515,159516],{},"计算 1 到 100 的和：",[25,159518,159520],{"className":30704,"code":159519,"language":30706,"meta":30,"style":30},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[32,159521,159522,159530,159538,159542,159554,159564,159572,159576],{"__ignoreMap":30},[35,159523,159524,159526,159528],{"class":37,"line":38},[35,159525,100473],{"class":359},[35,159527,544],{"class":495},[35,159529,56025],{"class":58},[35,159531,159532,159534,159536],{"class":37,"line":45},[35,159533,157511],{"class":359},[35,159535,544],{"class":495},[35,159537,47659],{"class":58},[35,159539,159540],{"class":37,"line":55},[35,159541,141],{"emptyLinePlaceholder":140},[35,159543,159544,159546,159548,159550,159552],{"class":37,"line":65},[35,159545,108985],{"class":495},[35,159547,9772],{"class":359},[35,159549,1949],{"class":495},[35,159551,6088],{"class":58},[35,159553,4073],{"class":359},[35,159555,159556,159559,159561],{"class":37,"line":74},[35,159557,159558],{"class":359},"    total ",[35,159560,9811],{"class":495},[35,159562,159563],{"class":359}," i\n",[35,159565,159566,159568,159570],{"class":37,"line":83},[35,159567,159486],{"class":359},[35,159569,9811],{"class":495},[35,159571,56025],{"class":58},[35,159573,159574],{"class":37,"line":92},[35,159575,141],{"emptyLinePlaceholder":140},[35,159577,159578,159580],{"class":37,"line":101},[35,159579,30741],{"class":58},[35,159581,159582],{"class":359},"(total)\n",[21,159584,159585],{},"核心思想：",[14,159587,159588,159593,159598],{},[17,159589,159590,159592],{},[32,159591,935],{}," 控制循环次数。",[17,159594,159595,159597],{},[32,159596,157612],{}," 保存累加结果。",[17,159599,159600,159601,159603],{},"每轮循环都要更新 ",[32,159602,935],{},"，否则可能死循环。",[438,159605,159607],{"id":159606},"_44-while猜数字","4.4 while猜数字",[25,159609,159611],{"className":30704,"code":159610,"language":30706,"meta":30,"style":30},"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",[32,159612,159613,159619,159623,159640,159648,159652,159660,159680,159689,159693,159705,159716,159726,159737,159743,159765],{"__ignoreMap":30},[35,159614,159615,159617],{"class":37,"line":38},[35,159616,30718],{"class":495},[35,159618,45654],{"class":359},[35,159620,159621],{"class":37,"line":45},[35,159622,141],{"emptyLinePlaceholder":140},[35,159624,159625,159627,159629,159632,159634,159636,159638],{"class":37,"line":55},[35,159626,159291],{"class":359},[35,159628,544],{"class":495},[35,159630,159631],{"class":359}," random.randint(",[35,159633,713],{"class":58},[35,159635,12769],{"class":359},[35,159637,807],{"class":58},[35,159639,505],{"class":359},[35,159641,159642,159644,159646],{"class":37,"line":65},[35,159643,146942],{"class":359},[35,159645,544],{"class":495},[35,159647,47659],{"class":58},[35,159649,159650],{"class":37,"line":74},[35,159651,141],{"emptyLinePlaceholder":140},[35,159653,159654,159656,159658],{"class":37,"line":83},[35,159655,108985],{"class":495},[35,159657,95617],{"class":58},[35,159659,4073],{"class":359},[35,159661,159662,159665,159667,159669,159671,159673,159675,159678],{"class":37,"line":92},[35,159663,159664],{"class":359},"    guess ",[35,159666,544],{"class":495},[35,159668,2723],{"class":58},[35,159670,499],{"class":359},[35,159672,54147],{"class":58},[35,159674,499],{"class":359},[35,159676,159677],{"class":306},"\"请输入1到100之间的数字:\"",[35,159679,30823],{"class":359},[35,159681,159682,159685,159687],{"class":37,"line":101},[35,159683,159684],{"class":359},"    count ",[35,159686,9811],{"class":495},[35,159688,56025],{"class":58},[35,159690,159691],{"class":37,"line":110},[35,159692,141],{"emptyLinePlaceholder":140},[35,159694,159695,159697,159700,159702],{"class":37,"line":119},[35,159696,3435],{"class":495},[35,159698,159699],{"class":359}," guess ",[35,159701,1454],{"class":495},[35,159703,159704],{"class":359}," answer:\n",[35,159706,159707,159709,159711,159714],{"class":37,"line":128},[35,159708,32777],{"class":58},[35,159710,499],{"class":359},[35,159712,159713],{"class":306},"\"猜大了\"",[35,159715,505],{"class":359},[35,159717,159718,159720,159722,159724],{"class":37,"line":137},[35,159719,39619],{"class":495},[35,159721,159699],{"class":359},[35,159723,1404],{"class":495},[35,159725,159704],{"class":359},[35,159727,159728,159730,159732,159735],{"class":37,"line":144},[35,159729,32777],{"class":58},[35,159731,499],{"class":359},[35,159733,159734],{"class":306},"\"猜小了\"",[35,159736,505],{"class":359},[35,159738,159739,159741],{"class":37,"line":150},[35,159740,158273],{"class":495},[35,159742,4073],{"class":359},[35,159744,159745,159747,159749,159751,159754,159756,159758,159760,159763],{"class":37,"line":159},[35,159746,32777],{"class":58},[35,159748,499],{"class":359},[35,159750,550],{"class":495},[35,159752,159753],{"class":306},"\"猜对了，一共猜了",[35,159755,1390],{"class":58},[35,159757,84759],{"class":359},[35,159759,1440],{"class":58},[35,159761,159762],{"class":306},"次\"",[35,159764,505],{"class":359},[35,159766,159767],{"class":37,"line":168},[35,159768,31953],{"class":495},[21,159770,159771,159774,159775,159777],{},[32,159772,159773],{},"while True"," 表示无限循环，通常配合 ",[32,159776,2394],{}," 使用。",[438,159779,159781],{"id":159780},"_45-break和continue","4.5 break和continue",[465,159783,159785],{"id":159784},"_451-break","4.5.1 break",[21,159787,159788,159790],{},[32,159789,2394],{}," 直接结束整个循环。",[25,159792,159794],{"className":30704,"code":159793,"language":30706,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[32,159795,159796,159816,159828,159832],{"__ignoreMap":30},[35,159797,159798,159800,159802,159804,159806,159808,159810,159812,159814],{"class":37,"line":38},[35,159799,3359],{"class":495},[35,159801,9772],{"class":359},[35,159803,26374],{"class":495},[35,159805,32769],{"class":58},[35,159807,499],{"class":359},[35,159809,713],{"class":58},[35,159811,12769],{"class":359},[35,159813,408],{"class":58},[35,159815,31112],{"class":359},[35,159817,159818,159820,159822,159824,159826],{"class":37,"line":45},[35,159819,3435],{"class":495},[35,159821,9772],{"class":359},[35,159823,3283],{"class":495},[35,159825,78395],{"class":58},[35,159827,4073],{"class":359},[35,159829,159830],{"class":37,"line":55},[35,159831,31953],{"class":495},[35,159833,159834,159836],{"class":37,"line":65},[35,159835,31625],{"class":58},[35,159837,159481],{"class":359},[21,159839,146708],{},[25,159841,159844],{"className":159842,"code":159843,"language":5521,"meta":30},[5519],"1\n2\n",[32,159845,159843],{"__ignoreMap":30},[465,159847,159849],{"id":159848},"_452-continue","4.5.2 continue",[21,159851,159852,159854],{},[32,159853,154923],{}," 跳过本轮剩余代码，进入下一轮循环。",[25,159856,159858],{"className":30704,"code":159857,"language":30706,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[32,159859,159860,159880,159892,159896],{"__ignoreMap":30},[35,159861,159862,159864,159866,159868,159870,159872,159874,159876,159878],{"class":37,"line":38},[35,159863,3359],{"class":495},[35,159865,9772],{"class":359},[35,159867,26374],{"class":495},[35,159869,32769],{"class":58},[35,159871,499],{"class":359},[35,159873,713],{"class":58},[35,159875,12769],{"class":359},[35,159877,408],{"class":58},[35,159879,31112],{"class":359},[35,159881,159882,159884,159886,159888,159890],{"class":37,"line":45},[35,159883,3435],{"class":495},[35,159885,9772],{"class":359},[35,159887,3283],{"class":495},[35,159889,78395],{"class":58},[35,159891,4073],{"class":359},[35,159893,159894],{"class":37,"line":55},[35,159895,148763],{"class":495},[35,159897,159898,159900],{"class":37,"line":65},[35,159899,31625],{"class":58},[35,159901,159481],{"class":359},[21,159903,146708],{},[25,159905,159908],{"className":159906,"code":159907,"language":5521,"meta":30},[5519],"1\n2\n4\n5\n",[32,159909,159907],{"__ignoreMap":30},[438,159911,159913],{"id":159912},"_46-for循环","4.6 for循环",[21,159915,159916,159918],{},[32,159917,3359],{}," 常用于遍历序列。",[25,159920,159922],{"className":30704,"code":159921,"language":30706,"meta":30,"style":30},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[32,159923,159924,159933,159937,159948],{"__ignoreMap":30},[35,159925,159926,159928,159930],{"class":37,"line":38},[35,159927,146787],{"class":359},[35,159929,544],{"class":495},[35,159931,159932],{"class":306}," \"python\"\n",[35,159934,159935],{"class":37,"line":45},[35,159936,141],{"emptyLinePlaceholder":140},[35,159938,159939,159941,159944,159946],{"class":37,"line":55},[35,159940,3359],{"class":495},[35,159942,159943],{"class":359}," ch ",[35,159945,26374],{"class":495},[35,159947,158650],{"class":359},[35,159949,159950,159952],{"class":37,"line":65},[35,159951,31625],{"class":58},[35,159953,159954],{"class":359},"(ch)\n",[21,159956,159957],{},"遍历列表：",[25,159959,159961],{"className":30704,"code":159960,"language":30706,"meta":30,"style":30},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[32,159962,159963,159985,159989,159999],{"__ignoreMap":30},[35,159964,159965,159968,159970,159972,159974,159976,159978,159980,159983],{"class":37,"line":38},[35,159966,159967],{"class":359},"students ",[35,159969,544],{"class":495},[35,159971,52552],{"class":359},[35,159973,150139],{"class":306},[35,159975,12769],{"class":359},[35,159977,151187],{"class":306},[35,159979,12769],{"class":359},[35,159981,159982],{"class":306},"\"小刚\"",[35,159984,33572],{"class":359},[35,159986,159987],{"class":37,"line":45},[35,159988,141],{"emptyLinePlaceholder":140},[35,159990,159991,159993,159995,159997],{"class":37,"line":55},[35,159992,3359],{"class":495},[35,159994,152388],{"class":359},[35,159996,26374],{"class":495},[35,159998,152393],{"class":359},[35,160000,160001,160003],{"class":37,"line":65},[35,160002,31625],{"class":58},[35,160004,150293],{"class":359},[438,160006,160008],{"id":160007},"_47-range函数","4.7 range函数",[21,160010,160011,160014],{},[32,160012,160013],{},"range()"," 用于生成整数序列。",[25,160016,160018],{"className":30704,"code":160017,"language":30706,"meta":30,"style":30},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[32,160019,160020,160034,160052],{"__ignoreMap":30},[35,160021,160022,160024,160026,160028,160031],{"class":37,"line":38},[35,160023,33742],{"class":58},[35,160025,499],{"class":359},[35,160027,372],{"class":58},[35,160029,160030],{"class":359},")          ",[35,160032,160033],{"class":41},"# 0,1,2,3,4\n",[35,160035,160036,160038,160040,160042,160044,160046,160049],{"class":37,"line":45},[35,160037,33742],{"class":58},[35,160039,499],{"class":359},[35,160041,713],{"class":58},[35,160043,12769],{"class":359},[35,160045,372],{"class":58},[35,160047,160048],{"class":359},")       ",[35,160050,160051],{"class":41},"# 1,2,3,4\n",[35,160053,160054,160056,160058,160060,160062,160064,160066,160068,160070],{"class":37,"line":55},[35,160055,33742],{"class":58},[35,160057,499],{"class":359},[35,160059,713],{"class":58},[35,160061,12769],{"class":359},[35,160063,940],{"class":58},[35,160065,12769],{"class":359},[35,160067,574],{"class":58},[35,160069,155912],{"class":359},[35,160071,160072],{"class":41},"# 1,3,5,7,9\n",[21,160074,160075,160076,24950],{},"配合 ",[32,160077,3359],{},[25,160079,160081],{"className":30704,"code":160080,"language":30706,"meta":30,"style":30},"for i in range(1, 6):\n    print(i)\n",[32,160082,160083,160103],{"__ignoreMap":30},[35,160084,160085,160087,160089,160091,160093,160095,160097,160099,160101],{"class":37,"line":38},[35,160086,3359],{"class":495},[35,160088,9772],{"class":359},[35,160090,26374],{"class":495},[35,160092,32769],{"class":58},[35,160094,499],{"class":359},[35,160096,713],{"class":58},[35,160098,12769],{"class":359},[35,160100,408],{"class":58},[35,160102,31112],{"class":359},[35,160104,160105,160107],{"class":37,"line":45},[35,160106,31625],{"class":58},[35,160108,159481],{"class":359},[21,160110,9359,160111,160113],{},[32,160112,33742],{}," 的结束值不包含在内。",[438,160115,160117],{"id":160116},"_48-for循环求和","4.8 for循环求和",[25,160119,160121],{"className":30704,"code":160120,"language":30706,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[32,160122,160123,160131,160135,160155,160163,160167],{"__ignoreMap":30},[35,160124,160125,160127,160129],{"class":37,"line":38},[35,160126,157511],{"class":359},[35,160128,544],{"class":495},[35,160130,47659],{"class":58},[35,160132,160133],{"class":37,"line":45},[35,160134,141],{"emptyLinePlaceholder":140},[35,160136,160137,160139,160141,160143,160145,160147,160149,160151,160153],{"class":37,"line":55},[35,160138,3359],{"class":495},[35,160140,9772],{"class":359},[35,160142,26374],{"class":495},[35,160144,32769],{"class":58},[35,160146,499],{"class":359},[35,160148,713],{"class":58},[35,160150,12769],{"class":359},[35,160152,832],{"class":58},[35,160154,31112],{"class":359},[35,160156,160157,160159,160161],{"class":37,"line":65},[35,160158,159558],{"class":359},[35,160160,9811],{"class":495},[35,160162,159563],{"class":359},[35,160164,160165],{"class":37,"line":74},[35,160166,141],{"emptyLinePlaceholder":140},[35,160168,160169,160171],{"class":37,"line":83},[35,160170,30741],{"class":58},[35,160172,159582],{"class":359},[21,160174,160175],{},"求偶数和：",[25,160177,160179],{"className":30704,"code":160178,"language":30706,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[32,160180,160181,160189,160193,160213,160229,160238,160242],{"__ignoreMap":30},[35,160182,160183,160185,160187],{"class":37,"line":38},[35,160184,157511],{"class":359},[35,160186,544],{"class":495},[35,160188,47659],{"class":58},[35,160190,160191],{"class":37,"line":45},[35,160192,141],{"emptyLinePlaceholder":140},[35,160194,160195,160197,160199,160201,160203,160205,160207,160209,160211],{"class":37,"line":55},[35,160196,3359],{"class":495},[35,160198,9772],{"class":359},[35,160200,26374],{"class":495},[35,160202,32769],{"class":58},[35,160204,499],{"class":359},[35,160206,713],{"class":58},[35,160208,12769],{"class":359},[35,160210,832],{"class":58},[35,160212,31112],{"class":359},[35,160214,160215,160217,160219,160221,160223,160225,160227],{"class":37,"line":65},[35,160216,3435],{"class":495},[35,160218,9772],{"class":359},[35,160220,823],{"class":495},[35,160222,15089],{"class":58},[35,160224,101881],{"class":495},[35,160226,4427],{"class":58},[35,160228,4073],{"class":359},[35,160230,160231,160234,160236],{"class":37,"line":74},[35,160232,160233],{"class":359},"        total ",[35,160235,9811],{"class":495},[35,160237,159563],{"class":359},[35,160239,160240],{"class":37,"line":83},[35,160241,141],{"emptyLinePlaceholder":140},[35,160243,160244,160246],{"class":37,"line":92},[35,160245,30741],{"class":58},[35,160247,159582],{"class":359},[21,160249,160250],{},"也可以：",[25,160252,160254],{"className":30704,"code":160253,"language":30706,"meta":30,"style":30},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[32,160255,160256,160264,160268,160292,160300,160304],{"__ignoreMap":30},[35,160257,160258,160260,160262],{"class":37,"line":38},[35,160259,157511],{"class":359},[35,160261,544],{"class":495},[35,160263,47659],{"class":58},[35,160265,160266],{"class":37,"line":45},[35,160267,141],{"emptyLinePlaceholder":140},[35,160269,160270,160272,160274,160276,160278,160280,160282,160284,160286,160288,160290],{"class":37,"line":55},[35,160271,3359],{"class":495},[35,160273,9772],{"class":359},[35,160275,26374],{"class":495},[35,160277,32769],{"class":58},[35,160279,499],{"class":359},[35,160281,574],{"class":58},[35,160283,12769],{"class":359},[35,160285,832],{"class":58},[35,160287,12769],{"class":359},[35,160289,574],{"class":58},[35,160291,31112],{"class":359},[35,160293,160294,160296,160298],{"class":37,"line":65},[35,160295,159558],{"class":359},[35,160297,9811],{"class":495},[35,160299,159563],{"class":359},[35,160301,160302],{"class":37,"line":74},[35,160303,141],{"emptyLinePlaceholder":140},[35,160305,160306,160308],{"class":37,"line":83},[35,160307,30741],{"class":58},[35,160309,159582],{"class":359},[438,160311,160313],{"id":160312},"_49-循环嵌套","4.9 循环嵌套",[21,160315,160316],{},"嵌套循环就是循环里面再写循环。",[25,160318,160320],{"className":30704,"code":160319,"language":30706,"meta":30,"style":30},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[32,160321,160322,160342,160362],{"__ignoreMap":30},[35,160323,160324,160326,160328,160330,160332,160334,160336,160338,160340],{"class":37,"line":38},[35,160325,3359],{"class":495},[35,160327,9772],{"class":359},[35,160329,26374],{"class":495},[35,160331,32769],{"class":58},[35,160333,499],{"class":359},[35,160335,713],{"class":58},[35,160337,12769],{"class":359},[35,160339,789],{"class":58},[35,160341,31112],{"class":359},[35,160343,160344,160346,160348,160350,160352,160354,160356,160358,160360],{"class":37,"line":45},[35,160345,3535],{"class":495},[35,160347,9834],{"class":359},[35,160349,26374],{"class":495},[35,160351,32769],{"class":58},[35,160353,499],{"class":359},[35,160355,713],{"class":58},[35,160357,12769],{"class":359},[35,160359,789],{"class":58},[35,160361,31112],{"class":359},[35,160363,160364,160366,160368,160370,160373,160375,160377,160379,160382,160384,160386,160388,160390],{"class":37,"line":55},[35,160365,32777],{"class":58},[35,160367,499],{"class":359},[35,160369,550],{"class":495},[35,160371,160372],{"class":306},"\"i=",[35,160374,1390],{"class":58},[35,160376,935],{"class":359},[35,160378,1440],{"class":58},[35,160380,160381],{"class":306},", j=",[35,160383,1390],{"class":58},[35,160385,961],{"class":359},[35,160387,1440],{"class":58},[35,160389,747],{"class":306},[35,160391,505],{"class":359},[21,160393,160394],{},"外层循环执行一次，内层循环执行完整一轮。",[438,160396,160398],{"id":160397},"_410-九九乘法表","4.10 九九乘法表",[25,160400,160402],{"className":30704,"code":160401,"language":30706,"meta":30,"style":30},"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",[32,160403,160404,160424,160447,160499],{"__ignoreMap":30},[35,160405,160406,160408,160410,160412,160414,160416,160418,160420,160422],{"class":37,"line":38},[35,160407,3359],{"class":495},[35,160409,9772],{"class":359},[35,160411,26374],{"class":495},[35,160413,32769],{"class":58},[35,160415,499],{"class":359},[35,160417,713],{"class":58},[35,160419,12769],{"class":359},[35,160421,940],{"class":58},[35,160423,31112],{"class":359},[35,160425,160426,160428,160430,160432,160434,160436,160438,160441,160443,160445],{"class":37,"line":45},[35,160427,3535],{"class":495},[35,160429,9834],{"class":359},[35,160431,26374],{"class":495},[35,160433,32769],{"class":58},[35,160435,499],{"class":359},[35,160437,713],{"class":58},[35,160439,160440],{"class":359},", i ",[35,160442,975],{"class":495},[35,160444,25450],{"class":58},[35,160446,31112],{"class":359},[35,160448,160449,160451,160453,160455,160457,160459,160461,160463,160465,160467,160469,160471,160473,160475,160477,160479,160481,160483,160485,160487,160489,160491,160493,160495,160497],{"class":37,"line":55},[35,160450,32777],{"class":58},[35,160452,499],{"class":359},[35,160454,550],{"class":495},[35,160456,747],{"class":306},[35,160458,1390],{"class":58},[35,160460,961],{"class":359},[35,160462,1440],{"class":58},[35,160464,949],{"class":306},[35,160466,1390],{"class":58},[35,160468,935],{"class":359},[35,160470,1440],{"class":58},[35,160472,544],{"class":306},[35,160474,1390],{"class":58},[35,160476,100473],{"class":359},[35,160478,949],{"class":495},[35,160480,3744],{"class":359},[35,160482,1440],{"class":58},[35,160484,747],{"class":306},[35,160486,12769],{"class":359},[35,160488,46127],{"class":5550},[35,160490,544],{"class":495},[35,160492,747],{"class":306},[35,160494,1595],{"class":58},[35,160496,747],{"class":306},[35,160498,505],{"class":359},[35,160500,160501,160503],{"class":37,"line":65},[35,160502,31625],{"class":58},[35,160504,2317],{"class":359},[21,160506,160507],{},"关键点：",[14,160509,160510,160516,160522,160528],{},[17,160511,160512,160513,160515],{},"外层 ",[32,160514,935],{}," 控制行。",[17,160517,160518,160519,160521],{},"内层 ",[32,160520,961],{}," 控制列。",[17,160523,160524,160525,160527],{},"每行结束后用 ",[32,160526,146723],{}," 换行。",[17,160529,160530,160533],{},[32,160531,160532],{},"end=\"\\t\""," 让同一行的内容横向排列。",[438,160535,160537],{"id":160536},"_411-循环else","4.11 循环else",[21,160539,160540,160541,160543,160544,160546,160547,160549],{},"Python 的循环可以带 ",[32,160542,2051],{},"。当循环正常结束时执行 ",[32,160545,2051],{},"，如果被 ",[32,160548,2394],{}," 打断，则不执行。",[25,160551,160553],{"className":30704,"code":160552,"language":30706,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,160554,160555,160575,160587,160598,160602,160608],{"__ignoreMap":30},[35,160556,160557,160559,160561,160563,160565,160567,160569,160571,160573],{"class":37,"line":38},[35,160558,3359],{"class":495},[35,160560,9772],{"class":359},[35,160562,26374],{"class":495},[35,160564,32769],{"class":58},[35,160566,499],{"class":359},[35,160568,713],{"class":58},[35,160570,12769],{"class":359},[35,160572,408],{"class":58},[35,160574,31112],{"class":359},[35,160576,160577,160579,160581,160583,160585],{"class":37,"line":45},[35,160578,3435],{"class":495},[35,160580,9772],{"class":359},[35,160582,3283],{"class":495},[35,160584,2379],{"class":58},[35,160586,4073],{"class":359},[35,160588,160589,160591,160593,160596],{"class":37,"line":55},[35,160590,32777],{"class":58},[35,160592,499],{"class":359},[35,160594,160595],{"class":306},"\"找到了\"",[35,160597,505],{"class":359},[35,160599,160600],{"class":37,"line":65},[35,160601,31953],{"class":495},[35,160603,160604,160606],{"class":37,"line":74},[35,160605,2051],{"class":495},[35,160607,4073],{"class":359},[35,160609,160610,160612,160614,160617],{"class":37,"line":83},[35,160611,31625],{"class":58},[35,160613,499],{"class":359},[35,160615,160616],{"class":306},"\"没找到\"",[35,160618,505],{"class":359},[21,160620,160621],{},"常用于搜索。",[25,160623,160625],{"className":30704,"code":160624,"language":30706,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,160626,160627,160648,160657,160661,160673,160684,160694,160698,160704],{"__ignoreMap":30},[35,160628,160629,160632,160634,160636,160638,160640,160642,160644,160646],{"class":37,"line":38},[35,160630,160631],{"class":359},"names ",[35,160633,544],{"class":495},[35,160635,52552],{"class":359},[35,160637,150139],{"class":306},[35,160639,12769],{"class":359},[35,160641,151187],{"class":306},[35,160643,12769],{"class":359},[35,160645,159982],{"class":306},[35,160647,33572],{"class":359},[35,160649,160650,160652,160654],{"class":37,"line":45},[35,160651,111900],{"class":359},[35,160653,544],{"class":495},[35,160655,160656],{"class":306}," \"小李\"\n",[35,160658,160659],{"class":37,"line":55},[35,160660,141],{"emptyLinePlaceholder":140},[35,160662,160663,160665,160668,160670],{"class":37,"line":65},[35,160664,3359],{"class":495},[35,160666,160667],{"class":359}," name ",[35,160669,26374],{"class":495},[35,160671,160672],{"class":359}," names:\n",[35,160674,160675,160677,160679,160681],{"class":37,"line":74},[35,160676,3435],{"class":495},[35,160678,160667],{"class":359},[35,160680,3283],{"class":495},[35,160682,160683],{"class":359}," target:\n",[35,160685,160686,160688,160690,160692],{"class":37,"line":83},[35,160687,32777],{"class":58},[35,160689,499],{"class":359},[35,160691,160595],{"class":306},[35,160693,505],{"class":359},[35,160695,160696],{"class":37,"line":92},[35,160697,31953],{"class":495},[35,160699,160700,160702],{"class":37,"line":101},[35,160701,2051],{"class":495},[35,160703,4073],{"class":359},[35,160705,160706,160708,160710,160712],{"class":37,"line":110},[35,160707,31625],{"class":58},[35,160709,499],{"class":359},[35,160711,160616],{"class":306},[35,160713,505],{"class":359},[438,160715,160717],{"id":160716},"_412-小案例登录重试","4.12 小案例：登录重试",[21,160719,123543],{},[14,160721,160722,160725,160728],{},[17,160723,160724],{},"用户最多输入 3 次密码。",[17,160726,160727],{},"密码正确则登录成功。",[17,160729,160730],{},"3 次都错误则锁定账号。",[21,160732,10369],{},[25,160734,160736],{"className":30704,"code":160735,"language":30706,"meta":30,"style":30},"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",[32,160737,160738,160748,160752,160768,160784,160788,160800,160811,160815,160821,160846,160852],{"__ignoreMap":30},[35,160739,160740,160743,160745],{"class":37,"line":38},[35,160741,160742],{"class":359},"password ",[35,160744,544],{"class":495},[35,160746,160747],{"class":306}," \"123456\"\n",[35,160749,160750],{"class":37,"line":45},[35,160751,141],{"emptyLinePlaceholder":140},[35,160753,160754,160756,160758,160760,160762,160764,160766],{"class":37,"line":55},[35,160755,3359],{"class":495},[35,160757,9772],{"class":359},[35,160759,26374],{"class":495},[35,160761,32769],{"class":58},[35,160763,499],{"class":359},[35,160765,568],{"class":58},[35,160767,31112],{"class":359},[35,160769,160770,160773,160775,160777,160779,160782],{"class":37,"line":65},[35,160771,160772],{"class":359},"    user_password ",[35,160774,544],{"class":495},[35,160776,60931],{"class":58},[35,160778,499],{"class":359},[35,160780,160781],{"class":306},"\"请输入密码:\"",[35,160783,505],{"class":359},[35,160785,160786],{"class":37,"line":74},[35,160787,141],{"emptyLinePlaceholder":140},[35,160789,160790,160792,160795,160797],{"class":37,"line":83},[35,160791,3435],{"class":495},[35,160793,160794],{"class":359}," user_password ",[35,160796,3283],{"class":495},[35,160798,160799],{"class":359}," password:\n",[35,160801,160802,160804,160806,160809],{"class":37,"line":92},[35,160803,32777],{"class":58},[35,160805,499],{"class":359},[35,160807,160808],{"class":306},"\"登录成功\"",[35,160810,505],{"class":359},[35,160812,160813],{"class":37,"line":101},[35,160814,31953],{"class":495},[35,160816,160817,160819],{"class":37,"line":110},[35,160818,158273],{"class":495},[35,160820,4073],{"class":359},[35,160822,160823,160825,160827,160829,160832,160835,160837,160839,160841,160844],{"class":37,"line":119},[35,160824,32777],{"class":58},[35,160826,499],{"class":359},[35,160828,550],{"class":495},[35,160830,160831],{"class":306},"\"密码错误，还剩",[35,160833,160834],{"class":58},"{2",[35,160836,52597],{"class":495},[35,160838,3366],{"class":359},[35,160840,1440],{"class":58},[35,160842,160843],{"class":306},"次机会\"",[35,160845,505],{"class":359},[35,160847,160848,160850],{"class":37,"line":128},[35,160849,2051],{"class":495},[35,160851,4073],{"class":359},[35,160853,160854,160856,160858,160861],{"class":37,"line":137},[35,160855,31625],{"class":58},[35,160857,499],{"class":359},[35,160859,160860],{"class":306},"\"账号已锁定\"",[35,160862,505],{"class":359},[438,160864,160866],{"id":160865},"_413-小案例菜单程序","4.13 小案例：菜单程序",[25,160868,160870],{"className":30704,"code":160869,"language":30706,"meta":30,"style":30},"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",[32,160871,160872,160880,160891,160902,160913,160924,160935,160939,160954,160958,160970,160981,160993,161004,161016,161027,161039,161049,161053,161059],{"__ignoreMap":30},[35,160873,160874,160876,160878],{"class":37,"line":38},[35,160875,108985],{"class":495},[35,160877,95617],{"class":58},[35,160879,4073],{"class":359},[35,160881,160882,160884,160886,160889],{"class":37,"line":45},[35,160883,31625],{"class":58},[35,160885,499],{"class":359},[35,160887,160888],{"class":306},"\"====== 菜单 ======\"",[35,160890,505],{"class":359},[35,160892,160893,160895,160897,160900],{"class":37,"line":55},[35,160894,31625],{"class":58},[35,160896,499],{"class":359},[35,160898,160899],{"class":306},"\"1. 查询余额\"",[35,160901,505],{"class":359},[35,160903,160904,160906,160908,160911],{"class":37,"line":65},[35,160905,31625],{"class":58},[35,160907,499],{"class":359},[35,160909,160910],{"class":306},"\"2. 存款\"",[35,160912,505],{"class":359},[35,160914,160915,160917,160919,160922],{"class":37,"line":74},[35,160916,31625],{"class":58},[35,160918,499],{"class":359},[35,160920,160921],{"class":306},"\"3. 取款\"",[35,160923,505],{"class":359},[35,160925,160926,160928,160930,160933],{"class":37,"line":83},[35,160927,31625],{"class":58},[35,160929,499],{"class":359},[35,160931,160932],{"class":306},"\"0. 退出\"",[35,160934,505],{"class":359},[35,160936,160937],{"class":37,"line":92},[35,160938,141],{"emptyLinePlaceholder":140},[35,160940,160941,160944,160946,160948,160950,160952],{"class":37,"line":101},[35,160942,160943],{"class":359},"    choice ",[35,160945,544],{"class":495},[35,160947,60931],{"class":58},[35,160949,499],{"class":359},[35,160951,153324],{"class":306},[35,160953,505],{"class":359},[35,160955,160956],{"class":37,"line":110},[35,160957,141],{"emptyLinePlaceholder":140},[35,160959,160960,160962,160964,160966,160968],{"class":37,"line":119},[35,160961,3435],{"class":495},[35,160963,153337],{"class":359},[35,160965,3283],{"class":495},[35,160967,153342],{"class":306},[35,160969,4073],{"class":359},[35,160971,160972,160974,160976,160979],{"class":37,"line":128},[35,160973,32777],{"class":58},[35,160975,499],{"class":359},[35,160977,160978],{"class":306},"\"余额为1000元\"",[35,160980,505],{"class":359},[35,160982,160983,160985,160987,160989,160991],{"class":37,"line":137},[35,160984,39619],{"class":495},[35,160986,153337],{"class":359},[35,160988,3283],{"class":495},[35,160990,153361],{"class":306},[35,160992,4073],{"class":359},[35,160994,160995,160997,160999,161002],{"class":37,"line":144},[35,160996,32777],{"class":58},[35,160998,499],{"class":359},[35,161000,161001],{"class":306},"\"存款功能\"",[35,161003,505],{"class":359},[35,161005,161006,161008,161010,161012,161014],{"class":37,"line":150},[35,161007,39619],{"class":495},[35,161009,153337],{"class":359},[35,161011,3283],{"class":495},[35,161013,153379],{"class":306},[35,161015,4073],{"class":359},[35,161017,161018,161020,161022,161025],{"class":37,"line":159},[35,161019,32777],{"class":58},[35,161021,499],{"class":359},[35,161023,161024],{"class":306},"\"取款功能\"",[35,161026,505],{"class":359},[35,161028,161029,161031,161033,161035,161037],{"class":37,"line":168},[35,161030,39619],{"class":495},[35,161032,153337],{"class":359},[35,161034,3283],{"class":495},[35,161036,153433],{"class":306},[35,161038,4073],{"class":359},[35,161040,161041,161043,161045,161047],{"class":37,"line":177},[35,161042,32777],{"class":58},[35,161044,499],{"class":359},[35,161046,153444],{"class":306},[35,161048,505],{"class":359},[35,161050,161051],{"class":37,"line":182},[35,161052,31953],{"class":495},[35,161054,161055,161057],{"class":37,"line":188},[35,161056,158273],{"class":495},[35,161058,4073],{"class":359},[35,161060,161061,161063,161065,161067],{"class":37,"line":197},[35,161062,32777],{"class":58},[35,161064,499],{"class":359},[35,161066,153465],{"class":306},[35,161068,505],{"class":359},[21,161070,161071,161072,161074,161075,28711],{},"菜单类程序通常使用 ",[32,161073,159773],{},"，用户选择退出时 ",[32,161076,2394],{},[438,161078,161080],{"id":161079},"_414-易错点","4.14 易错点",[14,161082,161083,161088,161094,161102,161108],{},[17,161084,161085,161087],{},[32,161086,108985],{}," 循环必须更新控制变量。",[17,161089,161090,161093],{},[32,161091,161092],{},"range(1, 10)"," 不包含 10。",[17,161095,161096,161098,161099,161101],{},[32,161097,2394],{}," 结束整个循环，",[32,161100,154923],{}," 只跳过本轮。",[17,161103,161104,161105,161107],{},"嵌套循环中，",[32,161106,2394],{}," 只跳出当前所在的一层循环。",[17,161109,161110],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[438,161112,161114],{"id":161113},"_415-本章练习","4.15 本章练习",[14,161116,161117,161120,161123,161126,161129],{},[17,161118,161119],{},"输出 1 到 100。",[17,161121,161122],{},"计算 1 到 100 的偶数和。",[17,161124,161125],{},"输出 100 以内能被 3 和 5 同时整除的数。",[17,161127,161128],{},"编写猜数字游戏，限制最多猜 7 次。",[17,161130,161131],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[416,161133,161134],{},"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":30,"searchDepth":45,"depth":45,"links":161136},[161137,161138,161139,161140,161141,161145,161146,161147,161148,161149,161150,161151,161152,161153,161154],{"id":159393,"depth":45,"text":159394},{"id":159423,"depth":45,"text":159424},{"id":159512,"depth":45,"text":159513},{"id":159606,"depth":45,"text":159607},{"id":159780,"depth":45,"text":159781,"children":161142},[161143,161144],{"id":159784,"depth":55,"text":159785},{"id":159848,"depth":55,"text":159849},{"id":159912,"depth":45,"text":159913},{"id":160007,"depth":45,"text":160008},{"id":160116,"depth":45,"text":160117},{"id":160312,"depth":45,"text":160313},{"id":160397,"depth":45,"text":160398},{"id":160536,"depth":45,"text":160537},{"id":160716,"depth":45,"text":160717},{"id":160865,"depth":45,"text":160866},{"id":161079,"depth":45,"text":161080},{"id":161113,"depth":45,"text":161114},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159385,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161161,"title":161162,"body":161163,"description":421,"extension":422,"meta":163168,"navigation":140,"path":163169,"seo":163170,"stem":163171,"__hash__":163172},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161164,"toc":163148},[161165,161168,161172,161175,161178,161192,161195,161209,161213,161215,161234,161236,161283,161285,161299,161303,161377,161380,161384,161387,161446,161454,161457,161510,161513,161517,161522,161577,161585,161635,161639,161644,161652,161751,161757,161761,161766,161769,161780,161821,161834,161838,161841,161877,161880,161893,161896,161956,161960,161964,161967,162018,162022,162025,162072,162078,162144,162147,162151,162154,162270,162273,162277,162280,162386,162390,162393,162431,162434,162476,162479,162539,162542,162546,163010,163013,163017,163044,163050,163111,163115,163145],[10,161166,161162],{"id":161167},"_5-函数基础",[438,161169,161171],{"id":161170},"_51-为什么需要函数","5.1 为什么需要函数",[21,161173,161174],{},"函数用于封装一段可以重复使用的代码。",[21,161176,161177],{},"不使用函数的问题：",[14,161179,161180,161183,161186,161189],{},[17,161181,161182],{},"重复代码多。",[17,161184,161185],{},"修改逻辑时容易漏改。",[17,161187,161188],{},"主流程不清晰。",[17,161190,161191],{},"程序越写越长，难以维护。",[21,161193,161194],{},"使用函数后的好处：",[14,161196,161197,161200,161203,161206],{},[17,161198,161199],{},"提高复用性。",[17,161201,161202],{},"提高可读性。",[17,161204,161205],{},"便于调试。",[17,161207,161208],{},"便于分工。",[438,161210,161212],{"id":161211},"_52-函数定义","5.2 函数定义",[21,161214,5515],{},[25,161216,161218],{"className":30704,"code":161217,"language":30706,"meta":30,"style":30},"def 函数名():\n    函数体\n",[32,161219,161220,161229],{"__ignoreMap":30},[35,161221,161222,161224,161227],{"class":37,"line":38},[35,161223,32273],{"class":495},[35,161225,161226],{"class":48}," 函数名",[35,161228,32279],{"class":359},[35,161230,161231],{"class":37,"line":45},[35,161232,161233],{"class":359},"    函数体\n",[21,161235,15469],{},[25,161237,161239],{"className":30704,"code":161238,"language":30706,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[32,161240,161241,161250,161260,161270,161274,161278],{"__ignoreMap":30},[35,161242,161243,161245,161248],{"class":37,"line":38},[35,161244,32273],{"class":495},[35,161246,161247],{"class":48}," say_hello",[35,161249,32279],{"class":359},[35,161251,161252,161254,161256,161258],{"class":37,"line":45},[35,161253,31625],{"class":58},[35,161255,499],{"class":359},[35,161257,6178],{"class":306},[35,161259,505],{"class":359},[35,161261,161262,161264,161266,161268],{"class":37,"line":55},[35,161263,31625],{"class":58},[35,161265,499],{"class":359},[35,161267,146890],{"class":306},[35,161269,505],{"class":359},[35,161271,161272],{"class":37,"line":65},[35,161273,141],{"emptyLinePlaceholder":140},[35,161275,161276],{"class":37,"line":74},[35,161277,141],{"emptyLinePlaceholder":140},[35,161279,161280],{"class":37,"line":83},[35,161281,161282],{"class":359},"say_hello()\n",[21,161284,9359],{},[14,161286,161287,161290,161293,161296],{},[17,161288,161289],{},"函数必须先定义，再调用。",[17,161291,161292],{},"函数名遵循变量命名规则。",[17,161294,161295],{},"函数体需要缩进。",[17,161297,161298],{},"函数不调用就不会执行。",[438,161300,161302],{"id":161301},"_53-函数调用","5.3 函数调用",[25,161304,161306],{"className":30704,"code":161305,"language":30706,"meta":30,"style":30},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[32,161307,161308,161317,161328,161339,161350,161360,161364,161368,161373],{"__ignoreMap":30},[35,161309,161310,161312,161315],{"class":37,"line":38},[35,161311,32273],{"class":495},[35,161313,161314],{"class":48}," print_menu",[35,161316,32279],{"class":359},[35,161318,161319,161321,161323,161326],{"class":37,"line":45},[35,161320,31625],{"class":58},[35,161322,499],{"class":359},[35,161324,161325],{"class":306},"\"1. 查询\"",[35,161327,505],{"class":359},[35,161329,161330,161332,161334,161337],{"class":37,"line":55},[35,161331,31625],{"class":58},[35,161333,499],{"class":359},[35,161335,161336],{"class":306},"\"2. 添加\"",[35,161338,505],{"class":359},[35,161340,161341,161343,161345,161348],{"class":37,"line":65},[35,161342,31625],{"class":58},[35,161344,499],{"class":359},[35,161346,161347],{"class":306},"\"3. 删除\"",[35,161349,505],{"class":359},[35,161351,161352,161354,161356,161358],{"class":37,"line":74},[35,161353,31625],{"class":58},[35,161355,499],{"class":359},[35,161357,160932],{"class":306},[35,161359,505],{"class":359},[35,161361,161362],{"class":37,"line":83},[35,161363,141],{"emptyLinePlaceholder":140},[35,161365,161366],{"class":37,"line":92},[35,161367,141],{"emptyLinePlaceholder":140},[35,161369,161370],{"class":37,"line":101},[35,161371,161372],{"class":359},"print_menu()\n",[35,161374,161375],{"class":37,"line":110},[35,161376,161372],{"class":359},[21,161378,161379],{},"函数可以多次调用，每次调用都会执行函数体。",[438,161381,161383],{"id":161382},"_54-参数","5.4 参数",[21,161385,161386],{},"参数用于向函数传递数据。",[25,161388,161390],{"className":30704,"code":161389,"language":30706,"meta":30,"style":30},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[32,161391,161392,161401,161421,161425,161429,161438],{"__ignoreMap":30},[35,161393,161394,161396,161398],{"class":37,"line":38},[35,161395,32273],{"class":495},[35,161397,161247],{"class":48},[35,161399,161400],{"class":359},"(name):\n",[35,161402,161403,161405,161407,161409,161411,161413,161415,161417,161419],{"class":37,"line":45},[35,161404,31625],{"class":58},[35,161406,499],{"class":359},[35,161408,550],{"class":495},[35,161410,157305],{"class":306},[35,161412,1390],{"class":58},[35,161414,80135],{"class":359},[35,161416,1440],{"class":58},[35,161418,747],{"class":306},[35,161420,505],{"class":359},[35,161422,161423],{"class":37,"line":55},[35,161424,141],{"emptyLinePlaceholder":140},[35,161426,161427],{"class":37,"line":65},[35,161428,141],{"emptyLinePlaceholder":140},[35,161430,161431,161434,161436],{"class":37,"line":74},[35,161432,161433],{"class":359},"say_hello(",[35,161435,150139],{"class":306},[35,161437,505],{"class":359},[35,161439,161440,161442,161444],{"class":37,"line":83},[35,161441,161433],{"class":359},[35,161443,151187],{"class":306},[35,161445,505],{"class":359},[21,161447,161448,161450,161451,161453],{},[32,161449,80135],{}," 是形参，",[32,161452,150139],{}," 是实参。",[21,161455,161456],{},"多个参数：",[25,161458,161460],{"className":30704,"code":161459,"language":30706,"meta":30,"style":30},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[32,161461,161462,161470,161483,161489,161493,161497],{"__ignoreMap":30},[35,161463,161464,161466,161468],{"class":37,"line":38},[35,161465,32273],{"class":495},[35,161467,5543],{"class":48},[35,161469,151344],{"class":359},[35,161471,161472,161475,161477,161479,161481],{"class":37,"line":45},[35,161473,161474],{"class":359},"    result ",[35,161476,544],{"class":495},[35,161478,11203],{"class":359},[35,161480,975],{"class":495},[35,161482,151355],{"class":359},[35,161484,161485,161487],{"class":37,"line":55},[35,161486,31625],{"class":58},[35,161488,76910],{"class":359},[35,161490,161491],{"class":37,"line":65},[35,161492,141],{"emptyLinePlaceholder":140},[35,161494,161495],{"class":37,"line":74},[35,161496,141],{"emptyLinePlaceholder":140},[35,161498,161499,161502,161504,161506,161508],{"class":37,"line":83},[35,161500,161501],{"class":359},"add(",[35,161503,940],{"class":58},[35,161505,12769],{"class":359},[35,161507,1194],{"class":58},[35,161509,505],{"class":359},[21,161511,161512],{},"调用时参数数量必须匹配。",[438,161514,161516],{"id":161515},"_55-返回值","5.5 返回值",[21,161518,161519,161521],{},[32,161520,17380],{}," 用于把函数内部的结果返回给调用者。",[25,161523,161525],{"className":30704,"code":161524,"language":30706,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[32,161526,161527,161535,161545,161549,161553,161571],{"__ignoreMap":30},[35,161528,161529,161531,161533],{"class":37,"line":38},[35,161530,32273],{"class":495},[35,161532,5543],{"class":48},[35,161534,151344],{"class":359},[35,161536,161537,161539,161541,161543],{"class":37,"line":45},[35,161538,4424],{"class":495},[35,161540,11203],{"class":359},[35,161542,975],{"class":495},[35,161544,151355],{"class":359},[35,161546,161547],{"class":37,"line":55},[35,161548,141],{"emptyLinePlaceholder":140},[35,161550,161551],{"class":37,"line":65},[35,161552,141],{"emptyLinePlaceholder":140},[35,161554,161555,161558,161560,161563,161565,161567,161569],{"class":37,"line":74},[35,161556,161557],{"class":359},"result ",[35,161559,544],{"class":495},[35,161561,161562],{"class":359}," add(",[35,161564,940],{"class":58},[35,161566,12769],{"class":359},[35,161568,1194],{"class":58},[35,161570,505],{"class":359},[35,161572,161573,161575],{"class":37,"line":83},[35,161574,30741],{"class":58},[35,161576,76910],{"class":359},[21,161578,161579,161580,161582,161583,28711],{},"如果函数没有写 ",[32,161581,17380],{},"，默认返回 ",[32,161584,96011],{},[25,161586,161588],{"className":30704,"code":161587,"language":30706,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[32,161589,161590,161598,161608,161612,161616,161625],{"__ignoreMap":30},[35,161591,161592,161594,161596],{"class":37,"line":38},[35,161593,32273],{"class":495},[35,161595,161247],{"class":48},[35,161597,32279],{"class":359},[35,161599,161600,161602,161604,161606],{"class":37,"line":45},[35,161601,31625],{"class":58},[35,161603,499],{"class":359},[35,161605,6178],{"class":306},[35,161607,505],{"class":359},[35,161609,161610],{"class":37,"line":55},[35,161611,141],{"emptyLinePlaceholder":140},[35,161613,161614],{"class":37,"line":65},[35,161615,141],{"emptyLinePlaceholder":140},[35,161617,161618,161620,161622],{"class":37,"line":74},[35,161619,161557],{"class":359},[35,161621,544],{"class":495},[35,161623,161624],{"class":359}," say_hello()\n",[35,161626,161627,161629,161632],{"class":37,"line":83},[35,161628,30741],{"class":58},[35,161630,161631],{"class":359},"(result)  ",[35,161633,161634],{"class":41},"# None\n",[438,161636,161638],{"id":161637},"_56-return的作用","5.6 return的作用",[21,161640,161641,161643],{},[32,161642,17380],{}," 有两个作用：",[14,161645,161646,161649],{},[17,161647,161648],{},"返回结果。",[17,161650,161651],{},"结束函数。",[25,161653,161655],{"className":30704,"code":161654,"language":30706,"meta":30,"style":30},"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",[32,161656,161657,161667,161679,161686,161690,161702,161709,161713,161720,161724,161728,161739],{"__ignoreMap":30},[35,161658,161659,161661,161664],{"class":37,"line":38},[35,161660,32273],{"class":495},[35,161662,161663],{"class":48}," check_age",[35,161665,161666],{"class":359},"(age):\n",[35,161668,161669,161671,161673,161675,161677],{"class":37,"line":45},[35,161670,3435],{"class":495},[35,161672,16041],{"class":359},[35,161674,1404],{"class":495},[35,161676,4427],{"class":58},[35,161678,4073],{"class":359},[35,161680,161681,161683],{"class":37,"line":55},[35,161682,15086],{"class":495},[35,161684,161685],{"class":306}," \"年龄不合法\"\n",[35,161687,161688],{"class":37,"line":65},[35,161689,141],{"emptyLinePlaceholder":140},[35,161691,161692,161694,161696,161698,161700],{"class":37,"line":74},[35,161693,3435],{"class":495},[35,161695,16041],{"class":359},[35,161697,2060],{"class":495},[35,161699,156536],{"class":58},[35,161701,4073],{"class":359},[35,161703,161704,161706],{"class":37,"line":83},[35,161705,15086],{"class":495},[35,161707,161708],{"class":306}," \"成年人\"\n",[35,161710,161711],{"class":37,"line":92},[35,161712,141],{"emptyLinePlaceholder":140},[35,161714,161715,161717],{"class":37,"line":101},[35,161716,4424],{"class":495},[35,161718,161719],{"class":306}," \"未成年人\"\n",[35,161721,161722],{"class":37,"line":110},[35,161723,141],{"emptyLinePlaceholder":140},[35,161725,161726],{"class":37,"line":119},[35,161727,141],{"emptyLinePlaceholder":140},[35,161729,161730,161732,161735,161737],{"class":37,"line":128},[35,161731,30741],{"class":58},[35,161733,161734],{"class":359},"(check_age(",[35,161736,1194],{"class":58},[35,161738,30823],{"class":359},[35,161740,161741,161743,161745,161747,161749],{"class":37,"line":137},[35,161742,30741],{"class":58},[35,161744,161734],{"class":359},[35,161746,1026],{"class":495},[35,161748,713],{"class":58},[35,161750,30823],{"class":359},[21,161752,161753,161754,161756],{},"函数执行到 ",[32,161755,17380],{}," 后，后面的代码不会继续执行。",[438,161758,161760],{"id":161759},"_57-none","5.7 None",[21,161762,161763,161765],{},[32,161764,96011],{}," 表示空值或没有结果。",[21,161767,161768],{},"常见使用场景：",[14,161770,161771,161774,161777],{},[17,161772,161773],{},"函数没有返回值。",[17,161775,161776],{},"变量暂时没有具体值。",[17,161778,161779],{},"表示查询不到结果。",[25,161781,161783],{"className":30704,"code":161782,"language":30706,"meta":30,"style":30},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[32,161784,161785,161793,161797,161810],{"__ignoreMap":30},[35,161786,161787,161789,161791],{"class":37,"line":38},[35,161788,161557],{"class":359},[35,161790,544],{"class":495},[35,161792,152423],{"class":58},[35,161794,161795],{"class":37,"line":45},[35,161796,141],{"emptyLinePlaceholder":140},[35,161798,161799,161801,161804,161806,161808],{"class":37,"line":55},[35,161800,1892],{"class":495},[35,161802,161803],{"class":359}," result ",[35,161805,39253],{"class":495},[35,161807,39259],{"class":58},[35,161809,4073],{"class":359},[35,161811,161812,161814,161816,161819],{"class":37,"line":65},[35,161813,31625],{"class":58},[35,161815,499],{"class":359},[35,161817,161818],{"class":306},"\"没有数据\"",[35,161820,505],{"class":359},[21,161822,161823,161824,161826,161827,161830,161831,28711],{},"判断 ",[32,161825,96011],{}," 推荐使用 ",[32,161828,161829],{},"is None","，不要写成 ",[32,161832,161833],{},"== None",[438,161835,161837],{"id":161836},"_58-函数文档字符串","5.8 函数文档字符串",[21,161839,161840],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[25,161842,161844],{"className":30704,"code":161843,"language":30706,"meta":30,"style":30},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[32,161845,161846,161856,161861],{"__ignoreMap":30},[35,161847,161848,161850,161853],{"class":37,"line":38},[35,161849,32273],{"class":495},[35,161851,161852],{"class":48}," calculate_bmi",[35,161854,161855],{"class":359},"(weight, height):\n",[35,161857,161858],{"class":37,"line":45},[35,161859,161860],{"class":306},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[35,161862,161863,161865,161868,161870,161873,161875],{"class":37,"line":55},[35,161864,4424],{"class":495},[35,161866,161867],{"class":359}," weight ",[35,161869,1078],{"class":495},[35,161871,161872],{"class":359}," height ",[35,161874,10995],{"class":495},[35,161876,48049],{"class":58},[21,161878,161879],{},"查看说明：",[25,161881,161883],{"className":30704,"code":161882,"language":30706,"meta":30,"style":30},"help(calculate_bmi)\n",[32,161884,161885],{"__ignoreMap":30},[35,161886,161887,161890],{"class":37,"line":38},[35,161888,161889],{"class":58},"help",[35,161891,161892],{"class":359},"(calculate_bmi)\n",[21,161894,161895],{},"较完整的写法：",[25,161897,161899],{"className":30704,"code":161898,"language":30706,"meta":30,"style":30},"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",[32,161900,161901,161909,161914,161919,161923,161928,161933,161938,161942],{"__ignoreMap":30},[35,161902,161903,161905,161907],{"class":37,"line":38},[35,161904,32273],{"class":495},[35,161906,161852],{"class":48},[35,161908,161855],{"class":359},[35,161910,161911],{"class":37,"line":45},[35,161912,161913],{"class":306},"    \"\"\"\n",[35,161915,161916],{"class":37,"line":55},[35,161917,161918],{"class":306},"    计算BMI。\n",[35,161920,161921],{"class":37,"line":65},[35,161922,141],{"emptyLinePlaceholder":140},[35,161924,161925],{"class":37,"line":74},[35,161926,161927],{"class":306},"    :param weight: 体重，单位kg\n",[35,161929,161930],{"class":37,"line":83},[35,161931,161932],{"class":306},"    :param height: 身高，单位m\n",[35,161934,161935],{"class":37,"line":92},[35,161936,161937],{"class":306},"    :return: BMI数值\n",[35,161939,161940],{"class":37,"line":101},[35,161941,161913],{"class":306},[35,161943,161944,161946,161948,161950,161952,161954],{"class":37,"line":110},[35,161945,4424],{"class":495},[35,161947,161867],{"class":359},[35,161949,1078],{"class":495},[35,161951,161872],{"class":359},[35,161953,10995],{"class":495},[35,161955,48049],{"class":58},[438,161957,161959],{"id":161958},"_59-变量作用域","5.9 变量作用域",[465,161961,161963],{"id":161962},"_591-局部变量","5.9.1 局部变量",[21,161965,161966],{},"在函数内部定义的变量，只能在函数内部使用。",[25,161968,161970],{"className":30704,"code":161969,"language":30706,"meta":30,"style":30},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[32,161971,161972,161981,161989,161995,161999,162003,162008],{"__ignoreMap":30},[35,161973,161974,161976,161979],{"class":37,"line":38},[35,161975,32273],{"class":495},[35,161977,161978],{"class":48}," test",[35,161980,32279],{"class":359},[35,161982,161983,161985,161987],{"class":37,"line":45},[35,161984,45919],{"class":359},[35,161986,544],{"class":495},[35,161988,58754],{"class":58},[35,161990,161991,161993],{"class":37,"line":55},[35,161992,31625],{"class":58},[35,161994,512],{"class":359},[35,161996,161997],{"class":37,"line":65},[35,161998,141],{"emptyLinePlaceholder":140},[35,162000,162001],{"class":37,"line":74},[35,162002,141],{"emptyLinePlaceholder":140},[35,162004,162005],{"class":37,"line":83},[35,162006,162007],{"class":359},"test()\n",[35,162009,162010,162012,162015],{"class":37,"line":92},[35,162011,30741],{"class":58},[35,162013,162014],{"class":359},"(num)  ",[35,162016,162017],{"class":41},"# 报错\n",[465,162019,162021],{"id":162020},"_592-全局变量","5.9.2 全局变量",[21,162023,162024],{},"在函数外部定义的变量，可以在函数内部读取。",[25,162026,162028],{"className":30704,"code":162027,"language":30706,"meta":30,"style":30},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[32,162029,162030,162038,162042,162046,162054,162060,162064,162068],{"__ignoreMap":30},[35,162031,162032,162034,162036],{"class":37,"line":38},[35,162033,146787],{"class":359},[35,162035,544],{"class":495},[35,162037,149604],{"class":306},[35,162039,162040],{"class":37,"line":45},[35,162041,141],{"emptyLinePlaceholder":140},[35,162043,162044],{"class":37,"line":55},[35,162045,141],{"emptyLinePlaceholder":140},[35,162047,162048,162050,162052],{"class":37,"line":65},[35,162049,32273],{"class":495},[35,162051,161247],{"class":48},[35,162053,32279],{"class":359},[35,162055,162056,162058],{"class":37,"line":74},[35,162057,31625],{"class":58},[35,162059,150911],{"class":359},[35,162061,162062],{"class":37,"line":83},[35,162063,141],{"emptyLinePlaceholder":140},[35,162065,162066],{"class":37,"line":92},[35,162067,141],{"emptyLinePlaceholder":140},[35,162069,162070],{"class":37,"line":101},[35,162071,161282],{"class":359},[21,162073,162074,162075,28711],{},"如果要在函数内部修改全局变量，需要 ",[32,162076,162077],{},"global",[25,162079,162081],{"className":30704,"code":162080,"language":30706,"meta":30,"style":30},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[32,162082,162083,162091,162095,162099,162108,162116,162124,162128,162132,162137],{"__ignoreMap":30},[35,162084,162085,162087,162089],{"class":37,"line":38},[35,162086,146942],{"class":359},[35,162088,544],{"class":495},[35,162090,47659],{"class":58},[35,162092,162093],{"class":37,"line":45},[35,162094,141],{"emptyLinePlaceholder":140},[35,162096,162097],{"class":37,"line":55},[35,162098,141],{"emptyLinePlaceholder":140},[35,162100,162101,162103,162106],{"class":37,"line":65},[35,162102,32273],{"class":495},[35,162104,162105],{"class":48}," add_count",[35,162107,32279],{"class":359},[35,162109,162110,162113],{"class":37,"line":74},[35,162111,162112],{"class":495},"    global",[35,162114,162115],{"class":359}," count\n",[35,162117,162118,162120,162122],{"class":37,"line":83},[35,162119,159684],{"class":359},[35,162121,9811],{"class":495},[35,162123,56025],{"class":58},[35,162125,162126],{"class":37,"line":92},[35,162127,141],{"emptyLinePlaceholder":140},[35,162129,162130],{"class":37,"line":101},[35,162131,141],{"emptyLinePlaceholder":140},[35,162133,162134],{"class":37,"line":110},[35,162135,162136],{"class":359},"add_count()\n",[35,162138,162139,162141],{"class":37,"line":119},[35,162140,30741],{"class":58},[35,162142,162143],{"class":359},"(count)\n",[21,162145,162146],{},"不建议大量使用全局变量，项目变大后很难维护。",[438,162148,162150],{"id":162149},"_510-函数嵌套调用","5.10 函数嵌套调用",[21,162152,162153],{},"一个函数中可以调用另一个函数。",[25,162155,162157],{"className":30704,"code":162156,"language":30706,"meta":30,"style":30},"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",[32,162158,162159,162168,162182,162186,162190,162199,162204,162224,162245,162249,162253,162257],{"__ignoreMap":30},[35,162160,162161,162163,162166],{"class":37,"line":38},[35,162162,32273],{"class":495},[35,162164,162165],{"class":48}," print_line",[35,162167,32279],{"class":359},[35,162169,162170,162172,162174,162176,162178,162180],{"class":37,"line":45},[35,162171,31625],{"class":58},[35,162173,499],{"class":359},[35,162175,32809],{"class":306},[35,162177,6852],{"class":495},[35,162179,78990],{"class":58},[35,162181,505],{"class":359},[35,162183,162184],{"class":37,"line":55},[35,162185,141],{"emptyLinePlaceholder":140},[35,162187,162188],{"class":37,"line":65},[35,162189,141],{"emptyLinePlaceholder":140},[35,162191,162192,162194,162197],{"class":37,"line":74},[35,162193,32273],{"class":495},[35,162195,162196],{"class":48}," print_info",[35,162198,149626],{"class":359},[35,162200,162201],{"class":37,"line":83},[35,162202,162203],{"class":359},"    print_line()\n",[35,162205,162206,162208,162210,162212,162214,162216,162218,162220,162222],{"class":37,"line":92},[35,162207,31625],{"class":58},[35,162209,499],{"class":359},[35,162211,550],{"class":495},[35,162213,156933],{"class":306},[35,162215,1390],{"class":58},[35,162217,80135],{"class":359},[35,162219,1440],{"class":58},[35,162221,747],{"class":306},[35,162223,505],{"class":359},[35,162225,162226,162228,162230,162232,162235,162237,162239,162241,162243],{"class":37,"line":101},[35,162227,31625],{"class":58},[35,162229,499],{"class":359},[35,162231,550],{"class":495},[35,162233,162234],{"class":306},"\"年龄:",[35,162236,1390],{"class":58},[35,162238,70546],{"class":359},[35,162240,1440],{"class":58},[35,162242,747],{"class":306},[35,162244,505],{"class":359},[35,162246,162247],{"class":37,"line":110},[35,162248,162203],{"class":359},[35,162250,162251],{"class":37,"line":119},[35,162252,141],{"emptyLinePlaceholder":140},[35,162254,162255],{"class":37,"line":128},[35,162256,141],{"emptyLinePlaceholder":140},[35,162258,162259,162262,162264,162266,162268],{"class":37,"line":137},[35,162260,162261],{"class":359},"print_info(",[35,162263,150139],{"class":306},[35,162265,12769],{"class":359},[35,162267,1144],{"class":58},[35,162269,505],{"class":359},[21,162271,162272],{},"这种方式可以把小功能组合成大功能。",[438,162274,162276],{"id":162275},"_511-参数检查","5.11 参数检查",[21,162278,162279],{},"函数内部可以检查参数是否合法。",[25,162281,162283],{"className":30704,"code":162282,"language":30706,"meta":30,"style":30},"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",[32,162284,162285,162294,162306,162312,162322,162326,162330,162347,162351,162363,162374,162380],{"__ignoreMap":30},[35,162286,162287,162289,162292],{"class":37,"line":38},[35,162288,32273],{"class":495},[35,162290,162291],{"class":48}," divide",[35,162293,151344],{"class":359},[35,162295,162296,162298,162300,162302,162304],{"class":37,"line":45},[35,162297,3435],{"class":495},[35,162299,11216],{"class":359},[35,162301,3283],{"class":495},[35,162303,4427],{"class":58},[35,162305,4073],{"class":359},[35,162307,162308,162310],{"class":37,"line":55},[35,162309,15086],{"class":495},[35,162311,152423],{"class":58},[35,162313,162314,162316,162318,162320],{"class":37,"line":65},[35,162315,4424],{"class":495},[35,162317,11203],{"class":359},[35,162319,1078],{"class":495},[35,162321,151355],{"class":359},[35,162323,162324],{"class":37,"line":74},[35,162325,141],{"emptyLinePlaceholder":140},[35,162327,162328],{"class":37,"line":83},[35,162329,141],{"emptyLinePlaceholder":140},[35,162331,162332,162334,162336,162339,162341,162343,162345],{"class":37,"line":92},[35,162333,161557],{"class":359},[35,162335,544],{"class":495},[35,162337,162338],{"class":359}," divide(",[35,162340,940],{"class":58},[35,162342,12769],{"class":359},[35,162344,687],{"class":58},[35,162346,505],{"class":359},[35,162348,162349],{"class":37,"line":101},[35,162350,141],{"emptyLinePlaceholder":140},[35,162352,162353,162355,162357,162359,162361],{"class":37,"line":110},[35,162354,1892],{"class":495},[35,162356,161803],{"class":359},[35,162358,39253],{"class":495},[35,162360,39259],{"class":58},[35,162362,4073],{"class":359},[35,162364,162365,162367,162369,162372],{"class":37,"line":119},[35,162366,31625],{"class":58},[35,162368,499],{"class":359},[35,162370,162371],{"class":306},"\"除数不能为0\"",[35,162373,505],{"class":359},[35,162375,162376,162378],{"class":37,"line":128},[35,162377,2051],{"class":495},[35,162379,4073],{"class":359},[35,162381,162382,162384],{"class":37,"line":137},[35,162383,31625],{"class":58},[35,162385,76910],{"class":359},[438,162387,162389],{"id":162388},"_512-类型提示","5.12 类型提示",[21,162391,162392],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[25,162394,162396],{"className":30704,"code":162395,"language":30706,"meta":30,"style":30},"def add(a: int, b: int) -> int:\n    return a + b\n",[32,162397,162398,162421],{"__ignoreMap":30},[35,162399,162400,162402,162404,162407,162409,162412,162414,162417,162419],{"class":37,"line":38},[35,162401,32273],{"class":495},[35,162403,5543],{"class":48},[35,162405,162406],{"class":359},"(a: ",[35,162408,502],{"class":58},[35,162410,162411],{"class":359},", b: ",[35,162413,502],{"class":58},[35,162415,162416],{"class":359},") -> ",[35,162418,502],{"class":58},[35,162420,4073],{"class":359},[35,162422,162423,162425,162427,162429],{"class":37,"line":45},[35,162424,4424],{"class":495},[35,162426,11203],{"class":359},[35,162428,975],{"class":495},[35,162430,151355],{"class":359},[21,162432,162433],{},"字符串参数：",[25,162435,162437],{"className":30704,"code":162436,"language":30706,"meta":30,"style":30},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[32,162438,162439,162456],{"__ignoreMap":30},[35,162440,162441,162443,162445,162448,162450,162452,162454],{"class":37,"line":38},[35,162442,32273],{"class":495},[35,162444,161247],{"class":48},[35,162446,162447],{"class":359},"(name: ",[35,162449,1664],{"class":58},[35,162451,162416],{"class":359},[35,162453,96011],{"class":58},[35,162455,4073],{"class":359},[35,162457,162458,162460,162462,162464,162466,162468,162470,162472,162474],{"class":37,"line":45},[35,162459,31625],{"class":58},[35,162461,499],{"class":359},[35,162463,550],{"class":495},[35,162465,157305],{"class":306},[35,162467,1390],{"class":58},[35,162469,80135],{"class":359},[35,162471,1440],{"class":58},[35,162473,747],{"class":306},[35,162475,505],{"class":359},[21,162477,162478],{},"列表参数：",[25,162480,162482],{"className":30704,"code":162481,"language":30706,"meta":30,"style":30},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[32,162483,162484,162503,162511,162523,162532],{"__ignoreMap":30},[35,162485,162486,162488,162491,162494,162496,162499,162501],{"class":37,"line":38},[35,162487,32273],{"class":495},[35,162489,162490],{"class":48}," get_total",[35,162492,162493],{"class":359},"(numbers: list[",[35,162495,502],{"class":58},[35,162497,162498],{"class":359},"]) -> ",[35,162500,502],{"class":58},[35,162502,4073],{"class":359},[35,162504,162505,162507,162509],{"class":37,"line":45},[35,162506,159558],{"class":359},[35,162508,544],{"class":495},[35,162510,47659],{"class":58},[35,162512,162513,162515,162518,162520],{"class":37,"line":55},[35,162514,3535],{"class":495},[35,162516,162517],{"class":359}," number ",[35,162519,26374],{"class":495},[35,162521,162522],{"class":359}," numbers:\n",[35,162524,162525,162527,162529],{"class":37,"line":65},[35,162526,160233],{"class":359},[35,162528,9811],{"class":495},[35,162530,162531],{"class":359}," number\n",[35,162533,162534,162536],{"class":37,"line":74},[35,162535,4424],{"class":495},[35,162537,162538],{"class":359}," total\n",[21,162540,162541],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[438,162543,162545],{"id":162544},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[25,162547,162549],{"className":30704,"code":162548,"language":30706,"meta":30,"style":30},"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",[32,162550,162551,162561,162565,162569,162577,162588,162598,162608,162618,162628,162632,162636,162645,162667,162671,162675,162684,162690,162710,162722,162733,162737,162746,162757,162762,162766,162770,162779,162785,162804,162816,162826,162830,162841,162851,162855,162863,162874,162878,162882,162886,162894,162899,162913,162917,162929,162934,162946,162951,162963,162968,162980,162990,162994,163000],{"__ignoreMap":30},[35,162552,162553,162556,162558],{"class":37,"line":38},[35,162554,162555],{"class":359},"balance ",[35,162557,544],{"class":495},[35,162559,162560],{"class":58}," 1000\n",[35,162562,162563],{"class":37,"line":45},[35,162564,141],{"emptyLinePlaceholder":140},[35,162566,162567],{"class":37,"line":55},[35,162568,141],{"emptyLinePlaceholder":140},[35,162570,162571,162573,162575],{"class":37,"line":65},[35,162572,32273],{"class":495},[35,162574,152284],{"class":48},[35,162576,32279],{"class":359},[35,162578,162579,162581,162583,162586],{"class":37,"line":74},[35,162580,31625],{"class":58},[35,162582,499],{"class":359},[35,162584,162585],{"class":306},"\"====== ATM ======\"",[35,162587,505],{"class":359},[35,162589,162590,162592,162594,162596],{"class":37,"line":83},[35,162591,31625],{"class":58},[35,162593,499],{"class":359},[35,162595,160899],{"class":306},[35,162597,505],{"class":359},[35,162599,162600,162602,162604,162606],{"class":37,"line":92},[35,162601,31625],{"class":58},[35,162603,499],{"class":359},[35,162605,160910],{"class":306},[35,162607,505],{"class":359},[35,162609,162610,162612,162614,162616],{"class":37,"line":101},[35,162611,31625],{"class":58},[35,162613,499],{"class":359},[35,162615,160921],{"class":306},[35,162617,505],{"class":359},[35,162619,162620,162622,162624,162626],{"class":37,"line":110},[35,162621,31625],{"class":58},[35,162623,499],{"class":359},[35,162625,160932],{"class":306},[35,162627,505],{"class":359},[35,162629,162630],{"class":37,"line":119},[35,162631,141],{"emptyLinePlaceholder":140},[35,162633,162634],{"class":37,"line":128},[35,162635,141],{"emptyLinePlaceholder":140},[35,162637,162638,162640,162643],{"class":37,"line":137},[35,162639,32273],{"class":495},[35,162641,162642],{"class":48}," show_balance",[35,162644,32279],{"class":359},[35,162646,162647,162649,162651,162653,162656,162658,162661,162663,162665],{"class":37,"line":144},[35,162648,31625],{"class":58},[35,162650,499],{"class":359},[35,162652,550],{"class":495},[35,162654,162655],{"class":306},"\"当前余额:",[35,162657,1390],{"class":58},[35,162659,162660],{"class":359},"balance",[35,162662,1440],{"class":58},[35,162664,157263],{"class":306},[35,162666,505],{"class":359},[35,162668,162669],{"class":37,"line":150},[35,162670,141],{"emptyLinePlaceholder":140},[35,162672,162673],{"class":37,"line":159},[35,162674,141],{"emptyLinePlaceholder":140},[35,162676,162677,162679,162682],{"class":37,"line":168},[35,162678,32273],{"class":495},[35,162680,162681],{"class":48}," save_money",[35,162683,32279],{"class":359},[35,162685,162686,162688],{"class":37,"line":177},[35,162687,162112],{"class":495},[35,162689,150350],{"class":359},[35,162691,162692,162695,162697,162699,162701,162703,162705,162708],{"class":37,"line":182},[35,162693,162694],{"class":359},"    money ",[35,162696,544],{"class":495},[35,162698,110119],{"class":58},[35,162700,499],{"class":359},[35,162702,54147],{"class":58},[35,162704,499],{"class":359},[35,162706,162707],{"class":306},"\"请输入存款金额:\"",[35,162709,30823],{"class":359},[35,162711,162712,162714,162716,162718,162720],{"class":37,"line":188},[35,162713,3435],{"class":495},[35,162715,150393],{"class":359},[35,162717,1949],{"class":495},[35,162719,4427],{"class":58},[35,162721,4073],{"class":359},[35,162723,162724,162726,162728,162731],{"class":37,"line":197},[35,162725,32777],{"class":58},[35,162727,499],{"class":359},[35,162729,162730],{"class":306},"\"金额必须大于0\"",[35,162732,505],{"class":359},[35,162734,162735],{"class":37,"line":206},[35,162736,152612],{"class":495},[35,162738,162739,162742,162744],{"class":37,"line":215},[35,162740,162741],{"class":359},"    balance ",[35,162743,9811],{"class":495},[35,162745,150426],{"class":359},[35,162747,162748,162750,162752,162755],{"class":37,"line":224},[35,162749,31625],{"class":58},[35,162751,499],{"class":359},[35,162753,162754],{"class":306},"\"存款成功\"",[35,162756,505],{"class":359},[35,162758,162759],{"class":37,"line":233},[35,162760,162761],{"class":359},"    show_balance()\n",[35,162763,162764],{"class":37,"line":238},[35,162765,141],{"emptyLinePlaceholder":140},[35,162767,162768],{"class":37,"line":244},[35,162769,141],{"emptyLinePlaceholder":140},[35,162771,162772,162774,162777],{"class":37,"line":253},[35,162773,32273],{"class":495},[35,162775,162776],{"class":48}," withdraw_money",[35,162778,32279],{"class":359},[35,162780,162781,162783],{"class":37,"line":262},[35,162782,162112],{"class":495},[35,162784,150350],{"class":359},[35,162786,162787,162789,162791,162793,162795,162797,162799,162802],{"class":37,"line":271},[35,162788,162694],{"class":359},[35,162790,544],{"class":495},[35,162792,110119],{"class":58},[35,162794,499],{"class":359},[35,162796,54147],{"class":58},[35,162798,499],{"class":359},[35,162800,162801],{"class":306},"\"请输入取款金额:\"",[35,162803,30823],{"class":359},[35,162805,162806,162808,162810,162812,162814],{"class":37,"line":280},[35,162807,3435],{"class":495},[35,162809,150393],{"class":359},[35,162811,1949],{"class":495},[35,162813,4427],{"class":58},[35,162815,4073],{"class":359},[35,162817,162818,162820,162822,162824],{"class":37,"line":289},[35,162819,32777],{"class":58},[35,162821,499],{"class":359},[35,162823,162730],{"class":306},[35,162825,505],{"class":359},[35,162827,162828],{"class":37,"line":294},[35,162829,152612],{"class":495},[35,162831,162832,162834,162836,162838],{"class":37,"line":300},[35,162833,3435],{"class":495},[35,162835,150393],{"class":359},[35,162837,1454],{"class":495},[35,162839,162840],{"class":359}," balance:\n",[35,162842,162843,162845,162847,162849],{"class":37,"line":313},[35,162844,32777],{"class":58},[35,162846,499],{"class":359},[35,162848,150488],{"class":306},[35,162850,505],{"class":359},[35,162852,162853],{"class":37,"line":324},[35,162854,152612],{"class":495},[35,162856,162857,162859,162861],{"class":37,"line":2955},[35,162858,162741],{"class":359},[35,162860,150503],{"class":495},[35,162862,150426],{"class":359},[35,162864,162865,162867,162869,162872],{"class":37,"line":8282},[35,162866,31625],{"class":58},[35,162868,499],{"class":359},[35,162870,162871],{"class":306},"\"取款成功\"",[35,162873,505],{"class":359},[35,162875,162876],{"class":37,"line":8306},[35,162877,162761],{"class":359},[35,162879,162880],{"class":37,"line":8311},[35,162881,141],{"emptyLinePlaceholder":140},[35,162883,162884],{"class":37,"line":8317},[35,162885,141],{"emptyLinePlaceholder":140},[35,162887,162888,162890,162892],{"class":37,"line":8344},[35,162889,108985],{"class":495},[35,162891,95617],{"class":58},[35,162893,4073],{"class":359},[35,162895,162896],{"class":37,"line":8349},[35,162897,162898],{"class":359},"    show_menu()\n",[35,162900,162901,162903,162905,162907,162909,162911],{"class":37,"line":8355},[35,162902,160943],{"class":359},[35,162904,544],{"class":495},[35,162906,60931],{"class":58},[35,162908,499],{"class":359},[35,162910,153324],{"class":306},[35,162912,505],{"class":359},[35,162914,162915],{"class":37,"line":8367},[35,162916,141],{"emptyLinePlaceholder":140},[35,162918,162919,162921,162923,162925,162927],{"class":37,"line":8379},[35,162920,3435],{"class":495},[35,162922,153337],{"class":359},[35,162924,3283],{"class":495},[35,162926,153342],{"class":306},[35,162928,4073],{"class":359},[35,162930,162931],{"class":37,"line":8391},[35,162932,162933],{"class":359},"        show_balance()\n",[35,162935,162936,162938,162940,162942,162944],{"class":37,"line":10050},[35,162937,39619],{"class":495},[35,162939,153337],{"class":359},[35,162941,3283],{"class":495},[35,162943,153361],{"class":306},[35,162945,4073],{"class":359},[35,162947,162948],{"class":37,"line":10075},[35,162949,162950],{"class":359},"        save_money()\n",[35,162952,162953,162955,162957,162959,162961],{"class":37,"line":10098},[35,162954,39619],{"class":495},[35,162956,153337],{"class":359},[35,162958,3283],{"class":495},[35,162960,153379],{"class":306},[35,162962,4073],{"class":359},[35,162964,162965],{"class":37,"line":10122},[35,162966,162967],{"class":359},"        withdraw_money()\n",[35,162969,162970,162972,162974,162976,162978],{"class":37,"line":10127},[35,162971,39619],{"class":495},[35,162973,153337],{"class":359},[35,162975,3283],{"class":495},[35,162977,153433],{"class":306},[35,162979,4073],{"class":359},[35,162981,162982,162984,162986,162988],{"class":37,"line":10132},[35,162983,32777],{"class":58},[35,162985,499],{"class":359},[35,162987,153444],{"class":306},[35,162989,505],{"class":359},[35,162991,162992],{"class":37,"line":10137},[35,162993,31953],{"class":495},[35,162995,162996,162998],{"class":37,"line":10146},[35,162997,158273],{"class":495},[35,162999,4073],{"class":359},[35,163001,163002,163004,163006,163008],{"class":37,"line":10151},[35,163003,32777],{"class":58},[35,163005,499],{"class":359},[35,163007,153465],{"class":306},[35,163009,505],{"class":359},[21,163011,163012],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[438,163014,163016],{"id":163015},"_514-易错点","5.14 易错点",[14,163018,163019,163022,163025,163030,163035,163038],{},[17,163020,163021],{},"函数定义后必须调用才会执行。",[17,163023,163024],{},"函数名后面有括号才是调用。",[17,163026,163027,163029],{},[32,163028,17380],{}," 后面的代码不会执行。",[17,163031,163032,163033,28711],{},"没有返回值的函数默认返回 ",[32,163034,96011],{},[17,163036,163037],{},"局部变量不能在函数外部访问。",[17,163039,163040,163041,163043],{},"不要滥用 ",[32,163042,162077],{},"，更好的方式是让函数返回新值。",[21,163045,163046,163047,163049],{},"例如不用 ",[32,163048,162077],{}," 改写存款：",[25,163051,163053],{"className":30704,"code":163052,"language":30706,"meta":30,"style":30},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[32,163054,163055,163064,163075,163079,163083,163091,163104],{"__ignoreMap":30},[35,163056,163057,163059,163061],{"class":37,"line":38},[35,163058,32273],{"class":495},[35,163060,162681],{"class":48},[35,163062,163063],{"class":359},"(balance, money):\n",[35,163065,163066,163068,163071,163073],{"class":37,"line":45},[35,163067,4424],{"class":495},[35,163069,163070],{"class":359}," balance ",[35,163072,975],{"class":495},[35,163074,150426],{"class":359},[35,163076,163077],{"class":37,"line":55},[35,163078,141],{"emptyLinePlaceholder":140},[35,163080,163081],{"class":37,"line":65},[35,163082,141],{"emptyLinePlaceholder":140},[35,163084,163085,163087,163089],{"class":37,"line":74},[35,163086,162555],{"class":359},[35,163088,544],{"class":495},[35,163090,162560],{"class":58},[35,163092,163093,163095,163097,163100,163102],{"class":37,"line":83},[35,163094,162555],{"class":359},[35,163096,544],{"class":495},[35,163098,163099],{"class":359}," save_money(balance, ",[35,163101,2072],{"class":58},[35,163103,505],{"class":359},[35,163105,163106,163108],{"class":37,"line":92},[35,163107,30741],{"class":58},[35,163109,163110],{"class":359},"(balance)\n",[438,163112,163114],{"id":163113},"_515-本章练习","5.15 本章练习",[14,163116,163117,163124,163130,163136,163142],{},[17,163118,163119,163120,163123],{},"定义函数 ",[32,163121,163122],{},"print_student(name, age)","，输出学生信息。",[17,163125,163119,163126,163129],{},[32,163127,163128],{},"get_max(a, b, c)","，返回三个数中的最大值。",[17,163131,163119,163132,163135],{},[32,163133,163134],{},"is_even(num)","，判断一个数是否为偶数。",[17,163137,163119,163138,163141],{},[32,163139,163140],{},"calculate_bmi(weight, height)","，返回 BMI。",[17,163143,163144],{},"把第 4 章的菜单程序拆分成多个函数。",[416,163146,163147],{},"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":30,"searchDepth":45,"depth":45,"links":163149},[163150,163151,163152,163153,163154,163155,163156,163157,163158,163162,163163,163164,163165,163166,163167],{"id":161170,"depth":45,"text":161171},{"id":161211,"depth":45,"text":161212},{"id":161301,"depth":45,"text":161302},{"id":161382,"depth":45,"text":161383},{"id":161515,"depth":45,"text":161516},{"id":161637,"depth":45,"text":161638},{"id":161759,"depth":45,"text":161760},{"id":161836,"depth":45,"text":161837},{"id":161958,"depth":45,"text":161959,"children":163159},[163160,163161],{"id":161962,"depth":55,"text":161963},{"id":162020,"depth":55,"text":162021},{"id":162149,"depth":45,"text":162150},{"id":162275,"depth":45,"text":162276},{"id":162388,"depth":45,"text":162389},{"id":162544,"depth":45,"text":162545},{"id":163015,"depth":45,"text":163016},{"id":163113,"depth":45,"text":163114},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161162,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163174,"title":163175,"body":163176,"description":421,"extension":422,"meta":166220,"navigation":140,"path":166221,"seo":166222,"stem":166223,"__hash__":166224},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163177,"toc":166201},[163178,163181,163185,163188,163191,163295,163298,163302,163305,163385,163388,163392,163395,163455,163458,163494,163497,163512,163516,163589,163592,163647,163650,163720,163723,163807,163817,163875,163879,163924,163927,163953,163956,164062,164066,164069,164111,164114,164178,164181,164185,164188,164249,164252,164282,164285,164323,164327,164330,164339,164342,164466,164469,164510,164514,164517,164528,164568,164571,164586,164591,164594,164661,164664,164754,164758,164761,164809,164812,164839,164841,164871,164874,164894,164897,164928,164931,164964,164968,164971,164995,164998,165022,165025,165049,165053,165056,165186,165189,165269,165272,165347,165351,165354,165404,165407,165449,165452,165476,165478,165502,165505,165560,165563,165629,165633,165636,165639,165677,165680,165733,165736,165782,165785,165818,165821,165825,166144,166148,166177,166181,166198],[10,163179,163175],{"id":163180},"_6-数据容器",[438,163182,163184],{"id":163183},"_61-什么是数据容器","6.1 什么是数据容器",[21,163186,163187],{},"数据容器用于一次保存多个数据。",[21,163189,163190],{},"常见容器：",[633,163192,163193,163210],{},[636,163194,163195],{},[639,163196,163197,163199,163202,163205,163208],{},[642,163198,26102],{},[642,163200,163201],{},"是否有序",[642,163203,163204],{},"是否可变",[642,163206,163207],{},"是否允许重复",[642,163209,27820],{},[680,163211,163212,163230,163246,163261,163278],{},[639,163213,163214,163217,163220,163223,163226],{},[685,163215,163216],{},"list列表",[685,163218,163219],{},"有序",[685,163221,163222],{},"可变",[685,163224,163225],{},"允许",[685,163227,163228],{},[32,163229,155508],{},[639,163231,163232,163235,163237,163240,163242],{},[685,163233,163234],{},"tuple元组",[685,163236,163219],{},[685,163238,163239],{},"不可变",[685,163241,163225],{},[685,163243,163244],{},[32,163245,155521],{},[639,163247,163248,163251,163253,163255,163257],{},[685,163249,163250],{},"str字符串",[685,163252,163219],{},[685,163254,163239],{},[685,163256,163225],{},[685,163258,163259],{},[32,163260,156131],{},[639,163262,163263,163266,163269,163271,163274],{},[685,163264,163265],{},"set集合",[685,163267,163268],{},"无序",[685,163270,163222],{},[685,163272,163273],{},"不允许",[685,163275,163276],{},[32,163277,155546],{},[639,163279,163280,163283,163285,163287,163290],{},[685,163281,163282],{},"dict字典",[685,163284,163219],{},[685,163286,163222],{},[685,163288,163289],{},"key不允许重复",[685,163291,163292],{},[32,163293,163294],{},"{\"name\": \"小明\"}",[21,163296,163297],{},"Python 3.7 之后，字典保持插入顺序。",[438,163299,163301],{"id":163300},"_62-列表list","6.2 列表list",[21,163303,163304],{},"列表用于保存一组有顺序的数据。",[25,163306,163308],{"className":30704,"code":163307,"language":30706,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[32,163309,163310,163330,163355,163376],{"__ignoreMap":30},[35,163311,163312,163314,163316,163318,163320,163322,163324,163326,163328],{"class":37,"line":38},[35,163313,160631],{"class":359},[35,163315,544],{"class":495},[35,163317,52552],{"class":359},[35,163319,150139],{"class":306},[35,163321,12769],{"class":359},[35,163323,151187],{"class":306},[35,163325,12769],{"class":359},[35,163327,159982],{"class":306},[35,163329,33572],{"class":359},[35,163331,163332,163335,163337,163339,163341,163343,163345,163347,163349,163351,163353],{"class":37,"line":45},[35,163333,163334],{"class":359},"numbers ",[35,163336,544],{"class":495},[35,163338,52552],{"class":359},[35,163340,713],{"class":58},[35,163342,12769],{"class":359},[35,163344,574],{"class":58},[35,163346,12769],{"class":359},[35,163348,568],{"class":58},[35,163350,12769],{"class":359},[35,163352,789],{"class":58},[35,163354,33572],{"class":359},[35,163356,163357,163360,163362,163364,163366,163368,163370,163372,163374],{"class":37,"line":55},[35,163358,163359],{"class":359},"mixed ",[35,163361,544],{"class":495},[35,163363,52552],{"class":359},[35,163365,150139],{"class":306},[35,163367,12769],{"class":359},[35,163369,1144],{"class":58},[35,163371,12769],{"class":359},[35,163373,31802],{"class":58},[35,163375,33572],{"class":359},[35,163377,163378,163381,163383],{"class":37,"line":65},[35,163379,163380],{"class":359},"empty ",[35,163382,544],{"class":495},[35,163384,52164],{"class":359},[21,163386,163387],{},"推荐一个列表中保存同类数据，代码更清晰。",[438,163389,163391],{"id":163390},"_63-列表索引","6.3 列表索引",[21,163393,163394],{},"正向索引从 0 开始：",[25,163396,163398],{"className":30704,"code":163397,"language":30706,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[32,163399,163400,163420,163424,163435,163445],{"__ignoreMap":30},[35,163401,163402,163404,163406,163408,163410,163412,163414,163416,163418],{"class":37,"line":38},[35,163403,160631],{"class":359},[35,163405,544],{"class":495},[35,163407,52552],{"class":359},[35,163409,150139],{"class":306},[35,163411,12769],{"class":359},[35,163413,151187],{"class":306},[35,163415,12769],{"class":359},[35,163417,159982],{"class":306},[35,163419,33572],{"class":359},[35,163421,163422],{"class":37,"line":45},[35,163423,141],{"emptyLinePlaceholder":140},[35,163425,163426,163428,163431,163433],{"class":37,"line":55},[35,163427,30741],{"class":58},[35,163429,163430],{"class":359},"(names[",[35,163432,687],{"class":58},[35,163434,4991],{"class":359},[35,163436,163437,163439,163441,163443],{"class":37,"line":65},[35,163438,30741],{"class":58},[35,163440,163430],{"class":359},[35,163442,713],{"class":58},[35,163444,4991],{"class":359},[35,163446,163447,163449,163451,163453],{"class":37,"line":74},[35,163448,30741],{"class":58},[35,163450,163430],{"class":359},[35,163452,574],{"class":58},[35,163454,4991],{"class":359},[21,163456,163457],{},"反向索引从 -1 开始：",[25,163459,163461],{"className":30704,"code":163460,"language":30706,"meta":30,"style":30},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[32,163462,163463,163479],{"__ignoreMap":30},[35,163464,163465,163467,163469,163471,163473,163476],{"class":37,"line":38},[35,163466,30741],{"class":58},[35,163468,163430],{"class":359},[35,163470,1026],{"class":495},[35,163472,713],{"class":58},[35,163474,163475],{"class":359},"])  ",[35,163477,163478],{"class":41},"# 小刚\n",[35,163480,163481,163483,163485,163487,163489,163491],{"class":37,"line":45},[35,163482,30741],{"class":58},[35,163484,163430],{"class":359},[35,163486,1026],{"class":495},[35,163488,574],{"class":58},[35,163490,163475],{"class":359},[35,163492,163493],{"class":41},"# 小红\n",[21,163495,163496],{},"索引越界会报错：",[25,163498,163500],{"className":30704,"code":163499,"language":30706,"meta":30,"style":30},"print(names[3])\n",[32,163501,163502],{"__ignoreMap":30},[35,163503,163504,163506,163508,163510],{"class":37,"line":38},[35,163505,30741],{"class":58},[35,163507,163430],{"class":359},[35,163509,568],{"class":58},[35,163511,4991],{"class":359},[438,163513,163515],{"id":163514},"_64-列表常用方法","6.4 列表常用方法",[25,163517,163519],{"className":30704,"code":163518,"language":30706,"meta":30,"style":30},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[32,163520,163521,163537,163541,163550,163564,163578,163582],{"__ignoreMap":30},[35,163522,163523,163525,163527,163529,163531,163533,163535],{"class":37,"line":38},[35,163524,160631],{"class":359},[35,163526,544],{"class":495},[35,163528,52552],{"class":359},[35,163530,150139],{"class":306},[35,163532,12769],{"class":359},[35,163534,151187],{"class":306},[35,163536,33572],{"class":359},[35,163538,163539],{"class":37,"line":45},[35,163540,141],{"emptyLinePlaceholder":140},[35,163542,163543,163546,163548],{"class":37,"line":55},[35,163544,163545],{"class":359},"names.append(",[35,163547,159982],{"class":306},[35,163549,505],{"class":359},[35,163551,163552,163555,163557,163559,163562],{"class":37,"line":65},[35,163553,163554],{"class":359},"names.insert(",[35,163556,713],{"class":58},[35,163558,12769],{"class":359},[35,163560,163561],{"class":306},"\"小李\"",[35,163563,505],{"class":359},[35,163565,163566,163569,163571,163573,163576],{"class":37,"line":74},[35,163567,163568],{"class":359},"names.extend([",[35,163570,9017],{"class":306},[35,163572,12769],{"class":359},[35,163574,163575],{"class":306},"\"小赵\"",[35,163577,4991],{"class":359},[35,163579,163580],{"class":37,"line":83},[35,163581,141],{"emptyLinePlaceholder":140},[35,163583,163584,163586],{"class":37,"line":92},[35,163585,30741],{"class":58},[35,163587,163588],{"class":359},"(names)\n",[21,163590,163591],{},"删除元素：",[25,163593,163595],{"className":30704,"code":163594,"language":30706,"meta":30,"style":30},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[32,163596,163597,163606,163616,163630,163642],{"__ignoreMap":30},[35,163598,163599,163602,163604],{"class":37,"line":38},[35,163600,163601],{"class":359},"names.remove(",[35,163603,151187],{"class":306},[35,163605,505],{"class":359},[35,163607,163608,163611,163613],{"class":37,"line":45},[35,163609,163610],{"class":359},"last ",[35,163612,544],{"class":495},[35,163614,163615],{"class":359}," names.pop()\n",[35,163617,163618,163621,163623,163626,163628],{"class":37,"line":55},[35,163619,163620],{"class":359},"first ",[35,163622,544],{"class":495},[35,163624,163625],{"class":359}," names.pop(",[35,163627,687],{"class":58},[35,163629,505],{"class":359},[35,163631,163632,163635,163638,163640],{"class":37,"line":65},[35,163633,163634],{"class":495},"del",[35,163636,163637],{"class":359}," names[",[35,163639,687],{"class":58},[35,163641,33572],{"class":359},[35,163643,163644],{"class":37,"line":74},[35,163645,163646],{"class":359},"names.clear()\n",[21,163648,163649],{},"查询和统计：",[25,163651,163653],{"className":30704,"code":163652,"language":30706,"meta":30,"style":30},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[32,163654,163655,163683,163687,163698,163709],{"__ignoreMap":30},[35,163656,163657,163659,163661,163663,163665,163667,163669,163671,163673,163675,163677,163679,163681],{"class":37,"line":38},[35,163658,163334],{"class":359},[35,163660,544],{"class":495},[35,163662,52552],{"class":359},[35,163664,713],{"class":58},[35,163666,12769],{"class":359},[35,163668,574],{"class":58},[35,163670,12769],{"class":359},[35,163672,568],{"class":58},[35,163674,12769],{"class":359},[35,163676,574],{"class":58},[35,163678,12769],{"class":359},[35,163680,789],{"class":58},[35,163682,33572],{"class":359},[35,163684,163685],{"class":37,"line":45},[35,163686,141],{"emptyLinePlaceholder":140},[35,163688,163689,163691,163694,163696],{"class":37,"line":55},[35,163690,30741],{"class":58},[35,163692,163693],{"class":359},"(numbers.index(",[35,163695,568],{"class":58},[35,163697,30823],{"class":359},[35,163699,163700,163702,163705,163707],{"class":37,"line":65},[35,163701,30741],{"class":58},[35,163703,163704],{"class":359},"(numbers.count(",[35,163706,574],{"class":58},[35,163708,30823],{"class":359},[35,163710,163711,163713,163715,163717],{"class":37,"line":74},[35,163712,30741],{"class":58},[35,163714,499],{"class":359},[35,163716,7692],{"class":58},[35,163718,163719],{"class":359},"(numbers))\n",[21,163721,163722],{},"排序：",[25,163724,163726],{"className":30704,"code":163725,"language":30706,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[32,163727,163728,163752,163756,163761,163768,163772,163786,163792,163796,163801],{"__ignoreMap":30},[35,163729,163730,163732,163734,163736,163738,163740,163742,163744,163746,163748,163750],{"class":37,"line":38},[35,163731,163334],{"class":359},[35,163733,544],{"class":495},[35,163735,52552],{"class":359},[35,163737,568],{"class":58},[35,163739,12769],{"class":359},[35,163741,713],{"class":58},[35,163743,12769],{"class":359},[35,163745,372],{"class":58},[35,163747,12769],{"class":359},[35,163749,574],{"class":58},[35,163751,33572],{"class":359},[35,163753,163754],{"class":37,"line":45},[35,163755,141],{"emptyLinePlaceholder":140},[35,163757,163758],{"class":37,"line":55},[35,163759,163760],{"class":359},"numbers.sort()\n",[35,163762,163763,163765],{"class":37,"line":65},[35,163764,30741],{"class":58},[35,163766,163767],{"class":359},"(numbers)\n",[35,163769,163770],{"class":37,"line":74},[35,163771,141],{"emptyLinePlaceholder":140},[35,163773,163774,163777,163780,163782,163784],{"class":37,"line":83},[35,163775,163776],{"class":359},"numbers.sort(",[35,163778,163779],{"class":5550},"reverse",[35,163781,544],{"class":495},[35,163783,31802],{"class":58},[35,163785,505],{"class":359},[35,163787,163788,163790],{"class":37,"line":92},[35,163789,30741],{"class":58},[35,163791,163767],{"class":359},[35,163793,163794],{"class":37,"line":101},[35,163795,141],{"emptyLinePlaceholder":140},[35,163797,163798],{"class":37,"line":110},[35,163799,163800],{"class":359},"numbers.reverse()\n",[35,163802,163803,163805],{"class":37,"line":119},[35,163804,30741],{"class":58},[35,163806,163767],{"class":359},[21,163808,163809,163812,163813,163816],{},[32,163810,163811],{},"sort()"," 会修改原列表，",[32,163814,163815],{},"sorted()"," 返回新列表。",[25,163818,163820],{"className":30704,"code":163819,"language":30706,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[32,163821,163822,163846,163858,163862,163868],{"__ignoreMap":30},[35,163823,163824,163826,163828,163830,163832,163834,163836,163838,163840,163842,163844],{"class":37,"line":38},[35,163825,163334],{"class":359},[35,163827,544],{"class":495},[35,163829,52552],{"class":359},[35,163831,568],{"class":58},[35,163833,12769],{"class":359},[35,163835,713],{"class":58},[35,163837,12769],{"class":359},[35,163839,372],{"class":58},[35,163841,12769],{"class":359},[35,163843,574],{"class":58},[35,163845,33572],{"class":359},[35,163847,163848,163851,163853,163856],{"class":37,"line":45},[35,163849,163850],{"class":359},"new_numbers ",[35,163852,544],{"class":495},[35,163854,163855],{"class":58}," sorted",[35,163857,163767],{"class":359},[35,163859,163860],{"class":37,"line":55},[35,163861,141],{"emptyLinePlaceholder":140},[35,163863,163864,163866],{"class":37,"line":65},[35,163865,30741],{"class":58},[35,163867,163767],{"class":359},[35,163869,163870,163872],{"class":37,"line":74},[35,163871,30741],{"class":58},[35,163873,163874],{"class":359},"(new_numbers)\n",[438,163876,163878],{"id":163877},"_65-列表遍历","6.5 列表遍历",[25,163880,163882],{"className":30704,"code":163881,"language":30706,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[32,163883,163884,163904,163908,163918],{"__ignoreMap":30},[35,163885,163886,163888,163890,163892,163894,163896,163898,163900,163902],{"class":37,"line":38},[35,163887,160631],{"class":359},[35,163889,544],{"class":495},[35,163891,52552],{"class":359},[35,163893,150139],{"class":306},[35,163895,12769],{"class":359},[35,163897,151187],{"class":306},[35,163899,12769],{"class":359},[35,163901,159982],{"class":306},[35,163903,33572],{"class":359},[35,163905,163906],{"class":37,"line":45},[35,163907,141],{"emptyLinePlaceholder":140},[35,163909,163910,163912,163914,163916],{"class":37,"line":55},[35,163911,3359],{"class":495},[35,163913,160667],{"class":359},[35,163915,26374],{"class":495},[35,163917,160672],{"class":359},[35,163919,163920,163922],{"class":37,"line":65},[35,163921,31625],{"class":58},[35,163923,150911],{"class":359},[21,163925,163926],{},"需要索引时：",[25,163928,163930],{"className":30704,"code":163929,"language":30706,"meta":30,"style":30},"for index, name in enumerate(names):\n    print(index, name)\n",[32,163931,163932,163946],{"__ignoreMap":30},[35,163933,163934,163936,163939,163941,163943],{"class":37,"line":38},[35,163935,3359],{"class":495},[35,163937,163938],{"class":359}," index, name ",[35,163940,26374],{"class":495},[35,163942,31932],{"class":58},[35,163944,163945],{"class":359},"(names):\n",[35,163947,163948,163950],{"class":37,"line":45},[35,163949,31625],{"class":58},[35,163951,163952],{"class":359},"(index, name)\n",[21,163954,163955],{},"统计总分：",[25,163957,163959],{"className":30704,"code":163958,"language":30706,"meta":30,"style":30},"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",[32,163960,163961,163986,163994,163998,164009,164017,164021,164038],{"__ignoreMap":30},[35,163962,163963,163966,163968,163970,163972,163974,163976,163978,163980,163982,163984],{"class":37,"line":38},[35,163964,163965],{"class":359},"scores ",[35,163967,544],{"class":495},[35,163969,52552],{"class":359},[35,163971,1356],{"class":58},[35,163973,12769],{"class":359},[35,163975,1230],{"class":58},[35,163977,12769],{"class":359},[35,163979,750],{"class":58},[35,163981,12769],{"class":359},[35,163983,1055],{"class":58},[35,163985,33572],{"class":359},[35,163987,163988,163990,163992],{"class":37,"line":45},[35,163989,157511],{"class":359},[35,163991,544],{"class":495},[35,163993,47659],{"class":58},[35,163995,163996],{"class":37,"line":55},[35,163997,141],{"emptyLinePlaceholder":140},[35,163999,164000,164002,164004,164006],{"class":37,"line":65},[35,164001,3359],{"class":495},[35,164003,158034],{"class":359},[35,164005,26374],{"class":495},[35,164007,164008],{"class":359}," scores:\n",[35,164010,164011,164013,164015],{"class":37,"line":74},[35,164012,159558],{"class":359},[35,164014,9811],{"class":495},[35,164016,1940],{"class":359},[35,164018,164019],{"class":37,"line":83},[35,164020,141],{"emptyLinePlaceholder":140},[35,164022,164023,164026,164028,164031,164033,164035],{"class":37,"line":92},[35,164024,164025],{"class":359},"avg ",[35,164027,544],{"class":495},[35,164029,164030],{"class":359}," total ",[35,164032,1078],{"class":495},[35,164034,7665],{"class":58},[35,164036,164037],{"class":359},"(scores)\n",[35,164039,164040,164042,164044,164046,164049,164051,164054,164056,164058,164060],{"class":37,"line":101},[35,164041,30741],{"class":58},[35,164043,499],{"class":359},[35,164045,550],{"class":495},[35,164047,164048],{"class":306},"\"平均分:",[35,164050,1390],{"class":58},[35,164052,164053],{"class":359},"avg",[35,164055,157410],{"class":495},[35,164057,1440],{"class":58},[35,164059,747],{"class":306},[35,164061,505],{"class":359},[438,164063,164065],{"id":164064},"_66-元组tuple","6.6 元组tuple",[21,164067,164068],{},"元组和列表类似，但不可修改。",[25,164070,164072],{"className":30704,"code":164071,"language":30706,"meta":30,"style":30},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[32,164073,164074,164091],{"__ignoreMap":30},[35,164075,164076,164079,164081,164083,164085,164087,164089],{"class":37,"line":38},[35,164077,164078],{"class":359},"point ",[35,164080,544],{"class":495},[35,164082,2012],{"class":359},[35,164084,940],{"class":58},[35,164086,12769],{"class":359},[35,164088,1194],{"class":58},[35,164090,505],{"class":359},[35,164092,164093,164095,164097,164099,164101,164103,164105,164107,164109],{"class":37,"line":45},[35,164094,116636],{"class":359},[35,164096,544],{"class":495},[35,164098,2012],{"class":359},[35,164100,150139],{"class":306},[35,164102,12769],{"class":359},[35,164104,1144],{"class":58},[35,164106,12769],{"class":359},[35,164108,69595],{"class":306},[35,164110,505],{"class":359},[21,164112,164113],{},"单元素元组必须加逗号：",[25,164115,164117],{"className":30704,"code":164116,"language":30706,"meta":30,"style":30},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[32,164118,164119,164133,164146,164150,164164],{"__ignoreMap":30},[35,164120,164121,164124,164126,164128,164130],{"class":37,"line":38},[35,164122,164123],{"class":359},"t1 ",[35,164125,544],{"class":495},[35,164127,2012],{"class":359},[35,164129,940],{"class":58},[35,164131,164132],{"class":359},",)\n",[35,164134,164135,164138,164140,164142,164144],{"class":37,"line":45},[35,164136,164137],{"class":359},"t2 ",[35,164139,544],{"class":495},[35,164141,2012],{"class":359},[35,164143,940],{"class":58},[35,164145,505],{"class":359},[35,164147,164148],{"class":37,"line":55},[35,164149,141],{"emptyLinePlaceholder":140},[35,164151,164152,164154,164156,164158,164161],{"class":37,"line":65},[35,164153,30741],{"class":58},[35,164155,499],{"class":359},[35,164157,103429],{"class":58},[35,164159,164160],{"class":359},"(t1))  ",[35,164162,164163],{"class":41},"# tuple\n",[35,164165,164166,164168,164170,164172,164175],{"class":37,"line":74},[35,164167,30741],{"class":58},[35,164169,499],{"class":359},[35,164171,103429],{"class":58},[35,164173,164174],{"class":359},"(t2))  ",[35,164176,164177],{"class":41},"# int\n",[21,164179,164180],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[438,164182,164184],{"id":164183},"_67-字符串str","6.7 字符串str",[21,164186,164187],{},"字符串也是序列，可以索引、切片和遍历。",[25,164189,164191],{"className":30704,"code":164190,"language":30706,"meta":30,"style":30},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[32,164192,164193,164201,164205,164216,164228,164232,164243],{"__ignoreMap":30},[35,164194,164195,164197,164199],{"class":37,"line":38},[35,164196,156695],{"class":359},[35,164198,544],{"class":495},[35,164200,159932],{"class":306},[35,164202,164203],{"class":37,"line":45},[35,164204,141],{"emptyLinePlaceholder":140},[35,164206,164207,164209,164212,164214],{"class":37,"line":55},[35,164208,30741],{"class":58},[35,164210,164211],{"class":359},"(text[",[35,164213,687],{"class":58},[35,164215,4991],{"class":359},[35,164217,164218,164220,164222,164224,164226],{"class":37,"line":65},[35,164219,30741],{"class":58},[35,164221,164211],{"class":359},[35,164223,1026],{"class":495},[35,164225,713],{"class":58},[35,164227,4991],{"class":359},[35,164229,164230],{"class":37,"line":74},[35,164231,141],{"emptyLinePlaceholder":140},[35,164233,164234,164236,164238,164240],{"class":37,"line":83},[35,164235,3359],{"class":495},[35,164237,159943],{"class":359},[35,164239,26374],{"class":495},[35,164241,164242],{"class":359}," text:\n",[35,164244,164245,164247],{"class":37,"line":92},[35,164246,31625],{"class":58},[35,164248,159954],{"class":359},[21,164250,164251],{},"字符串不可变：",[25,164253,164255],{"className":30704,"code":164254,"language":30706,"meta":30,"style":30},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[32,164256,164257,164265],{"__ignoreMap":30},[35,164258,164259,164261,164263],{"class":37,"line":38},[35,164260,156695],{"class":359},[35,164262,544],{"class":495},[35,164264,159932],{"class":306},[35,164266,164267,164270,164272,164274,164276,164279],{"class":37,"line":45},[35,164268,164269],{"class":359},"text[",[35,164271,687],{"class":58},[35,164273,4777],{"class":359},[35,164275,544],{"class":495},[35,164277,164278],{"class":306}," \"P\"",[35,164280,164281],{"class":41},"  # 报错\n",[21,164283,164284],{},"如果要得到新字符串：",[25,164286,164288],{"className":30704,"code":164287,"language":30706,"meta":30,"style":30},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[32,164289,164290,164298,164316],{"__ignoreMap":30},[35,164291,164292,164294,164296],{"class":37,"line":38},[35,164293,156695],{"class":359},[35,164295,544],{"class":495},[35,164297,159932],{"class":306},[35,164299,164300,164302,164304,164306,164308,164311,164313],{"class":37,"line":45},[35,164301,156695],{"class":359},[35,164303,544],{"class":495},[35,164305,164278],{"class":306},[35,164307,45892],{"class":495},[35,164309,164310],{"class":359}," text[",[35,164312,713],{"class":58},[35,164314,164315],{"class":359},":]\n",[35,164317,164318,164320],{"class":37,"line":55},[35,164319,30741],{"class":58},[35,164321,164322],{"class":359},"(text)\n",[438,164324,164326],{"id":164325},"_68-切片","6.8 切片",[21,164328,164329],{},"切片用于从序列中取一部分。",[25,164331,164333],{"className":30704,"code":164332,"language":30706,"meta":30,"style":30},"序列[开始:结束:步长]\n",[32,164334,164335],{"__ignoreMap":30},[35,164336,164337],{"class":37,"line":38},[35,164338,164332],{"class":359},[21,164340,164341],{},"结束位置不包含。",[25,164343,164345],{"className":30704,"code":164344,"language":30706,"meta":30,"style":30},"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",[32,164346,164347,164384,164388,164407,164422,164436,164450],{"__ignoreMap":30},[35,164348,164349,164352,164354,164356,164358,164360,164362,164364,164366,164368,164370,164372,164374,164376,164378,164380,164382],{"class":37,"line":38},[35,164350,164351],{"class":359},"nums ",[35,164353,544],{"class":495},[35,164355,52552],{"class":359},[35,164357,687],{"class":58},[35,164359,12769],{"class":359},[35,164361,713],{"class":58},[35,164363,12769],{"class":359},[35,164365,574],{"class":58},[35,164367,12769],{"class":359},[35,164369,568],{"class":58},[35,164371,12769],{"class":359},[35,164373,789],{"class":58},[35,164375,12769],{"class":359},[35,164377,372],{"class":58},[35,164379,12769],{"class":359},[35,164381,408],{"class":58},[35,164383,33572],{"class":359},[35,164385,164386],{"class":37,"line":45},[35,164387,141],{"emptyLinePlaceholder":140},[35,164389,164390,164392,164395,164397,164399,164401,164404],{"class":37,"line":55},[35,164391,30741],{"class":58},[35,164393,164394],{"class":359},"(nums[",[35,164396,713],{"class":58},[35,164398,1353],{"class":359},[35,164400,789],{"class":58},[35,164402,164403],{"class":359},"])    ",[35,164405,164406],{"class":41},"# [1, 2, 3]\n",[35,164408,164409,164411,164414,164416,164419],{"class":37,"line":65},[35,164410,30741],{"class":58},[35,164412,164413],{"class":359},"(nums[:",[35,164415,568],{"class":58},[35,164417,164418],{"class":359},"])     ",[35,164420,164421],{"class":41},"# [0, 1, 2]\n",[35,164423,164424,164426,164428,164430,164433],{"class":37,"line":74},[35,164425,30741],{"class":58},[35,164427,164394],{"class":359},[35,164429,568],{"class":58},[35,164431,164432],{"class":359},":])     ",[35,164434,164435],{"class":41},"# [3, 4, 5, 6]\n",[35,164437,164438,164440,164443,164445,164447],{"class":37,"line":83},[35,164439,30741],{"class":58},[35,164441,164442],{"class":359},"(nums[::",[35,164444,574],{"class":58},[35,164446,164403],{"class":359},[35,164448,164449],{"class":41},"# [0, 2, 4, 6]\n",[35,164451,164452,164454,164456,164458,164460,164463],{"class":37,"line":92},[35,164453,30741],{"class":58},[35,164455,164442],{"class":359},[35,164457,1026],{"class":495},[35,164459,713],{"class":58},[35,164461,164462],{"class":359},"])   ",[35,164464,164465],{"class":41},"# 反转\n",[21,164467,164468],{},"字符串切片：",[25,164470,164472],{"className":30704,"code":164471,"language":30706,"meta":30,"style":30},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[32,164473,164474,164483,164497],{"__ignoreMap":30},[35,164475,164476,164478,164480],{"class":37,"line":38},[35,164477,156695],{"class":359},[35,164479,544],{"class":495},[35,164481,164482],{"class":306}," \"abcdef\"\n",[35,164484,164485,164487,164489,164491,164493,164495],{"class":37,"line":45},[35,164486,30741],{"class":58},[35,164488,164211],{"class":359},[35,164490,713],{"class":58},[35,164492,1353],{"class":359},[35,164494,789],{"class":58},[35,164496,4991],{"class":359},[35,164498,164499,164501,164504,164506,164508],{"class":37,"line":55},[35,164500,30741],{"class":58},[35,164502,164503],{"class":359},"(text[::",[35,164505,1026],{"class":495},[35,164507,713],{"class":58},[35,164509,4991],{"class":359},[438,164511,164513],{"id":164512},"_69-集合set","6.9 集合set",[21,164515,164516],{},"集合特点：",[14,164518,164519,164522,164525],{},[17,164520,164521],{},"无序。",[17,164523,164524],{},"元素不重复。",[17,164526,164527],{},"可以做交集、并集、差集。",[25,164529,164531],{"className":30704,"code":164530,"language":30706,"meta":30,"style":30},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[32,164532,164533,164561],{"__ignoreMap":30},[35,164534,164535,164537,164539,164541,164543,164545,164547,164549,164551,164553,164555,164557,164559],{"class":37,"line":38},[35,164536,164351],{"class":359},[35,164538,544],{"class":495},[35,164540,4782],{"class":359},[35,164542,713],{"class":58},[35,164544,12769],{"class":359},[35,164546,574],{"class":58},[35,164548,12769],{"class":359},[35,164550,568],{"class":58},[35,164552,12769],{"class":359},[35,164554,568],{"class":58},[35,164556,12769],{"class":359},[35,164558,789],{"class":58},[35,164560,1926],{"class":359},[35,164562,164563,164565],{"class":37,"line":45},[35,164564,30741],{"class":58},[35,164566,164567],{"class":359},"(nums)\n",[21,164569,164570],{},"创建空集合：",[25,164572,164574],{"className":30704,"code":164573,"language":30706,"meta":30,"style":30},"s = set()\n",[32,164575,164576],{"__ignoreMap":30},[35,164577,164578,164580,164582,164584],{"class":37,"line":38},[35,164579,10913],{"class":359},[35,164581,544],{"class":495},[35,164583,120040],{"class":58},[35,164585,2317],{"class":359},[21,164587,9359,164588,164590],{},[32,164589,32785],{}," 是空字典，不是空集合。",[21,164592,164593],{},"集合常用操作：",[25,164595,164597],{"className":30704,"code":164596,"language":30706,"meta":30,"style":30},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[32,164598,164599,164619,164623,164632,164641,164650],{"__ignoreMap":30},[35,164600,164601,164603,164605,164607,164609,164611,164613,164615,164617],{"class":37,"line":38},[35,164602,10913],{"class":359},[35,164604,544],{"class":495},[35,164606,4782],{"class":359},[35,164608,713],{"class":58},[35,164610,12769],{"class":359},[35,164612,574],{"class":58},[35,164614,12769],{"class":359},[35,164616,568],{"class":58},[35,164618,1926],{"class":359},[35,164620,164621],{"class":37,"line":45},[35,164622,141],{"emptyLinePlaceholder":140},[35,164624,164625,164628,164630],{"class":37,"line":55},[35,164626,164627],{"class":359},"s.add(",[35,164629,789],{"class":58},[35,164631,505],{"class":359},[35,164633,164634,164637,164639],{"class":37,"line":65},[35,164635,164636],{"class":359},"s.remove(",[35,164638,574],{"class":58},[35,164640,505],{"class":359},[35,164642,164643,164646,164648],{"class":37,"line":74},[35,164644,164645],{"class":359},"s.discard(",[35,164647,940],{"class":58},[35,164649,505],{"class":359},[35,164651,164652,164654,164656,164658],{"class":37,"line":83},[35,164653,30741],{"class":58},[35,164655,499],{"class":359},[35,164657,7692],{"class":58},[35,164659,164660],{"class":359},"(s))\n",[21,164662,164663],{},"交并差：",[25,164665,164667],{"className":30704,"code":164666,"language":30706,"meta":30,"style":30},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[32,164668,164669,164689,164709,164713,164728,164741],{"__ignoreMap":30},[35,164670,164671,164673,164675,164677,164679,164681,164683,164685,164687],{"class":37,"line":38},[35,164672,11253],{"class":359},[35,164674,544],{"class":495},[35,164676,4782],{"class":359},[35,164678,713],{"class":58},[35,164680,12769],{"class":359},[35,164682,574],{"class":58},[35,164684,12769],{"class":359},[35,164686,568],{"class":58},[35,164688,1926],{"class":359},[35,164690,164691,164693,164695,164697,164699,164701,164703,164705,164707],{"class":37,"line":45},[35,164692,11279],{"class":359},[35,164694,544],{"class":495},[35,164696,4782],{"class":359},[35,164698,568],{"class":58},[35,164700,12769],{"class":359},[35,164702,789],{"class":58},[35,164704,12769],{"class":359},[35,164706,372],{"class":58},[35,164708,1926],{"class":359},[35,164710,164711],{"class":37,"line":55},[35,164712,141],{"emptyLinePlaceholder":140},[35,164714,164715,164717,164720,164722,164725],{"class":37,"line":65},[35,164716,30741],{"class":58},[35,164718,164719],{"class":359},"(a ",[35,164721,847],{"class":495},[35,164723,164724],{"class":359}," b)  ",[35,164726,164727],{"class":41},"# 交集\n",[35,164729,164730,164732,164734,164736,164738],{"class":37,"line":74},[35,164731,30741],{"class":58},[35,164733,164719],{"class":359},[35,164735,1415],{"class":495},[35,164737,164724],{"class":359},[35,164739,164740],{"class":41},"# 并集\n",[35,164742,164743,164745,164747,164749,164751],{"class":37,"line":83},[35,164744,30741],{"class":58},[35,164746,164719],{"class":359},[35,164748,1026],{"class":495},[35,164750,164724],{"class":359},[35,164752,164753],{"class":41},"# 差集\n",[438,164755,164757],{"id":164756},"_610-字典dict","6.10 字典dict",[21,164759,164760],{},"字典通过 key-value 保存数据。",[25,164762,164764],{"className":30704,"code":164763,"language":30706,"meta":30,"style":30},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[32,164765,164766,164774,164784,164795,164805],{"__ignoreMap":30},[35,164767,164768,164770,164772],{"class":37,"line":38},[35,164769,149732],{"class":359},[35,164771,544],{"class":495},[35,164773,15906],{"class":359},[35,164775,164776,164778,164780,164782],{"class":37,"line":45},[35,164777,147271],{"class":306},[35,164779,51763],{"class":359},[35,164781,150139],{"class":306},[35,164783,31792],{"class":359},[35,164785,164786,164789,164791,164793],{"class":37,"line":55},[35,164787,164788],{"class":306},"    \"age\"",[35,164790,51763],{"class":359},[35,164792,1144],{"class":58},[35,164794,31792],{"class":359},[35,164796,164797,164800,164802],{"class":37,"line":65},[35,164798,164799],{"class":306},"    \"score\"",[35,164801,51763],{"class":359},[35,164803,164804],{"class":58},"95\n",[35,164806,164807],{"class":37,"line":74},[35,164808,1926],{"class":359},[21,164810,164811],{},"获取值：",[25,164813,164815],{"className":30704,"code":164814,"language":30706,"meta":30,"style":30},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[32,164816,164817,164828],{"__ignoreMap":30},[35,164818,164819,164821,164824,164826],{"class":37,"line":38},[35,164820,30741],{"class":58},[35,164822,164823],{"class":359},"(student[",[35,164825,63005],{"class":306},[35,164827,4991],{"class":359},[35,164829,164830,164832,164835,164837],{"class":37,"line":45},[35,164831,30741],{"class":58},[35,164833,164834],{"class":359},"(student.get(",[35,164836,63005],{"class":306},[35,164838,30823],{"class":359},[21,164840,15722],{},[25,164842,164844],{"className":30704,"code":164843,"language":30706,"meta":30,"style":30},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[32,164845,164846,164859],{"__ignoreMap":30},[35,164847,164848,164850,164853,164856],{"class":37,"line":38},[35,164849,153110],{"class":359},[35,164851,164852],{"class":306},"\"address\"",[35,164854,164855],{"class":359},"]     ",[35,164857,164858],{"class":41},"# key不存在会报错\n",[35,164860,164861,164864,164866,164868],{"class":37,"line":45},[35,164862,164863],{"class":359},"student.get(",[35,164865,164852],{"class":306},[35,164867,14048],{"class":359},[35,164869,164870],{"class":41},"# key不存在返回None\n",[21,164872,164873],{},"设置默认值：",[25,164875,164877],{"className":30704,"code":164876,"language":30706,"meta":30,"style":30},"print(student.get(\"address\", \"未知\"))\n",[32,164878,164879],{"__ignoreMap":30},[35,164880,164881,164883,164885,164887,164889,164892],{"class":37,"line":38},[35,164882,30741],{"class":58},[35,164884,164834],{"class":359},[35,164886,164852],{"class":306},[35,164888,12769],{"class":359},[35,164890,164891],{"class":306},"\"未知\"",[35,164893,30823],{"class":359},[21,164895,164896],{},"新增和修改：",[25,164898,164900],{"className":30704,"code":164899,"language":30706,"meta":30,"style":30},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[32,164901,164902,164915],{"__ignoreMap":30},[35,164903,164904,164906,164908,164910,164912],{"class":37,"line":38},[35,164905,153110],{"class":359},[35,164907,69450],{"class":306},[35,164909,4777],{"class":359},[35,164911,544],{"class":495},[35,164913,164914],{"class":58}," 19\n",[35,164916,164917,164919,164921,164923,164925],{"class":37,"line":45},[35,164918,153110],{"class":359},[35,164920,164852],{"class":306},[35,164922,4777],{"class":359},[35,164924,544],{"class":495},[35,164926,164927],{"class":306}," \"北京\"\n",[21,164929,164930],{},"删除：",[25,164932,164934],{"className":30704,"code":164933,"language":30706,"meta":30,"style":30},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[32,164935,164936,164949,164959],{"__ignoreMap":30},[35,164937,164938,164940,164942,164945,164947],{"class":37,"line":38},[35,164939,155609],{"class":359},[35,164941,544],{"class":495},[35,164943,164944],{"class":359}," student.pop(",[35,164946,151723],{"class":306},[35,164948,505],{"class":359},[35,164950,164951,164953,164955,164957],{"class":37,"line":45},[35,164952,163634],{"class":495},[35,164954,152400],{"class":359},[35,164956,69450],{"class":306},[35,164958,33572],{"class":359},[35,164960,164961],{"class":37,"line":55},[35,164962,164963],{"class":359},"student.clear()\n",[438,164965,164967],{"id":164966},"_611-字典遍历","6.11 字典遍历",[21,164969,164970],{},"遍历 key：",[25,164972,164974],{"className":30704,"code":164973,"language":30706,"meta":30,"style":30},"for key in student:\n    print(key, student[key])\n",[32,164975,164976,164988],{"__ignoreMap":30},[35,164977,164978,164980,164983,164985],{"class":37,"line":38},[35,164979,3359],{"class":495},[35,164981,164982],{"class":359}," key ",[35,164984,26374],{"class":495},[35,164986,164987],{"class":359}," student:\n",[35,164989,164990,164992],{"class":37,"line":45},[35,164991,31625],{"class":58},[35,164993,164994],{"class":359},"(key, student[key])\n",[21,164996,164997],{},"遍历 value：",[25,164999,165001],{"className":30704,"code":165000,"language":30706,"meta":30,"style":30},"for value in student.values():\n    print(value)\n",[32,165002,165003,165015],{"__ignoreMap":30},[35,165004,165005,165007,165010,165012],{"class":37,"line":38},[35,165006,3359],{"class":495},[35,165008,165009],{"class":359}," value ",[35,165011,26374],{"class":495},[35,165013,165014],{"class":359}," student.values():\n",[35,165016,165017,165019],{"class":37,"line":45},[35,165018,31625],{"class":58},[35,165020,165021],{"class":359},"(value)\n",[21,165023,165024],{},"遍历 key 和 value：",[25,165026,165028],{"className":30704,"code":165027,"language":30706,"meta":30,"style":30},"for key, value in student.items():\n    print(key, value)\n",[32,165029,165030,165042],{"__ignoreMap":30},[35,165031,165032,165034,165037,165039],{"class":37,"line":38},[35,165033,3359],{"class":495},[35,165035,165036],{"class":359}," key, value ",[35,165038,26374],{"class":495},[35,165040,165041],{"class":359}," student.items():\n",[35,165043,165044,165046],{"class":37,"line":45},[35,165045,31625],{"class":58},[35,165047,165048],{"class":359},"(key, value)\n",[438,165050,165052],{"id":165051},"_612-嵌套容器","6.12 嵌套容器",[21,165054,165055],{},"列表中保存字典，是项目中最常见的结构之一。",[25,165057,165059],{"className":30704,"code":165058,"language":30706,"meta":30,"style":30},"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",[32,165060,165061,165069,165097,165125,165153,165157,165161,165171],{"__ignoreMap":30},[35,165062,165063,165065,165067],{"class":37,"line":38},[35,165064,159967],{"class":359},[35,165066,544],{"class":495},[35,165068,55773],{"class":359},[35,165070,165071,165073,165075,165077,165079,165081,165083,165085,165087,165089,165091,165093,165095],{"class":37,"line":45},[35,165072,148636],{"class":359},[35,165074,63005],{"class":306},[35,165076,51763],{"class":359},[35,165078,150139],{"class":306},[35,165080,12769],{"class":359},[35,165082,69450],{"class":306},[35,165084,51763],{"class":359},[35,165086,1144],{"class":58},[35,165088,12769],{"class":359},[35,165090,151723],{"class":306},[35,165092,51763],{"class":359},[35,165094,1483],{"class":58},[35,165096,5264],{"class":359},[35,165098,165099,165101,165103,165105,165107,165109,165111,165113,165115,165117,165119,165121,165123],{"class":37,"line":55},[35,165100,148636],{"class":359},[35,165102,63005],{"class":306},[35,165104,51763],{"class":359},[35,165106,151187],{"class":306},[35,165108,12769],{"class":359},[35,165110,69450],{"class":306},[35,165112,51763],{"class":359},[35,165114,1119],{"class":58},[35,165116,12769],{"class":359},[35,165118,151723],{"class":306},[35,165120,51763],{"class":359},[35,165122,1305],{"class":58},[35,165124,5264],{"class":359},[35,165126,165127,165129,165131,165133,165135,165137,165139,165141,165143,165145,165147,165149,165151],{"class":37,"line":65},[35,165128,148636],{"class":359},[35,165130,63005],{"class":306},[35,165132,51763],{"class":359},[35,165134,159982],{"class":306},[35,165136,12769],{"class":359},[35,165138,69450],{"class":306},[35,165140,51763],{"class":359},[35,165142,1169],{"class":58},[35,165144,12769],{"class":359},[35,165146,151723],{"class":306},[35,165148,51763],{"class":359},[35,165150,900],{"class":58},[35,165152,5264],{"class":359},[35,165154,165155],{"class":37,"line":74},[35,165156,33572],{"class":359},[35,165158,165159],{"class":37,"line":83},[35,165160,141],{"emptyLinePlaceholder":140},[35,165162,165163,165165,165167,165169],{"class":37,"line":92},[35,165164,3359],{"class":495},[35,165166,152388],{"class":359},[35,165168,26374],{"class":495},[35,165170,152393],{"class":359},[35,165172,165173,165175,165177,165179,165182,165184],{"class":37,"line":101},[35,165174,31625],{"class":58},[35,165176,164823],{"class":359},[35,165178,63005],{"class":306},[35,165180,165181],{"class":359},"], student[",[35,165183,151723],{"class":306},[35,165185,4991],{"class":359},[21,165187,165188],{},"统计平均分：",[25,165190,165192],{"className":30704,"code":165191,"language":30706,"meta":30,"style":30},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[32,165193,165194,165202,165206,165216,165228,165232,165247],{"__ignoreMap":30},[35,165195,165196,165198,165200],{"class":37,"line":38},[35,165197,157511],{"class":359},[35,165199,544],{"class":495},[35,165201,47659],{"class":58},[35,165203,165204],{"class":37,"line":45},[35,165205,141],{"emptyLinePlaceholder":140},[35,165207,165208,165210,165212,165214],{"class":37,"line":55},[35,165209,3359],{"class":495},[35,165211,152388],{"class":359},[35,165213,26374],{"class":495},[35,165215,152393],{"class":359},[35,165217,165218,165220,165222,165224,165226],{"class":37,"line":65},[35,165219,159558],{"class":359},[35,165221,9811],{"class":495},[35,165223,152400],{"class":359},[35,165225,151723],{"class":306},[35,165227,33572],{"class":359},[35,165229,165230],{"class":37,"line":74},[35,165231,141],{"emptyLinePlaceholder":140},[35,165233,165234,165236,165238,165240,165242,165244],{"class":37,"line":83},[35,165235,164025],{"class":359},[35,165237,544],{"class":495},[35,165239,164030],{"class":359},[35,165241,1078],{"class":495},[35,165243,7665],{"class":58},[35,165245,165246],{"class":359},"(students)\n",[35,165248,165249,165251,165253,165255,165257,165259,165261,165263,165265,165267],{"class":37,"line":92},[35,165250,30741],{"class":58},[35,165252,499],{"class":359},[35,165254,550],{"class":495},[35,165256,164048],{"class":306},[35,165258,1390],{"class":58},[35,165260,164053],{"class":359},[35,165262,157410],{"class":495},[35,165264,1440],{"class":58},[35,165266,747],{"class":306},[35,165268,505],{"class":359},[21,165270,165271],{},"查找学生：",[25,165273,165275],{"className":30704,"code":165274,"language":30706,"meta":30,"style":30},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[32,165276,165277,165292,165296,165306,165320,165326,165330,165336],{"__ignoreMap":30},[35,165278,165279,165281,165283,165285,165287,165290],{"class":37,"line":38},[35,165280,111900],{"class":359},[35,165282,544],{"class":495},[35,165284,60931],{"class":58},[35,165286,499],{"class":359},[35,165288,165289],{"class":306},"\"请输入学生姓名:\"",[35,165291,505],{"class":359},[35,165293,165294],{"class":37,"line":45},[35,165295,141],{"emptyLinePlaceholder":140},[35,165297,165298,165300,165302,165304],{"class":37,"line":55},[35,165299,3359],{"class":495},[35,165301,152388],{"class":359},[35,165303,26374],{"class":495},[35,165305,152393],{"class":359},[35,165307,165308,165310,165312,165314,165316,165318],{"class":37,"line":65},[35,165309,3435],{"class":495},[35,165311,152400],{"class":359},[35,165313,63005],{"class":306},[35,165315,4777],{"class":359},[35,165317,3283],{"class":495},[35,165319,160683],{"class":359},[35,165321,165322,165324],{"class":37,"line":74},[35,165323,32777],{"class":58},[35,165325,150293],{"class":359},[35,165327,165328],{"class":37,"line":83},[35,165329,31953],{"class":495},[35,165331,165332,165334],{"class":37,"line":92},[35,165333,2051],{"class":495},[35,165335,4073],{"class":359},[35,165337,165338,165340,165342,165345],{"class":37,"line":101},[35,165339,31625],{"class":58},[35,165341,499],{"class":359},[35,165343,165344],{"class":306},"\"没有找到\"",[35,165346,505],{"class":359},[438,165348,165350],{"id":165349},"_613-容器通用操作","6.13 容器通用操作",[21,165352,165353],{},"长度：",[25,165355,165357],{"className":30704,"code":165356,"language":30706,"meta":30,"style":30},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[32,165358,165359,165378,165388],{"__ignoreMap":30},[35,165360,165361,165363,165366,165368,165370,165372,165374,165376],{"class":37,"line":38},[35,165362,7692],{"class":58},[35,165364,165365],{"class":359},"([",[35,165367,713],{"class":58},[35,165369,12769],{"class":359},[35,165371,574],{"class":58},[35,165373,12769],{"class":359},[35,165375,568],{"class":58},[35,165377,4991],{"class":359},[35,165379,165380,165382,165384,165386],{"class":37,"line":45},[35,165381,7692],{"class":58},[35,165383,499],{"class":359},[35,165385,156131],{"class":306},[35,165387,505],{"class":359},[35,165389,165390,165392,165395,165397,165399,165401],{"class":37,"line":55},[35,165391,7692],{"class":58},[35,165393,165394],{"class":359},"({",[35,165396,63005],{"class":306},[35,165398,51763],{"class":359},[35,165400,150139],{"class":306},[35,165402,165403],{"class":359},"})\n",[21,165405,165406],{},"最大最小：",[25,165408,165410],{"className":30704,"code":165409,"language":30706,"meta":30,"style":30},"max([1, 2, 3])\nmin([1, 2, 3])\n",[32,165411,165412,165430],{"__ignoreMap":30},[35,165413,165414,165416,165418,165420,165422,165424,165426,165428],{"class":37,"line":38},[35,165415,6349],{"class":58},[35,165417,165365],{"class":359},[35,165419,713],{"class":58},[35,165421,12769],{"class":359},[35,165423,574],{"class":58},[35,165425,12769],{"class":359},[35,165427,568],{"class":58},[35,165429,4991],{"class":359},[35,165431,165432,165435,165437,165439,165441,165443,165445,165447],{"class":37,"line":45},[35,165433,165434],{"class":58},"min",[35,165436,165365],{"class":359},[35,165438,713],{"class":58},[35,165440,12769],{"class":359},[35,165442,574],{"class":58},[35,165444,12769],{"class":359},[35,165446,568],{"class":58},[35,165448,4991],{"class":359},[21,165450,165451],{},"求和：",[25,165453,165455],{"className":30704,"code":165454,"language":30706,"meta":30,"style":30},"sum([1, 2, 3])\n",[32,165456,165457],{"__ignoreMap":30},[35,165458,165459,165462,165464,165466,165468,165470,165472,165474],{"class":37,"line":38},[35,165460,165461],{"class":58},"sum",[35,165463,165365],{"class":359},[35,165465,713],{"class":58},[35,165467,12769],{"class":359},[35,165469,574],{"class":58},[35,165471,12769],{"class":359},[35,165473,568],{"class":58},[35,165475,4991],{"class":359},[21,165477,163722],{},[25,165479,165481],{"className":30704,"code":165480,"language":30706,"meta":30,"style":30},"sorted([3, 1, 2])\n",[32,165482,165483],{"__ignoreMap":30},[35,165484,165485,165488,165490,165492,165494,165496,165498,165500],{"class":37,"line":38},[35,165486,165487],{"class":58},"sorted",[35,165489,165365],{"class":359},[35,165491,568],{"class":58},[35,165493,12769],{"class":359},[35,165495,713],{"class":58},[35,165497,12769],{"class":359},[35,165499,574],{"class":58},[35,165501,4991],{"class":359},[21,165503,165504],{},"类型转换：",[25,165506,165508],{"className":30704,"code":165507,"language":30706,"meta":30,"style":30},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[32,165509,165510,165520,165538],{"__ignoreMap":30},[35,165511,165512,165514,165516,165518],{"class":37,"line":38},[35,165513,154321],{"class":58},[35,165515,499],{"class":359},[35,165517,156131],{"class":306},[35,165519,505],{"class":359},[35,165521,165522,165524,165526,165528,165530,165532,165534,165536],{"class":37,"line":45},[35,165523,155516],{"class":58},[35,165525,165365],{"class":359},[35,165527,713],{"class":58},[35,165529,12769],{"class":359},[35,165531,574],{"class":58},[35,165533,12769],{"class":359},[35,165535,568],{"class":58},[35,165537,4991],{"class":359},[35,165539,165540,165542,165544,165546,165548,165550,165552,165554,165556,165558],{"class":37,"line":55},[35,165541,155541],{"class":58},[35,165543,165365],{"class":359},[35,165545,713],{"class":58},[35,165547,12769],{"class":359},[35,165549,713],{"class":58},[35,165551,12769],{"class":359},[35,165553,574],{"class":58},[35,165555,12769],{"class":359},[35,165557,568],{"class":58},[35,165559,4991],{"class":359},[21,165561,165562],{},"成员判断：",[25,165564,165566],{"className":30704,"code":165565,"language":30706,"meta":30,"style":30},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[32,165567,165568,165585,165609],{"__ignoreMap":30},[35,165569,165570,165572,165574,165577,165580,165583],{"class":37,"line":38},[35,165571,30741],{"class":58},[35,165573,499],{"class":359},[35,165575,165576],{"class":306},"\"a\"",[35,165578,165579],{"class":495}," in",[35,165581,165582],{"class":306}," \"abc\"",[35,165584,505],{"class":359},[35,165586,165587,165589,165591,165593,165595,165597,165599,165601,165603,165605,165607],{"class":37,"line":45},[35,165588,30741],{"class":58},[35,165590,499],{"class":359},[35,165592,713],{"class":58},[35,165594,165579],{"class":495},[35,165596,52552],{"class":359},[35,165598,713],{"class":58},[35,165600,12769],{"class":359},[35,165602,574],{"class":58},[35,165604,12769],{"class":359},[35,165606,568],{"class":58},[35,165608,4991],{"class":359},[35,165610,165611,165613,165615,165617,165619,165621,165623,165625,165627],{"class":37,"line":55},[35,165612,30741],{"class":58},[35,165614,499],{"class":359},[35,165616,63005],{"class":306},[35,165618,165579],{"class":495},[35,165620,4782],{"class":359},[35,165622,63005],{"class":306},[35,165624,51763],{"class":359},[35,165626,150139],{"class":306},[35,165628,165403],{"class":359},[438,165630,165632],{"id":165631},"_614-推导式","6.14 推导式",[21,165634,165635],{},"推导式用于快速生成容器。",[21,165637,165638],{},"列表推导式：",[25,165640,165642],{"className":30704,"code":165641,"language":30706,"meta":30,"style":30},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[32,165643,165644,165671],{"__ignoreMap":30},[35,165645,165646,165648,165650,165653,165655,165657,165659,165661,165663,165665,165667,165669],{"class":37,"line":38},[35,165647,164351],{"class":359},[35,165649,544],{"class":495},[35,165651,165652],{"class":359}," [i ",[35,165654,3359],{"class":495},[35,165656,9772],{"class":359},[35,165658,26374],{"class":495},[35,165660,32769],{"class":58},[35,165662,499],{"class":359},[35,165664,713],{"class":58},[35,165666,12769],{"class":359},[35,165668,408],{"class":58},[35,165670,97625],{"class":359},[35,165672,165673,165675],{"class":37,"line":45},[35,165674,30741],{"class":58},[35,165676,164567],{"class":359},[21,165678,165679],{},"带条件：",[25,165681,165683],{"className":30704,"code":165682,"language":30706,"meta":30,"style":30},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[32,165684,165685,165726],{"__ignoreMap":30},[35,165686,165687,165690,165692,165694,165696,165698,165700,165702,165704,165706,165708,165710,165712,165714,165716,165718,165720,165722,165724],{"class":37,"line":38},[35,165688,165689],{"class":359},"even_nums ",[35,165691,544],{"class":495},[35,165693,165652],{"class":359},[35,165695,3359],{"class":495},[35,165697,9772],{"class":359},[35,165699,26374],{"class":495},[35,165701,32769],{"class":58},[35,165703,499],{"class":359},[35,165705,713],{"class":58},[35,165707,12769],{"class":359},[35,165709,832],{"class":58},[35,165711,14048],{"class":359},[35,165713,1892],{"class":495},[35,165715,9772],{"class":359},[35,165717,823],{"class":495},[35,165719,15089],{"class":58},[35,165721,101881],{"class":495},[35,165723,4427],{"class":58},[35,165725,33572],{"class":359},[35,165727,165728,165730],{"class":37,"line":45},[35,165729,30741],{"class":58},[35,165731,165732],{"class":359},"(even_nums)\n",[21,165734,165735],{},"字典推导式：",[25,165737,165739],{"className":30704,"code":165738,"language":30706,"meta":30,"style":30},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[32,165740,165741,165775],{"__ignoreMap":30},[35,165742,165743,165746,165748,165751,165753,165755,165758,165760,165762,165764,165766,165768,165770,165772],{"class":37,"line":38},[35,165744,165745],{"class":359},"squares ",[35,165747,544],{"class":495},[35,165749,165750],{"class":359}," {i: i ",[35,165752,10995],{"class":495},[35,165754,15089],{"class":58},[35,165756,165757],{"class":495}," for",[35,165759,9772],{"class":359},[35,165761,26374],{"class":495},[35,165763,32769],{"class":58},[35,165765,499],{"class":359},[35,165767,713],{"class":58},[35,165769,12769],{"class":359},[35,165771,408],{"class":58},[35,165773,165774],{"class":359},")}\n",[35,165776,165777,165779],{"class":37,"line":45},[35,165778,30741],{"class":58},[35,165780,165781],{"class":359},"(squares)\n",[21,165783,165784],{},"集合推导式：",[25,165786,165788],{"className":30704,"code":165787,"language":30706,"meta":30,"style":30},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[32,165789,165790,165811],{"__ignoreMap":30},[35,165791,165792,165795,165797,165800,165802,165804,165806,165809],{"class":37,"line":38},[35,165793,165794],{"class":359},"chars ",[35,165796,544],{"class":495},[35,165798,165799],{"class":359}," {ch ",[35,165801,3359],{"class":495},[35,165803,159943],{"class":359},[35,165805,26374],{"class":495},[35,165807,165808],{"class":306}," \"hello\"",[35,165810,1926],{"class":359},[35,165812,165813,165815],{"class":37,"line":45},[35,165814,30741],{"class":58},[35,165816,165817],{"class":359},"(chars)\n",[21,165819,165820],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[438,165822,165824],{"id":165823},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[25,165826,165828],{"className":30704,"code":165827,"language":30706,"meta":30,"style":30},"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",[32,165829,165830,165838,165858,165878,165898,165918,165922,165926,165934,165948,165957,165961,165971,165983,165987,166007,166016,166020,166036,166041,166045,166059,166063,166085,166121],{"__ignoreMap":30},[35,165831,165832,165834,165836],{"class":37,"line":38},[35,165833,159967],{"class":359},[35,165835,544],{"class":495},[35,165837,55773],{"class":359},[35,165839,165840,165842,165844,165846,165848,165850,165852,165854,165856],{"class":37,"line":45},[35,165841,148636],{"class":359},[35,165843,63005],{"class":306},[35,165845,51763],{"class":359},[35,165847,150139],{"class":306},[35,165849,12769],{"class":359},[35,165851,151723],{"class":306},[35,165853,51763],{"class":359},[35,165855,1483],{"class":58},[35,165857,5264],{"class":359},[35,165859,165860,165862,165864,165866,165868,165870,165872,165874,165876],{"class":37,"line":55},[35,165861,148636],{"class":359},[35,165863,63005],{"class":306},[35,165865,51763],{"class":359},[35,165867,151187],{"class":306},[35,165869,12769],{"class":359},[35,165871,151723],{"class":306},[35,165873,51763],{"class":359},[35,165875,1305],{"class":58},[35,165877,5264],{"class":359},[35,165879,165880,165882,165884,165886,165888,165890,165892,165894,165896],{"class":37,"line":65},[35,165881,148636],{"class":359},[35,165883,63005],{"class":306},[35,165885,51763],{"class":359},[35,165887,159982],{"class":306},[35,165889,12769],{"class":359},[35,165891,151723],{"class":306},[35,165893,51763],{"class":359},[35,165895,900],{"class":58},[35,165897,5264],{"class":359},[35,165899,165900,165902,165904,165906,165908,165910,165912,165914,165916],{"class":37,"line":74},[35,165901,148636],{"class":359},[35,165903,63005],{"class":306},[35,165905,51763],{"class":359},[35,165907,163561],{"class":306},[35,165909,12769],{"class":359},[35,165911,151723],{"class":306},[35,165913,51763],{"class":359},[35,165915,1376],{"class":58},[35,165917,5264],{"class":359},[35,165919,165920],{"class":37,"line":83},[35,165921,33572],{"class":359},[35,165923,165924],{"class":37,"line":92},[35,165925,141],{"emptyLinePlaceholder":140},[35,165927,165928,165930,165932],{"class":37,"line":101},[35,165929,157511],{"class":359},[35,165931,544],{"class":495},[35,165933,47659],{"class":58},[35,165935,165936,165939,165941,165944,165946],{"class":37,"line":110},[35,165937,165938],{"class":359},"max_student ",[35,165940,544],{"class":495},[35,165942,165943],{"class":359}," students[",[35,165945,687],{"class":58},[35,165947,33572],{"class":359},[35,165949,165950,165953,165955],{"class":37,"line":119},[35,165951,165952],{"class":359},"passed ",[35,165954,544],{"class":495},[35,165956,52164],{"class":359},[35,165958,165959],{"class":37,"line":128},[35,165960,141],{"emptyLinePlaceholder":140},[35,165962,165963,165965,165967,165969],{"class":37,"line":137},[35,165964,3359],{"class":495},[35,165966,152388],{"class":359},[35,165968,26374],{"class":495},[35,165970,152393],{"class":359},[35,165972,165973,165975,165977,165979,165981],{"class":37,"line":144},[35,165974,159558],{"class":359},[35,165976,9811],{"class":495},[35,165978,152400],{"class":359},[35,165980,151723],{"class":306},[35,165982,33572],{"class":359},[35,165984,165985],{"class":37,"line":150},[35,165986,141],{"emptyLinePlaceholder":140},[35,165988,165989,165991,165993,165995,165997,165999,166002,166004],{"class":37,"line":159},[35,165990,3435],{"class":495},[35,165992,152400],{"class":359},[35,165994,151723],{"class":306},[35,165996,4777],{"class":359},[35,165998,1454],{"class":495},[35,166000,166001],{"class":359}," max_student[",[35,166003,151723],{"class":306},[35,166005,166006],{"class":359},"]:\n",[35,166008,166009,166012,166014],{"class":37,"line":168},[35,166010,166011],{"class":359},"        max_student ",[35,166013,544],{"class":495},[35,166015,152416],{"class":359},[35,166017,166018],{"class":37,"line":177},[35,166019,141],{"emptyLinePlaceholder":140},[35,166021,166022,166024,166026,166028,166030,166032,166034],{"class":37,"line":182},[35,166023,3435],{"class":495},[35,166025,152400],{"class":359},[35,166027,151723],{"class":306},[35,166029,4777],{"class":359},[35,166031,2060],{"class":495},[35,166033,158088],{"class":58},[35,166035,4073],{"class":359},[35,166037,166038],{"class":37,"line":188},[35,166039,166040],{"class":359},"        passed.append(student)\n",[35,166042,166043],{"class":37,"line":197},[35,166044,141],{"emptyLinePlaceholder":140},[35,166046,166047,166049,166051,166053,166055,166057],{"class":37,"line":206},[35,166048,164025],{"class":359},[35,166050,544],{"class":495},[35,166052,164030],{"class":359},[35,166054,1078],{"class":495},[35,166056,7665],{"class":58},[35,166058,165246],{"class":359},[35,166060,166061],{"class":37,"line":215},[35,166062,141],{"emptyLinePlaceholder":140},[35,166064,166065,166067,166069,166071,166073,166075,166077,166079,166081,166083],{"class":37,"line":224},[35,166066,30741],{"class":58},[35,166068,499],{"class":359},[35,166070,550],{"class":495},[35,166072,164048],{"class":306},[35,166074,1390],{"class":58},[35,166076,164053],{"class":359},[35,166078,157410],{"class":495},[35,166080,1440],{"class":58},[35,166082,747],{"class":306},[35,166084,505],{"class":359},[35,166086,166087,166089,166091,166093,166096,166098,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119],{"class":37,"line":233},[35,166088,30741],{"class":58},[35,166090,499],{"class":359},[35,166092,550],{"class":495},[35,166094,166095],{"class":306},"\"最高分学生:",[35,166097,1390],{"class":58},[35,166099,166100],{"class":359},"max_student[",[35,166102,153133],{"class":306},[35,166104,1434],{"class":359},[35,166106,1440],{"class":58},[35,166108,4782],{"class":58},[35,166110,166100],{"class":359},[35,166112,153171],{"class":306},[35,166114,1434],{"class":359},[35,166116,1440],{"class":58},[35,166118,747],{"class":306},[35,166120,505],{"class":359},[35,166122,166123,166125,166127,166129,166132,166135,166138,166140,166142],{"class":37,"line":238},[35,166124,30741],{"class":58},[35,166126,499],{"class":359},[35,166128,550],{"class":495},[35,166130,166131],{"class":306},"\"及格人数:",[35,166133,166134],{"class":58},"{len",[35,166136,166137],{"class":359},"(passed)",[35,166139,1440],{"class":58},[35,166141,747],{"class":306},[35,166143,505],{"class":359},[438,166145,166147],{"id":166146},"_616-易错点","6.16 易错点",[14,166149,166150,166153,166156,166159,166165,166174],{},[17,166151,166152],{},"列表可变，元组和字符串不可变。",[17,166154,166155],{},"切片结束位置不包含。",[17,166157,166158],{},"字典通过 key 取值，不是通过索引。",[17,166160,166161,166162,28711],{},"空集合要用 ",[32,166163,166164],{},"set()",[17,166166,104688,166167,166170,166171,28711],{},[32,166168,166169],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[32,166172,166173],{},"get()",[17,166175,166176],{},"嵌套容器要先看清楚每一层是什么类型。",[438,166178,166180],{"id":166179},"_617-本章练习","6.17 本章练习",[14,166182,166183,166186,166189,166192,166195],{},[17,166184,166185],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[17,166187,166188],{},"输入一句话，统计每个字符出现次数。",[17,166190,166191],{},"使用集合去除列表中的重复元素。",[17,166193,166194],{},"使用字典保存一个学生的信息，并实现修改成绩。",[17,166196,166197],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[416,166199,166200],{},"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":30,"searchDepth":45,"depth":45,"links":166202},[166203,166204,166205,166206,166207,166208,166209,166210,166211,166212,166213,166214,166215,166216,166217,166218,166219],{"id":163183,"depth":45,"text":163184},{"id":163300,"depth":45,"text":163301},{"id":163390,"depth":45,"text":163391},{"id":163514,"depth":45,"text":163515},{"id":163877,"depth":45,"text":163878},{"id":164064,"depth":45,"text":164065},{"id":164183,"depth":45,"text":164184},{"id":164325,"depth":45,"text":164326},{"id":164512,"depth":45,"text":164513},{"id":164756,"depth":45,"text":164757},{"id":164966,"depth":45,"text":164967},{"id":165051,"depth":45,"text":165052},{"id":165349,"depth":45,"text":165350},{"id":165631,"depth":45,"text":165632},{"id":165823,"depth":45,"text":165824},{"id":166146,"depth":45,"text":166147},{"id":166179,"depth":45,"text":166180},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163175,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166226,"title":166227,"body":166228,"description":421,"extension":422,"meta":168400,"navigation":140,"path":168401,"seo":168402,"stem":168403,"__hash__":168404},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166229,"toc":168375},[166230,166233,166237,166240,166320,166323,166344,166347,166351,166354,166416,166419,166436,166440,166443,166488,166490,166498,166502,166505,166587,166590,166593,166618,166621,166644,166648,166651,166653,166715,166718,166720,166771,166775,166779,166785,166890,166894,166900,166971,166975,166978,167046,167049,167129,167133,167139,167175,167178,167181,167291,167297,167301,167304,167376,167379,167383,167387,167392,167454,167458,167463,167531,167535,167540,167656,167660,167663,167743,167746,167750,167753,167857,167859,167874,167877,167881,168019,168027,168031,168033,168044,168046,168304,168308,168340,168344,168372],[10,166231,166227],{"id":166232},"_7-函数进阶",[438,166234,166236],{"id":166235},"_71-多返回值","7.1 多返回值",[21,166238,166239],{},"Python 函数可以返回多个值，本质上返回的是元组。",[25,166241,166243],{"className":30704,"code":166242,"language":30706,"meta":30,"style":30},"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",[32,166244,166245,166254,166262,166270,166279,166286,166290,166294,166303,166309],{"__ignoreMap":30},[35,166246,166247,166249,166252],{"class":37,"line":38},[35,166248,32273],{"class":495},[35,166250,166251],{"class":48}," get_info",[35,166253,32279],{"class":359},[35,166255,166256,166258,166260],{"class":37,"line":45},[35,166257,152621],{"class":359},[35,166259,544],{"class":495},[35,166261,149604],{"class":306},[35,166263,166264,166266,166268],{"class":37,"line":55},[35,166265,152637],{"class":359},[35,166267,544],{"class":495},[35,166269,146802],{"class":58},[35,166271,166272,166274,166276],{"class":37,"line":65},[35,166273,152652],{"class":359},[35,166275,544],{"class":495},[35,166277,166278],{"class":58}," 95\n",[35,166280,166281,166283],{"class":37,"line":74},[35,166282,4424],{"class":495},[35,166284,166285],{"class":359}," name, age, score\n",[35,166287,166288],{"class":37,"line":83},[35,166289,141],{"emptyLinePlaceholder":140},[35,166291,166292],{"class":37,"line":92},[35,166293,141],{"emptyLinePlaceholder":140},[35,166295,166296,166298,166300],{"class":37,"line":101},[35,166297,161557],{"class":359},[35,166299,544],{"class":495},[35,166301,166302],{"class":359}," get_info()\n",[35,166304,166305,166307],{"class":37,"line":110},[35,166306,30741],{"class":58},[35,166308,76910],{"class":359},[35,166310,166311,166313,166315,166317],{"class":37,"line":119},[35,166312,30741],{"class":58},[35,166314,499],{"class":359},[35,166316,103429],{"class":58},[35,166318,166319],{"class":359},"(result))\n",[21,166321,166322],{},"可以直接解包：",[25,166324,166326],{"className":30704,"code":166325,"language":30706,"meta":30,"style":30},"name, age, score = get_info()\nprint(name, age, score)\n",[32,166327,166328,166337],{"__ignoreMap":30},[35,166329,166330,166333,166335],{"class":37,"line":38},[35,166331,166332],{"class":359},"name, age, score ",[35,166334,544],{"class":495},[35,166336,166302],{"class":359},[35,166338,166339,166341],{"class":37,"line":45},[35,166340,30741],{"class":58},[35,166342,166343],{"class":359},"(name, age, score)\n",[21,166345,166346],{},"返回多个值适合函数需要同时给出多个结果时使用。",[438,166348,166350],{"id":166349},"_72-位置参数","7.2 位置参数",[21,166352,166353],{},"位置参数按顺序传递。",[25,166355,166357],{"className":30704,"code":166356,"language":30706,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[32,166358,166359,166367,166395,166399,166403],{"__ignoreMap":30},[35,166360,166361,166363,166365],{"class":37,"line":38},[35,166362,32273],{"class":495},[35,166364,149623],{"class":48},[35,166366,149626],{"class":359},[35,166368,166369,166371,166373,166375,166377,166379,166381,166383,166385,166387,166389,166391,166393],{"class":37,"line":45},[35,166370,31625],{"class":58},[35,166372,499],{"class":359},[35,166374,550],{"class":495},[35,166376,149637],{"class":306},[35,166378,1390],{"class":58},[35,166380,80135],{"class":359},[35,166382,1440],{"class":58},[35,166384,149646],{"class":306},[35,166386,1390],{"class":58},[35,166388,70546],{"class":359},[35,166390,1440],{"class":58},[35,166392,149655],{"class":306},[35,166394,505],{"class":359},[35,166396,166397],{"class":37,"line":55},[35,166398,141],{"emptyLinePlaceholder":140},[35,166400,166401],{"class":37,"line":65},[35,166402,141],{"emptyLinePlaceholder":140},[35,166404,166405,166408,166410,166412,166414],{"class":37,"line":74},[35,166406,166407],{"class":359},"introduce(",[35,166409,150139],{"class":306},[35,166411,12769],{"class":359},[35,166413,1144],{"class":58},[35,166415,505],{"class":359},[21,166417,166418],{},"顺序错了就会得到错误含义：",[25,166420,166422],{"className":30704,"code":166421,"language":30706,"meta":30,"style":30},"introduce(18, \"小明\")\n",[32,166423,166424],{"__ignoreMap":30},[35,166425,166426,166428,166430,166432,166434],{"class":37,"line":38},[35,166427,166407],{"class":359},[35,166429,1144],{"class":58},[35,166431,12769],{"class":359},[35,166433,150139],{"class":306},[35,166435,505],{"class":359},[438,166437,166439],{"id":166438},"_73-关键字参数","7.3 关键字参数",[21,166441,166442],{},"关键字参数按参数名传递。",[25,166444,166446],{"className":30704,"code":166445,"language":30706,"meta":30,"style":30},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[32,166447,166448,166468],{"__ignoreMap":30},[35,166449,166450,166452,166454,166456,166458,166460,166462,166464,166466],{"class":37,"line":38},[35,166451,166407],{"class":359},[35,166453,80135],{"class":5550},[35,166455,544],{"class":495},[35,166457,150139],{"class":306},[35,166459,12769],{"class":359},[35,166461,70546],{"class":5550},[35,166463,544],{"class":495},[35,166465,1144],{"class":58},[35,166467,505],{"class":359},[35,166469,166470,166472,166474,166476,166478,166480,166482,166484,166486],{"class":37,"line":45},[35,166471,166407],{"class":359},[35,166473,70546],{"class":5550},[35,166475,544],{"class":495},[35,166477,1144],{"class":58},[35,166479,12769],{"class":359},[35,166481,80135],{"class":5550},[35,166483,544],{"class":495},[35,166485,150139],{"class":306},[35,166487,505],{"class":359},[21,166489,118252],{},[14,166491,166492,166495],{},[17,166493,166494],{},"顺序不容易错。",[17,166496,166497],{},"调用时可读性更强。",[438,166499,166501],{"id":166500},"_74-默认参数","7.4 默认参数",[21,166503,166504],{},"默认参数给参数设置默认值。",[25,166506,166508],{"className":30704,"code":166507,"language":30706,"meta":30,"style":30},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[32,166509,166510,166526,166556,166560,166564,166574],{"__ignoreMap":30},[35,166511,166512,166514,166516,166519,166521,166524],{"class":37,"line":38},[35,166513,32273],{"class":495},[35,166515,122344],{"class":48},[35,166517,166518],{"class":359},"(host, port",[35,166520,544],{"class":495},[35,166522,166523],{"class":58},"3306",[35,166525,31112],{"class":359},[35,166527,166528,166530,166532,166534,166537,166539,166541,166543,166545,166547,166550,166552,166554],{"class":37,"line":45},[35,166529,31625],{"class":58},[35,166531,499],{"class":359},[35,166533,550],{"class":495},[35,166535,166536],{"class":306},"\"连接",[35,166538,1390],{"class":58},[35,166540,27723],{"class":359},[35,166542,1440],{"class":58},[35,166544,1353],{"class":306},[35,166546,1390],{"class":58},[35,166548,166549],{"class":359},"port",[35,166551,1440],{"class":58},[35,166553,747],{"class":306},[35,166555,505],{"class":359},[35,166557,166558],{"class":37,"line":55},[35,166559,141],{"emptyLinePlaceholder":140},[35,166561,166562],{"class":37,"line":65},[35,166563,141],{"emptyLinePlaceholder":140},[35,166565,166566,166569,166572],{"class":37,"line":74},[35,166567,166568],{"class":359},"connect(",[35,166570,166571],{"class":306},"\"localhost\"",[35,166573,505],{"class":359},[35,166575,166576,166578,166580,166582,166585],{"class":37,"line":83},[35,166577,166568],{"class":359},[35,166579,166571],{"class":306},[35,166581,12769],{"class":359},[35,166583,166584],{"class":58},"6379",[35,166586,505],{"class":359},[21,166588,166589],{},"注意：默认参数必须放在非默认参数后面。",[21,166591,166592],{},"错误：",[25,166594,166596],{"className":30704,"code":166595,"language":30706,"meta":30,"style":30},"def connect(port=3306, host):\n    pass\n",[32,166597,166598,166614],{"__ignoreMap":30},[35,166599,166600,166602,166604,166607,166609,166611],{"class":37,"line":38},[35,166601,32273],{"class":495},[35,166603,122344],{"class":48},[35,166605,166606],{"class":359},"(port",[35,166608,544],{"class":495},[35,166610,166523],{"class":58},[35,166612,166613],{"class":359},", host):\n",[35,166615,166616],{"class":37,"line":45},[35,166617,149788],{"class":495},[21,166619,166620],{},"正确：",[25,166622,166624],{"className":30704,"code":166623,"language":30706,"meta":30,"style":30},"def connect(host, port=3306):\n    pass\n",[32,166625,166626,166640],{"__ignoreMap":30},[35,166627,166628,166630,166632,166634,166636,166638],{"class":37,"line":38},[35,166629,32273],{"class":495},[35,166631,122344],{"class":48},[35,166633,166518],{"class":359},[35,166635,544],{"class":495},[35,166637,166523],{"class":58},[35,166639,31112],{"class":359},[35,166641,166642],{"class":37,"line":45},[35,166643,149788],{"class":495},[438,166645,166647],{"id":166646},"_75-默认参数的坑","7.5 默认参数的坑",[21,166649,166650],{},"不要使用可变对象作为默认参数。",[21,166652,157874],{},[25,166654,166656],{"className":30704,"code":166655,"language":30706,"meta":30,"style":30},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[32,166657,166658,166673,166678,166685,166689,166693,166704],{"__ignoreMap":30},[35,166659,166660,166662,166665,166668,166670],{"class":37,"line":38},[35,166661,32273],{"class":495},[35,166663,166664],{"class":48}," add_item",[35,166666,166667],{"class":359},"(item, items",[35,166669,544],{"class":495},[35,166671,166672],{"class":359},"[]):\n",[35,166674,166675],{"class":37,"line":45},[35,166676,166677],{"class":359},"    items.append(item)\n",[35,166679,166680,166682],{"class":37,"line":55},[35,166681,4424],{"class":495},[35,166683,166684],{"class":359}," items\n",[35,166686,166687],{"class":37,"line":65},[35,166688,141],{"emptyLinePlaceholder":140},[35,166690,166691],{"class":37,"line":74},[35,166692,141],{"emptyLinePlaceholder":140},[35,166694,166695,166697,166700,166702],{"class":37,"line":83},[35,166696,30741],{"class":58},[35,166698,166699],{"class":359},"(add_item(",[35,166701,165576],{"class":306},[35,166703,30823],{"class":359},[35,166705,166706,166708,166710,166713],{"class":37,"line":92},[35,166707,30741],{"class":58},[35,166709,166699],{"class":359},[35,166711,166712],{"class":306},"\"b\"",[35,166714,30823],{"class":359},[21,166716,166717],{},"第二次调用会复用第一次的列表。",[21,166719,156139],{},[25,166721,166723],{"className":30704,"code":166722,"language":30706,"meta":30,"style":30},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[32,166724,166725,166739,166752,166761,166765],{"__ignoreMap":30},[35,166726,166727,166729,166731,166733,166735,166737],{"class":37,"line":38},[35,166728,32273],{"class":495},[35,166730,166664],{"class":48},[35,166732,166667],{"class":359},[35,166734,544],{"class":495},[35,166736,96011],{"class":58},[35,166738,31112],{"class":359},[35,166740,166741,166743,166746,166748,166750],{"class":37,"line":45},[35,166742,3435],{"class":495},[35,166744,166745],{"class":359}," items ",[35,166747,39253],{"class":495},[35,166749,39259],{"class":58},[35,166751,4073],{"class":359},[35,166753,166754,166757,166759],{"class":37,"line":55},[35,166755,166756],{"class":359},"        items ",[35,166758,544],{"class":495},[35,166760,52164],{"class":359},[35,166762,166763],{"class":37,"line":65},[35,166764,166677],{"class":359},[35,166766,166767,166769],{"class":37,"line":74},[35,166768,4424],{"class":495},[35,166770,166684],{"class":359},[438,166772,166774],{"id":166773},"_76-不定长参数","7.6 不定长参数",[465,166776,166778],{"id":166777},"_761-args","7.6.1 *args",[21,166780,166781,166784],{},[32,166782,166783],{},"*args"," 接收任意数量的位置参数，得到元组。",[25,166786,166788],{"className":30704,"code":166787,"language":30706,"meta":30,"style":30},"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",[32,166789,166790,166803,166811,166822,166831,166837,166841,166845,166864],{"__ignoreMap":30},[35,166791,166792,166794,166796,166798,166800],{"class":37,"line":38},[35,166793,32273],{"class":495},[35,166795,5543],{"class":48},[35,166797,499],{"class":359},[35,166799,949],{"class":495},[35,166801,166802],{"class":359},"args):\n",[35,166804,166805,166807,166809],{"class":37,"line":45},[35,166806,159558],{"class":359},[35,166808,544],{"class":495},[35,166810,47659],{"class":58},[35,166812,166813,166815,166817,166819],{"class":37,"line":55},[35,166814,3535],{"class":495},[35,166816,156431],{"class":359},[35,166818,26374],{"class":495},[35,166820,166821],{"class":359}," args:\n",[35,166823,166824,166826,166828],{"class":37,"line":65},[35,166825,160233],{"class":359},[35,166827,9811],{"class":495},[35,166829,166830],{"class":359}," num\n",[35,166832,166833,166835],{"class":37,"line":74},[35,166834,4424],{"class":495},[35,166836,162538],{"class":359},[35,166838,166839],{"class":37,"line":83},[35,166840,141],{"emptyLinePlaceholder":140},[35,166842,166843],{"class":37,"line":92},[35,166844,141],{"emptyLinePlaceholder":140},[35,166846,166847,166849,166852,166854,166856,166858,166860,166862],{"class":37,"line":101},[35,166848,30741],{"class":58},[35,166850,166851],{"class":359},"(add(",[35,166853,713],{"class":58},[35,166855,12769],{"class":359},[35,166857,574],{"class":58},[35,166859,12769],{"class":359},[35,166861,568],{"class":58},[35,166863,30823],{"class":359},[35,166865,166866,166868,166870,166872,166874,166876,166878,166880,166882,166884,166886,166888],{"class":37,"line":110},[35,166867,30741],{"class":58},[35,166869,166851],{"class":359},[35,166871,713],{"class":58},[35,166873,12769],{"class":359},[35,166875,574],{"class":58},[35,166877,12769],{"class":359},[35,166879,568],{"class":58},[35,166881,12769],{"class":359},[35,166883,789],{"class":58},[35,166885,12769],{"class":359},[35,166887,372],{"class":58},[35,166889,30823],{"class":359},[465,166891,166893],{"id":166892},"_762-kwargs","7.6.2 **kwargs",[21,166895,166896,166899],{},[32,166897,166898],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[25,166901,166903],{"className":30704,"code":166902,"language":30706,"meta":30,"style":30},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[32,166904,166905,166918,166929,166935,166939,166943],{"__ignoreMap":30},[35,166906,166907,166909,166911,166913,166915],{"class":37,"line":38},[35,166908,32273],{"class":495},[35,166910,162196],{"class":48},[35,166912,499],{"class":359},[35,166914,10995],{"class":495},[35,166916,166917],{"class":359},"kwargs):\n",[35,166919,166920,166922,166924,166926],{"class":37,"line":45},[35,166921,3535],{"class":495},[35,166923,165036],{"class":359},[35,166925,26374],{"class":495},[35,166927,166928],{"class":359}," kwargs.items():\n",[35,166930,166931,166933],{"class":37,"line":55},[35,166932,32777],{"class":58},[35,166934,165048],{"class":359},[35,166936,166937],{"class":37,"line":65},[35,166938,141],{"emptyLinePlaceholder":140},[35,166940,166941],{"class":37,"line":74},[35,166942,141],{"emptyLinePlaceholder":140},[35,166944,166945,166947,166949,166951,166953,166955,166957,166959,166961,166963,166965,166967,166969],{"class":37,"line":83},[35,166946,162261],{"class":359},[35,166948,80135],{"class":5550},[35,166950,544],{"class":495},[35,166952,150139],{"class":306},[35,166954,12769],{"class":359},[35,166956,70546],{"class":5550},[35,166958,544],{"class":495},[35,166960,1144],{"class":58},[35,166962,12769],{"class":359},[35,166964,70597],{"class":5550},[35,166966,544],{"class":495},[35,166968,69595],{"class":306},[35,166970,505],{"class":359},[438,166972,166974],{"id":166973},"_77-参数解包","7.7 参数解包",[21,166976,166977],{},"列表或元组解包为位置参数：",[25,166979,166981],{"className":30704,"code":166980,"language":30706,"meta":30,"style":30},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[32,166982,166983,166992,167007,167011,167015,167035],{"__ignoreMap":30},[35,166984,166985,166987,166989],{"class":37,"line":38},[35,166986,32273],{"class":495},[35,166988,5543],{"class":48},[35,166990,166991],{"class":359},"(a, b, c):\n",[35,166993,166994,166996,166998,167000,167002,167004],{"class":37,"line":45},[35,166995,4424],{"class":495},[35,166997,11203],{"class":359},[35,166999,975],{"class":495},[35,167001,11216],{"class":359},[35,167003,975],{"class":495},[35,167005,167006],{"class":359}," c\n",[35,167008,167009],{"class":37,"line":55},[35,167010,141],{"emptyLinePlaceholder":140},[35,167012,167013],{"class":37,"line":65},[35,167014,141],{"emptyLinePlaceholder":140},[35,167016,167017,167019,167021,167023,167025,167027,167029,167031,167033],{"class":37,"line":74},[35,167018,164351],{"class":359},[35,167020,544],{"class":495},[35,167022,52552],{"class":359},[35,167024,713],{"class":58},[35,167026,12769],{"class":359},[35,167028,574],{"class":58},[35,167030,12769],{"class":359},[35,167032,568],{"class":58},[35,167034,33572],{"class":359},[35,167036,167037,167039,167041,167043],{"class":37,"line":83},[35,167038,30741],{"class":58},[35,167040,166851],{"class":359},[35,167042,949],{"class":495},[35,167044,167045],{"class":359},"nums))\n",[21,167047,167048],{},"字典解包为关键字参数：",[25,167050,167052],{"className":30704,"code":167051,"language":30706,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[32,167053,167054,167062,167088,167092,167096,167120],{"__ignoreMap":30},[35,167055,167056,167058,167060],{"class":37,"line":38},[35,167057,32273],{"class":495},[35,167059,149623],{"class":48},[35,167061,149626],{"class":359},[35,167063,167064,167066,167068,167070,167072,167074,167076,167078,167080,167082,167084,167086],{"class":37,"line":45},[35,167065,31625],{"class":58},[35,167067,499],{"class":359},[35,167069,550],{"class":495},[35,167071,747],{"class":306},[35,167073,1390],{"class":58},[35,167075,80135],{"class":359},[35,167077,1440],{"class":58},[35,167079,4782],{"class":58},[35,167081,70546],{"class":359},[35,167083,1440],{"class":58},[35,167085,747],{"class":306},[35,167087,505],{"class":359},[35,167089,167090],{"class":37,"line":55},[35,167091,141],{"emptyLinePlaceholder":140},[35,167093,167094],{"class":37,"line":65},[35,167095,141],{"emptyLinePlaceholder":140},[35,167097,167098,167100,167102,167104,167106,167108,167110,167112,167114,167116,167118],{"class":37,"line":74},[35,167099,116636],{"class":359},[35,167101,544],{"class":495},[35,167103,4782],{"class":359},[35,167105,63005],{"class":306},[35,167107,51763],{"class":359},[35,167109,150139],{"class":306},[35,167111,12769],{"class":359},[35,167113,69450],{"class":306},[35,167115,51763],{"class":359},[35,167117,1144],{"class":58},[35,167119,1926],{"class":359},[35,167121,167122,167124,167126],{"class":37,"line":83},[35,167123,166407],{"class":359},[35,167125,10995],{"class":495},[35,167127,167128],{"class":359},"info)\n",[438,167130,167132],{"id":167131},"_78-匿名函数lambda","7.8 匿名函数lambda",[21,167134,167135,167138],{},[32,167136,167137],{},"lambda"," 用于定义简单匿名函数。",[25,167140,167142],{"className":30704,"code":167141,"language":30706,"meta":30,"style":30},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[32,167143,167144,167161],{"__ignoreMap":30},[35,167145,167146,167149,167151,167154,167157,167159],{"class":37,"line":38},[35,167147,167148],{"class":359},"add ",[35,167150,544],{"class":495},[35,167152,167153],{"class":495}," lambda",[35,167155,167156],{"class":359}," a, b: a ",[35,167158,975],{"class":495},[35,167160,151355],{"class":359},[35,167162,167163,167165,167167,167169,167171,167173],{"class":37,"line":45},[35,167164,30741],{"class":58},[35,167166,166851],{"class":359},[35,167168,713],{"class":58},[35,167170,12769],{"class":359},[35,167172,574],{"class":58},[35,167174,30823],{"class":359},[21,167176,167177],{},"常和排序、过滤等函数一起使用。",[21,167179,167180],{},"按分数排序：",[25,167182,167184],{"className":30704,"code":167183,"language":30706,"meta":30,"style":30},"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",[32,167185,167186,167194,167214,167234,167254,167258,167262,167285],{"__ignoreMap":30},[35,167187,167188,167190,167192],{"class":37,"line":38},[35,167189,159967],{"class":359},[35,167191,544],{"class":495},[35,167193,55773],{"class":359},[35,167195,167196,167198,167200,167202,167204,167206,167208,167210,167212],{"class":37,"line":45},[35,167197,148636],{"class":359},[35,167199,63005],{"class":306},[35,167201,51763],{"class":359},[35,167203,150139],{"class":306},[35,167205,12769],{"class":359},[35,167207,151723],{"class":306},[35,167209,51763],{"class":359},[35,167211,1483],{"class":58},[35,167213,5264],{"class":359},[35,167215,167216,167218,167220,167222,167224,167226,167228,167230,167232],{"class":37,"line":55},[35,167217,148636],{"class":359},[35,167219,63005],{"class":306},[35,167221,51763],{"class":359},[35,167223,151187],{"class":306},[35,167225,12769],{"class":359},[35,167227,151723],{"class":306},[35,167229,51763],{"class":359},[35,167231,1305],{"class":58},[35,167233,5264],{"class":359},[35,167235,167236,167238,167240,167242,167244,167246,167248,167250,167252],{"class":37,"line":65},[35,167237,148636],{"class":359},[35,167239,63005],{"class":306},[35,167241,51763],{"class":359},[35,167243,159982],{"class":306},[35,167245,12769],{"class":359},[35,167247,151723],{"class":306},[35,167249,51763],{"class":359},[35,167251,900],{"class":58},[35,167253,5264],{"class":359},[35,167255,167256],{"class":37,"line":74},[35,167257,33572],{"class":359},[35,167259,167260],{"class":37,"line":83},[35,167261,141],{"emptyLinePlaceholder":140},[35,167263,167264,167267,167269,167271,167273,167275,167277,167279,167281,167283],{"class":37,"line":92},[35,167265,167266],{"class":359},"students.sort(",[35,167268,154197],{"class":5550},[35,167270,154200],{"class":495},[35,167272,154203],{"class":359},[35,167274,151723],{"class":306},[35,167276,112524],{"class":359},[35,167278,163779],{"class":5550},[35,167280,544],{"class":495},[35,167282,31802],{"class":58},[35,167284,505],{"class":359},[35,167286,167287,167289],{"class":37,"line":101},[35,167288,30741],{"class":58},[35,167290,165246],{"class":359},[21,167292,167293,167294,167296],{},"如果逻辑复杂，不要硬写 ",[32,167295,167137],{},"，定义普通函数更清晰。",[438,167298,167300],{"id":167299},"_79-函数作为参数","7.9 函数作为参数",[21,167302,167303],{},"函数可以作为参数传给另一个函数。",[25,167305,167307],{"className":30704,"code":167306,"language":30706,"meta":30,"style":30},"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",[32,167308,167309,167317,167327,167331,167335,167345,167352,167356,167360],{"__ignoreMap":30},[35,167310,167311,167313,167315],{"class":37,"line":38},[35,167312,32273],{"class":495},[35,167314,5543],{"class":48},[35,167316,151344],{"class":359},[35,167318,167319,167321,167323,167325],{"class":37,"line":45},[35,167320,4424],{"class":495},[35,167322,11203],{"class":359},[35,167324,975],{"class":495},[35,167326,151355],{"class":359},[35,167328,167329],{"class":37,"line":55},[35,167330,141],{"emptyLinePlaceholder":140},[35,167332,167333],{"class":37,"line":65},[35,167334,141],{"emptyLinePlaceholder":140},[35,167336,167337,167339,167342],{"class":37,"line":74},[35,167338,32273],{"class":495},[35,167340,167341],{"class":48}," calculate",[35,167343,167344],{"class":359},"(a, b, func):\n",[35,167346,167347,167349],{"class":37,"line":83},[35,167348,4424],{"class":495},[35,167350,167351],{"class":359}," func(a, b)\n",[35,167353,167354],{"class":37,"line":92},[35,167355,141],{"emptyLinePlaceholder":140},[35,167357,167358],{"class":37,"line":101},[35,167359,141],{"emptyLinePlaceholder":140},[35,167361,167362,167364,167367,167369,167371,167373],{"class":37,"line":110},[35,167363,30741],{"class":58},[35,167365,167366],{"class":359},"(calculate(",[35,167368,940],{"class":58},[35,167370,12769],{"class":359},[35,167372,1194],{"class":58},[35,167374,167375],{"class":359},", add))\n",[21,167377,167378],{},"这种思想在排序、回调、框架中经常出现。",[438,167380,167382],{"id":167381},"_710-mapfiltersorted","7.10 map、filter、sorted",[465,167384,167386],{"id":167385},"_7101-map","7.10.1 map",[21,167388,167389,167391],{},[32,167390,74369],{}," 对每个元素执行函数。",[25,167393,167395],{"className":30704,"code":167394,"language":30706,"meta":30,"style":30},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[32,167396,167397,167421,167444],{"__ignoreMap":30},[35,167398,167399,167401,167403,167405,167407,167409,167411,167413,167415,167417,167419],{"class":37,"line":38},[35,167400,164351],{"class":359},[35,167402,544],{"class":495},[35,167404,52552],{"class":359},[35,167406,713],{"class":58},[35,167408,12769],{"class":359},[35,167410,574],{"class":58},[35,167412,12769],{"class":359},[35,167414,568],{"class":58},[35,167416,12769],{"class":359},[35,167418,789],{"class":58},[35,167420,33572],{"class":359},[35,167422,167423,167425,167427,167430,167432,167434,167437,167439,167441],{"class":37,"line":45},[35,167424,161557],{"class":359},[35,167426,544],{"class":495},[35,167428,167429],{"class":58}," map",[35,167431,499],{"class":359},[35,167433,167137],{"class":495},[35,167435,167436],{"class":359}," x: x ",[35,167438,949],{"class":495},[35,167440,15089],{"class":58},[35,167442,167443],{"class":359},", nums)\n",[35,167445,167446,167448,167450,167452],{"class":37,"line":55},[35,167447,30741],{"class":58},[35,167449,499],{"class":359},[35,167451,154321],{"class":58},[35,167453,166319],{"class":359},[465,167455,167457],{"id":167456},"_7102-filter","7.10.2 filter",[21,167459,167460,167462],{},[32,167461,80376],{}," 保留满足条件的元素。",[25,167464,167466],{"className":30704,"code":167465,"language":30706,"meta":30,"style":30},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[32,167467,167468,167496,167521],{"__ignoreMap":30},[35,167469,167470,167472,167474,167476,167478,167480,167482,167484,167486,167488,167490,167492,167494],{"class":37,"line":38},[35,167471,164351],{"class":359},[35,167473,544],{"class":495},[35,167475,52552],{"class":359},[35,167477,713],{"class":58},[35,167479,12769],{"class":359},[35,167481,574],{"class":58},[35,167483,12769],{"class":359},[35,167485,568],{"class":58},[35,167487,12769],{"class":359},[35,167489,789],{"class":58},[35,167491,12769],{"class":359},[35,167493,372],{"class":58},[35,167495,33572],{"class":359},[35,167497,167498,167500,167502,167505,167507,167509,167511,167513,167515,167517,167519],{"class":37,"line":45},[35,167499,161557],{"class":359},[35,167501,544],{"class":495},[35,167503,167504],{"class":58}," filter",[35,167506,499],{"class":359},[35,167508,167137],{"class":495},[35,167510,167436],{"class":359},[35,167512,823],{"class":495},[35,167514,15089],{"class":58},[35,167516,101881],{"class":495},[35,167518,4427],{"class":58},[35,167520,167443],{"class":359},[35,167522,167523,167525,167527,167529],{"class":37,"line":55},[35,167524,30741],{"class":58},[35,167526,499],{"class":359},[35,167528,154321],{"class":58},[35,167530,166319],{"class":359},[465,167532,167534],{"id":167533},"_7103-sorted","7.10.3 sorted",[21,167536,167537,167539],{},[32,167538,165487],{}," 返回排序后的新列表。",[25,167541,167543],{"className":30704,"code":167542,"language":30706,"meta":30,"style":30},"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",[32,167544,167545,167553,167573,167593,167613,167617,167621,167650],{"__ignoreMap":30},[35,167546,167547,167549,167551],{"class":37,"line":38},[35,167548,159967],{"class":359},[35,167550,544],{"class":495},[35,167552,55773],{"class":359},[35,167554,167555,167557,167559,167561,167563,167565,167567,167569,167571],{"class":37,"line":45},[35,167556,148636],{"class":359},[35,167558,63005],{"class":306},[35,167560,51763],{"class":359},[35,167562,150139],{"class":306},[35,167564,12769],{"class":359},[35,167566,151723],{"class":306},[35,167568,51763],{"class":359},[35,167570,1483],{"class":58},[35,167572,5264],{"class":359},[35,167574,167575,167577,167579,167581,167583,167585,167587,167589,167591],{"class":37,"line":55},[35,167576,148636],{"class":359},[35,167578,63005],{"class":306},[35,167580,51763],{"class":359},[35,167582,151187],{"class":306},[35,167584,12769],{"class":359},[35,167586,151723],{"class":306},[35,167588,51763],{"class":359},[35,167590,1305],{"class":58},[35,167592,5264],{"class":359},[35,167594,167595,167597,167599,167601,167603,167605,167607,167609,167611],{"class":37,"line":65},[35,167596,148636],{"class":359},[35,167598,63005],{"class":306},[35,167600,51763],{"class":359},[35,167602,159982],{"class":306},[35,167604,12769],{"class":359},[35,167606,151723],{"class":306},[35,167608,51763],{"class":359},[35,167610,900],{"class":58},[35,167612,5264],{"class":359},[35,167614,167615],{"class":37,"line":74},[35,167616,33572],{"class":359},[35,167618,167619],{"class":37,"line":83},[35,167620,141],{"emptyLinePlaceholder":140},[35,167622,167623,167625,167627,167629,167632,167634,167636,167638,167640,167642,167644,167646,167648],{"class":37,"line":92},[35,167624,161557],{"class":359},[35,167626,544],{"class":495},[35,167628,163855],{"class":58},[35,167630,167631],{"class":359},"(students, ",[35,167633,154197],{"class":5550},[35,167635,154200],{"class":495},[35,167637,154203],{"class":359},[35,167639,151723],{"class":306},[35,167641,112524],{"class":359},[35,167643,163779],{"class":5550},[35,167645,544],{"class":495},[35,167647,31802],{"class":58},[35,167649,505],{"class":359},[35,167651,167652,167654],{"class":37,"line":101},[35,167653,30741],{"class":58},[35,167655,76910],{"class":359},[438,167657,167659],{"id":167658},"_711-闭包入门","7.11 闭包入门",[21,167661,167662],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[25,167664,167666],{"className":30704,"code":167665,"language":30706,"meta":30,"style":30},"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",[32,167667,167668,167678,167688,167699,167703,167710,167714,167718,167732],{"__ignoreMap":30},[35,167669,167670,167672,167675],{"class":37,"line":38},[35,167671,32273],{"class":495},[35,167673,167674],{"class":48}," outer",[35,167676,167677],{"class":359},"(base):\n",[35,167679,167680,167682,167685],{"class":37,"line":45},[35,167681,31127],{"class":495},[35,167683,167684],{"class":48}," inner",[35,167686,167687],{"class":359},"(num):\n",[35,167689,167690,167692,167695,167697],{"class":37,"line":55},[35,167691,15086],{"class":495},[35,167693,167694],{"class":359}," base ",[35,167696,975],{"class":495},[35,167698,166830],{"class":359},[35,167700,167701],{"class":37,"line":65},[35,167702,141],{"emptyLinePlaceholder":140},[35,167704,167705,167707],{"class":37,"line":74},[35,167706,4424],{"class":495},[35,167708,167709],{"class":359}," inner\n",[35,167711,167712],{"class":37,"line":83},[35,167713,141],{"emptyLinePlaceholder":140},[35,167715,167716],{"class":37,"line":92},[35,167717,141],{"emptyLinePlaceholder":140},[35,167719,167720,167723,167725,167728,167730],{"class":37,"line":101},[35,167721,167722],{"class":359},"add_10 ",[35,167724,544],{"class":495},[35,167726,167727],{"class":359}," outer(",[35,167729,940],{"class":58},[35,167731,505],{"class":359},[35,167733,167734,167736,167739,167741],{"class":37,"line":110},[35,167735,30741],{"class":58},[35,167737,167738],{"class":359},"(add_10(",[35,167740,372],{"class":58},[35,167742,30823],{"class":359},[21,167744,167745],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[438,167747,167749],{"id":167748},"_712-装饰器入门","7.12 装饰器入门",[21,167751,167752],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[25,167754,167756],{"className":30704,"code":167755,"language":30706,"meta":30,"style":30},"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",[32,167757,167758,167767,167776,167787,167792,167803,167807,167814,167818,167822,167827,167835,167845,167849,167853],{"__ignoreMap":30},[35,167759,167760,167762,167764],{"class":37,"line":38},[35,167761,32273],{"class":495},[35,167763,87516],{"class":48},[35,167765,167766],{"class":359},"(func):\n",[35,167768,167769,167771,167774],{"class":37,"line":45},[35,167770,31127],{"class":495},[35,167772,167773],{"class":48}," wrapper",[35,167775,32279],{"class":359},[35,167777,167778,167780,167782,167785],{"class":37,"line":55},[35,167779,32777],{"class":58},[35,167781,499],{"class":359},[35,167783,167784],{"class":306},"\"函数开始执行\"",[35,167786,505],{"class":359},[35,167788,167789],{"class":37,"line":65},[35,167790,167791],{"class":359},"        func()\n",[35,167793,167794,167796,167798,167801],{"class":37,"line":74},[35,167795,32777],{"class":58},[35,167797,499],{"class":359},[35,167799,167800],{"class":306},"\"函数执行结束\"",[35,167802,505],{"class":359},[35,167804,167805],{"class":37,"line":83},[35,167806,141],{"emptyLinePlaceholder":140},[35,167808,167809,167811],{"class":37,"line":92},[35,167810,4424],{"class":495},[35,167812,167813],{"class":359}," wrapper\n",[35,167815,167816],{"class":37,"line":101},[35,167817,141],{"emptyLinePlaceholder":140},[35,167819,167820],{"class":37,"line":110},[35,167821,141],{"emptyLinePlaceholder":140},[35,167823,167824],{"class":37,"line":119},[35,167825,167826],{"class":48},"@log\n",[35,167828,167829,167831,167833],{"class":37,"line":128},[35,167830,32273],{"class":495},[35,167832,161247],{"class":48},[35,167834,32279],{"class":359},[35,167836,167837,167839,167841,167843],{"class":37,"line":137},[35,167838,31625],{"class":58},[35,167840,499],{"class":359},[35,167842,6178],{"class":306},[35,167844,505],{"class":359},[35,167846,167847],{"class":37,"line":144},[35,167848,141],{"emptyLinePlaceholder":140},[35,167850,167851],{"class":37,"line":150},[35,167852,141],{"emptyLinePlaceholder":140},[35,167854,167855],{"class":37,"line":159},[35,167856,161282],{"class":359},[21,167858,158525],{},[25,167860,167862],{"className":30704,"code":167861,"language":30706,"meta":30,"style":30},"say_hello = log(say_hello)\n",[32,167863,167864],{"__ignoreMap":30},[35,167865,167866,167869,167871],{"class":37,"line":38},[35,167867,167868],{"class":359},"say_hello ",[35,167870,544],{"class":495},[35,167872,167873],{"class":359}," log(say_hello)\n",[21,167875,167876],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[438,167878,167880],{"id":167879},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[25,167882,167884],{"className":30704,"code":167883,"language":30706,"meta":30,"style":30},"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",[32,167885,167886,167894,167911,167921,167940,167950,167957,167961,167967,167971,167975,167979,167987,167997,168001,168005],{"__ignoreMap":30},[35,167887,167888,167890,167892],{"class":37,"line":38},[35,167889,32273],{"class":495},[35,167891,87516],{"class":48},[35,167893,167766],{"class":359},[35,167895,167896,167898,167900,167902,167904,167907,167909],{"class":37,"line":45},[35,167897,31127],{"class":495},[35,167899,167773],{"class":48},[35,167901,499],{"class":359},[35,167903,949],{"class":495},[35,167905,167906],{"class":359},"args, ",[35,167908,10995],{"class":495},[35,167910,166917],{"class":359},[35,167912,167913,167915,167917,167919],{"class":37,"line":55},[35,167914,32777],{"class":58},[35,167916,499],{"class":359},[35,167918,167784],{"class":306},[35,167920,505],{"class":359},[35,167922,167923,167926,167928,167931,167933,167935,167937],{"class":37,"line":65},[35,167924,167925],{"class":359},"        result ",[35,167927,544],{"class":495},[35,167929,167930],{"class":359}," func(",[35,167932,949],{"class":495},[35,167934,167906],{"class":359},[35,167936,10995],{"class":495},[35,167938,167939],{"class":359},"kwargs)\n",[35,167941,167942,167944,167946,167948],{"class":37,"line":74},[35,167943,32777],{"class":58},[35,167945,499],{"class":359},[35,167947,167800],{"class":306},[35,167949,505],{"class":359},[35,167951,167952,167954],{"class":37,"line":83},[35,167953,15086],{"class":495},[35,167955,167956],{"class":359}," result\n",[35,167958,167959],{"class":37,"line":92},[35,167960,141],{"emptyLinePlaceholder":140},[35,167962,167963,167965],{"class":37,"line":101},[35,167964,4424],{"class":495},[35,167966,167813],{"class":359},[35,167968,167969],{"class":37,"line":110},[35,167970,141],{"emptyLinePlaceholder":140},[35,167972,167973],{"class":37,"line":119},[35,167974,141],{"emptyLinePlaceholder":140},[35,167976,167977],{"class":37,"line":128},[35,167978,167826],{"class":48},[35,167980,167981,167983,167985],{"class":37,"line":137},[35,167982,32273],{"class":495},[35,167984,5543],{"class":48},[35,167986,151344],{"class":359},[35,167988,167989,167991,167993,167995],{"class":37,"line":144},[35,167990,4424],{"class":495},[35,167992,11203],{"class":359},[35,167994,975],{"class":495},[35,167996,151355],{"class":359},[35,167998,167999],{"class":37,"line":150},[35,168000,141],{"emptyLinePlaceholder":140},[35,168002,168003],{"class":37,"line":159},[35,168004,141],{"emptyLinePlaceholder":140},[35,168006,168007,168009,168011,168013,168015,168017],{"class":37,"line":168},[35,168008,30741],{"class":58},[35,168010,166851],{"class":359},[35,168012,940],{"class":58},[35,168014,12769],{"class":359},[35,168016,1194],{"class":58},[35,168018,30823],{"class":359},[21,168020,168021,168022,101343,168024,168026],{},"这个写法使用 ",[32,168023,166783],{},[32,168025,166898],{}," 接收原函数的所有参数。",[438,168028,168030],{"id":168029},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[21,168032,123543],{},[14,168034,168035,168038,168041],{},[17,168036,168037],{},"给定一组学生数据。",[17,168039,168040],{},"封装函数，根据传入规则筛选学生。",[17,168042,168043],{},"筛选及格、优秀、未成年学生。",[21,168045,10369],{},[25,168047,168049],{"className":30704,"code":168048,"language":30706,"meta":30,"style":30},"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",[32,168050,168051,168059,168087,168115,168143,168147,168151,168155,168165,168173,168183,168190,168195,168201,168205,168209,168233,168256,168279,168283,168290,168297],{"__ignoreMap":30},[35,168052,168053,168055,168057],{"class":37,"line":38},[35,168054,159967],{"class":359},[35,168056,544],{"class":495},[35,168058,55773],{"class":359},[35,168060,168061,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081,168083,168085],{"class":37,"line":45},[35,168062,148636],{"class":359},[35,168064,63005],{"class":306},[35,168066,51763],{"class":359},[35,168068,150139],{"class":306},[35,168070,12769],{"class":359},[35,168072,69450],{"class":306},[35,168074,51763],{"class":359},[35,168076,1144],{"class":58},[35,168078,12769],{"class":359},[35,168080,151723],{"class":306},[35,168082,51763],{"class":359},[35,168084,1483],{"class":58},[35,168086,5264],{"class":359},[35,168088,168089,168091,168093,168095,168097,168099,168101,168103,168105,168107,168109,168111,168113],{"class":37,"line":55},[35,168090,148636],{"class":359},[35,168092,63005],{"class":306},[35,168094,51763],{"class":359},[35,168096,151187],{"class":306},[35,168098,12769],{"class":359},[35,168100,69450],{"class":306},[35,168102,51763],{"class":359},[35,168104,1119],{"class":58},[35,168106,12769],{"class":359},[35,168108,151723],{"class":306},[35,168110,51763],{"class":359},[35,168112,1305],{"class":58},[35,168114,5264],{"class":359},[35,168116,168117,168119,168121,168123,168125,168127,168129,168131,168133,168135,168137,168139,168141],{"class":37,"line":65},[35,168118,148636],{"class":359},[35,168120,63005],{"class":306},[35,168122,51763],{"class":359},[35,168124,159982],{"class":306},[35,168126,12769],{"class":359},[35,168128,69450],{"class":306},[35,168130,51763],{"class":359},[35,168132,1169],{"class":58},[35,168134,12769],{"class":359},[35,168136,151723],{"class":306},[35,168138,51763],{"class":359},[35,168140,1376],{"class":58},[35,168142,5264],{"class":359},[35,168144,168145],{"class":37,"line":74},[35,168146,33572],{"class":359},[35,168148,168149],{"class":37,"line":83},[35,168150,141],{"emptyLinePlaceholder":140},[35,168152,168153],{"class":37,"line":92},[35,168154,141],{"emptyLinePlaceholder":140},[35,168156,168157,168159,168162],{"class":37,"line":101},[35,168158,32273],{"class":495},[35,168160,168161],{"class":48}," filter_students",[35,168163,168164],{"class":359},"(students, condition):\n",[35,168166,168167,168169,168171],{"class":37,"line":110},[35,168168,161474],{"class":359},[35,168170,544],{"class":495},[35,168172,52164],{"class":359},[35,168174,168175,168177,168179,168181],{"class":37,"line":119},[35,168176,3535],{"class":495},[35,168178,152388],{"class":359},[35,168180,26374],{"class":495},[35,168182,152393],{"class":359},[35,168184,168185,168187],{"class":37,"line":128},[35,168186,2837],{"class":495},[35,168188,168189],{"class":359}," condition(student):\n",[35,168191,168192],{"class":37,"line":137},[35,168193,168194],{"class":359},"            result.append(student)\n",[35,168196,168197,168199],{"class":37,"line":144},[35,168198,4424],{"class":495},[35,168200,167956],{"class":359},[35,168202,168203],{"class":37,"line":150},[35,168204,141],{"emptyLinePlaceholder":140},[35,168206,168207],{"class":37,"line":159},[35,168208,141],{"emptyLinePlaceholder":140},[35,168210,168211,168213,168215,168218,168220,168223,168225,168227,168229,168231],{"class":37,"line":168},[35,168212,165952],{"class":359},[35,168214,544],{"class":495},[35,168216,168217],{"class":359}," filter_students(students, ",[35,168219,167137],{"class":495},[35,168221,168222],{"class":359}," s: s[",[35,168224,151723],{"class":306},[35,168226,4777],{"class":359},[35,168228,2060],{"class":495},[35,168230,158088],{"class":58},[35,168232,505],{"class":359},[35,168234,168235,168238,168240,168242,168244,168246,168248,168250,168252,168254],{"class":37,"line":177},[35,168236,168237],{"class":359},"excellent ",[35,168239,544],{"class":495},[35,168241,168217],{"class":359},[35,168243,167137],{"class":495},[35,168245,168222],{"class":359},[35,168247,151723],{"class":306},[35,168249,4777],{"class":359},[35,168251,2060],{"class":495},[35,168253,158039],{"class":58},[35,168255,505],{"class":359},[35,168257,168258,168261,168263,168265,168267,168269,168271,168273,168275,168277],{"class":37,"line":182},[35,168259,168260],{"class":359},"under_age ",[35,168262,544],{"class":495},[35,168264,168217],{"class":359},[35,168266,167137],{"class":495},[35,168268,168222],{"class":359},[35,168270,69450],{"class":306},[35,168272,4777],{"class":359},[35,168274,1404],{"class":495},[35,168276,156536],{"class":58},[35,168278,505],{"class":359},[35,168280,168281],{"class":37,"line":188},[35,168282,141],{"emptyLinePlaceholder":140},[35,168284,168285,168287],{"class":37,"line":197},[35,168286,30741],{"class":58},[35,168288,168289],{"class":359},"(passed)\n",[35,168291,168292,168294],{"class":37,"line":206},[35,168293,30741],{"class":58},[35,168295,168296],{"class":359},"(excellent)\n",[35,168298,168299,168301],{"class":37,"line":215},[35,168300,30741],{"class":58},[35,168302,168303],{"class":359},"(under_age)\n",[438,168305,168307],{"id":168306},"_715-易错点","7.15 易错点",[14,168309,168310,168313,168321,168326,168337],{},[17,168311,168312],{},"默认参数不要写可变对象。",[17,168314,168315,168317,168318,168320],{},[32,168316,166783],{}," 是元组，",[32,168319,166898],{}," 是字典。",[17,168322,168323,168325],{},[32,168324,167137],{}," 只适合简单表达式。",[17,168327,168328,101343,168330,168332,168333,168336],{},[32,168329,74369],{},[32,168331,80376],{}," 的结果是迭代器，常用 ",[32,168334,168335],{},"list()"," 转换查看。",[17,168338,168339],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[438,168341,168343],{"id":168342},"_716-本章练习","7.16 本章练习",[14,168345,168346,168353,168359,168364,168369],{},[17,168347,168348,168349,168352],{},"写函数 ",[32,168350,168351],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[17,168354,168348,168355,168358],{},[32,168356,168357],{},"print_user(**kwargs)","，输出用户所有字段。",[17,168360,104688,168361,168363],{},[32,168362,167137],{}," 对学生列表按年龄排序。",[17,168365,104688,168366,168368],{},[32,168367,80376],{}," 找出成绩不及格的学生。",[17,168370,168371],{},"写一个装饰器，统计函数执行前后的提示信息。",[416,168373,168374],{},"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":30,"searchDepth":45,"depth":45,"links":168376},[168377,168378,168379,168380,168381,168382,168386,168387,168388,168389,168394,168395,168396,168397,168398,168399],{"id":166235,"depth":45,"text":166236},{"id":166349,"depth":45,"text":166350},{"id":166438,"depth":45,"text":166439},{"id":166500,"depth":45,"text":166501},{"id":166646,"depth":45,"text":166647},{"id":166773,"depth":45,"text":166774,"children":168383},[168384,168385],{"id":166777,"depth":55,"text":166778},{"id":166892,"depth":55,"text":166893},{"id":166973,"depth":45,"text":166974},{"id":167131,"depth":45,"text":167132},{"id":167299,"depth":45,"text":167300},{"id":167381,"depth":45,"text":167382,"children":168390},[168391,168392,168393],{"id":167385,"depth":55,"text":167386},{"id":167456,"depth":55,"text":167457},{"id":167533,"depth":55,"text":167534},{"id":167658,"depth":45,"text":167659},{"id":167748,"depth":45,"text":167749},{"id":167879,"depth":45,"text":167880},{"id":168029,"depth":45,"text":168030},{"id":168306,"depth":45,"text":168307},{"id":168342,"depth":45,"text":168343},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166227,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168406,"title":168407,"body":168408,"description":421,"extension":422,"meta":170927,"navigation":140,"path":170928,"seo":170929,"stem":170930,"__hash__":170931},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168409,"toc":170902},[168410,168413,168417,168420,168423,168454,168458,168462,168465,168492,168496,168499,168550,168553,168568,168571,168606,168610,168612,168636,168639,168699,168703,168707,168710,168767,168770,168790,168794,168797,168860,168864,168867,168923,168930,168954,168958,168961,169024,169028,169033,169084,169087,169091,169096,169163,169166,169248,169252,169257,169308,169311,169315,169318,169321,169329,169332,169378,169381,169427,169431,169437,169481,169484,169530,169533,169573,169576,169637,169641,169644,169734,169737,169879,169882,169949,169953,169956,169959,170100,170103,170181,170184,170360,170364,170366,170377,170379,170578,170582,170826,170830,170864,170868,170899],[10,168411,168407],{"id":168412},"_8-文件操作",[438,168414,168416],{"id":168415},"_81-文件操作的意义","8.1 文件操作的意义",[21,168418,168419],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[21,168421,168422],{},"常见文件类型：",[14,168424,168425,168431,168437,168443,168449],{},[17,168426,168427,168430],{},[32,168428,168429],{},".txt","：普通文本。",[17,168432,168433,168436],{},[32,168434,168435],{},".csv","：表格文本。",[17,168438,168439,168442],{},[32,168440,168441],{},".json","：结构化数据。",[17,168444,168445,168448],{},[32,168446,168447],{},".log","：日志文件。",[17,168450,168451,168453],{},[32,168452,146603],{},"：Python 源代码。",[438,168455,168457],{"id":168456},"_82-路径","8.2 路径",[465,168459,168461],{"id":168460},"_821-相对路径","8.2.1 相对路径",[21,168463,168464],{},"相对当前运行目录：",[25,168466,168468],{"className":30704,"code":168467,"language":30706,"meta":30,"style":30},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[32,168469,168470],{"__ignoreMap":30},[35,168471,168472,168474,168476,168478,168480,168482,168484,168486,168488,168490],{"class":37,"line":38},[35,168473,87240],{"class":58},[35,168475,499],{"class":359},[35,168477,147047],{"class":306},[35,168479,12769],{"class":359},[35,168481,147052],{"class":306},[35,168483,12769],{"class":359},[35,168485,147057],{"class":5550},[35,168487,544],{"class":495},[35,168489,147062],{"class":306},[35,168491,505],{"class":359},[465,168493,168495],{"id":168494},"_822-绝对路径","8.2.2 绝对路径",[21,168497,168498],{},"从根目录或盘符开始：",[25,168500,168502],{"className":30704,"code":168501,"language":30706,"meta":30,"style":30},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[32,168503,168504,168527],{"__ignoreMap":30},[35,168505,168506,168508,168510,168513,168515,168517,168519,168521,168523,168525],{"class":37,"line":38},[35,168507,87240],{"class":58},[35,168509,499],{"class":359},[35,168511,168512],{"class":306},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[35,168514,12769],{"class":359},[35,168516,147052],{"class":306},[35,168518,12769],{"class":359},[35,168520,147057],{"class":5550},[35,168522,544],{"class":495},[35,168524,147062],{"class":306},[35,168526,505],{"class":359},[35,168528,168529,168531,168533,168536,168538,168540,168542,168544,168546,168548],{"class":37,"line":45},[35,168530,87240],{"class":58},[35,168532,499],{"class":359},[35,168534,168535],{"class":306},"\"D:\u002Fdata\u002Fdata.txt\"",[35,168537,12769],{"class":359},[35,168539,147052],{"class":306},[35,168541,12769],{"class":359},[35,168543,147057],{"class":5550},[35,168545,544],{"class":495},[35,168547,147062],{"class":306},[35,168549,505],{"class":359},[21,168551,168552],{},"Windows 路径建议写成：",[25,168554,168556],{"className":30704,"code":168555,"language":30706,"meta":30,"style":30},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[32,168557,168558],{"__ignoreMap":30},[35,168559,168560,168563,168565],{"class":37,"line":38},[35,168561,168562],{"class":359},"path ",[35,168564,544],{"class":495},[35,168566,168567],{"class":306}," \"D:\u002Fdata\u002Fdata.txt\"\n",[21,168569,168570],{},"或原始字符串：",[25,168572,168574],{"className":30704,"code":168573,"language":30706,"meta":30,"style":30},"path = r\"D:\\data\\data.txt\"\n",[32,168575,168576],{"__ignoreMap":30},[35,168577,168578,168580,168582,168584,168586,168589,168592,168595,168597,168599,168601,168604],{"class":37,"line":38},[35,168579,168562],{"class":359},[35,168581,544],{"class":495},[35,168583,17455],{"class":495},[35,168585,747],{"class":306},[35,168587,168588],{"class":48303},"D:",[35,168590,168591],{"class":58},"\\d",[35,168593,168594],{"class":48303},"ata",[35,168596,168591],{"class":58},[35,168598,168594],{"class":48303},[35,168600,1052],{"class":58},[35,168602,168603],{"class":48303},"txt",[35,168605,25465],{"class":306},[438,168607,168609],{"id":168608},"_83-open函数","8.3 open函数",[21,168611,5515],{},[25,168613,168615],{"className":30704,"code":168614,"language":30706,"meta":30,"style":30},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[32,168616,168617],{"__ignoreMap":30},[35,168618,168619,168621,168623,168625,168628,168630,168632,168634],{"class":37,"line":38},[35,168620,45680],{"class":5550},[35,168622,13898],{"class":495},[35,168624,147042],{"class":58},[35,168626,168627],{"class":359},"(文件路径, 打开模式, ",[35,168629,147057],{"class":5550},[35,168631,544],{"class":495},[35,168633,147062],{"class":306},[35,168635,505],{"class":359},[21,168637,168638],{},"常见模式：",[633,168640,168641,168650],{},[636,168642,168643],{},[639,168644,168645,168648],{},[642,168646,168647],{},"模式",[642,168649,26200],{},[680,168651,168652,168661,168670,168679,168689],{},[639,168653,168654,168658],{},[685,168655,168656],{},[32,168657,1164],{},[685,168659,168660],{},"只读，文件不存在会报错",[639,168662,168663,168667],{},[685,168664,168665],{},[32,168666,1289],{},[685,168668,168669],{},"只写，文件不存在会创建，存在会清空",[639,168671,168672,168676],{},[685,168673,168674],{},[32,168675,734],{},[685,168677,168678],{},"追加，文件不存在会创建",[639,168680,168681,168686],{},[685,168682,168683],{},[32,168684,168685],{},"rb",[685,168687,168688],{},"二进制只读",[639,168690,168691,168696],{},[685,168692,168693],{},[32,168694,168695],{},"wb",[685,168697,168698],{},"二进制只写",[438,168700,168702],{"id":168701},"_84-读取文件","8.4 读取文件",[465,168704,168706],{"id":168705},"_841-read","8.4.1 read",[21,168708,168709],{},"一次读取全部内容：",[25,168711,168713],{"className":30704,"code":168712,"language":30706,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[32,168714,168715,168741,168753,168760],{"__ignoreMap":30},[35,168716,168717,168719,168721,168723,168725,168727,168729,168731,168733,168735,168737,168739],{"class":37,"line":38},[35,168718,45680],{"class":5550},[35,168720,13898],{"class":495},[35,168722,147042],{"class":58},[35,168724,499],{"class":359},[35,168726,147047],{"class":306},[35,168728,12769],{"class":359},[35,168730,147052],{"class":306},[35,168732,12769],{"class":359},[35,168734,147057],{"class":5550},[35,168736,544],{"class":495},[35,168738,147062],{"class":306},[35,168740,505],{"class":359},[35,168742,168743,168746,168748,168750],{"class":37,"line":45},[35,168744,168745],{"class":359},"content ",[35,168747,544],{"class":495},[35,168749,148404],{"class":5550},[35,168751,168752],{"class":359},".read()\n",[35,168754,168755,168757],{"class":37,"line":55},[35,168756,30741],{"class":58},[35,168758,168759],{"class":359},"(content)\n",[35,168761,168762,168764],{"class":37,"line":65},[35,168763,45680],{"class":5550},[35,168765,168766],{"class":359},".close()\n",[21,168768,168769],{},"可以指定读取字符数：",[25,168771,168773],{"className":30704,"code":168772,"language":30706,"meta":30,"style":30},"content = file.read(10)\n",[32,168774,168775],{"__ignoreMap":30},[35,168776,168777,168779,168781,168783,168786,168788],{"class":37,"line":38},[35,168778,168745],{"class":359},[35,168780,544],{"class":495},[35,168782,148404],{"class":5550},[35,168784,168785],{"class":359},".read(",[35,168787,940],{"class":58},[35,168789,505],{"class":359},[465,168791,168793],{"id":168792},"_842-readline","8.4.2 readline",[21,168795,168796],{},"一次读取一行：",[25,168798,168800],{"className":30704,"code":168799,"language":30706,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[32,168801,168802,168828,168832,168843,168850,168854],{"__ignoreMap":30},[35,168803,168804,168806,168808,168810,168812,168814,168816,168818,168820,168822,168824,168826],{"class":37,"line":38},[35,168805,45680],{"class":5550},[35,168807,13898],{"class":495},[35,168809,147042],{"class":58},[35,168811,499],{"class":359},[35,168813,147047],{"class":306},[35,168815,12769],{"class":359},[35,168817,147052],{"class":306},[35,168819,12769],{"class":359},[35,168821,147057],{"class":5550},[35,168823,544],{"class":495},[35,168825,147062],{"class":306},[35,168827,505],{"class":359},[35,168829,168830],{"class":37,"line":45},[35,168831,141],{"emptyLinePlaceholder":140},[35,168833,168834,168836,168838,168840],{"class":37,"line":55},[35,168835,147503],{"class":359},[35,168837,544],{"class":495},[35,168839,148404],{"class":5550},[35,168841,168842],{"class":359},".readline()\n",[35,168844,168845,168847],{"class":37,"line":65},[35,168846,30741],{"class":58},[35,168848,168849],{"class":359},"(line)\n",[35,168851,168852],{"class":37,"line":74},[35,168853,141],{"emptyLinePlaceholder":140},[35,168855,168856,168858],{"class":37,"line":83},[35,168857,45680],{"class":5550},[35,168859,168766],{"class":359},[465,168861,168863],{"id":168862},"_843-readlines","8.4.3 readlines",[21,168865,168866],{},"读取所有行，返回列表：",[25,168868,168870],{"className":30704,"code":168869,"language":30706,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[32,168871,168872,168898,168910,168917],{"__ignoreMap":30},[35,168873,168874,168876,168878,168880,168882,168884,168886,168888,168890,168892,168894,168896],{"class":37,"line":38},[35,168875,45680],{"class":5550},[35,168877,13898],{"class":495},[35,168879,147042],{"class":58},[35,168881,499],{"class":359},[35,168883,147047],{"class":306},[35,168885,12769],{"class":359},[35,168887,147052],{"class":306},[35,168889,12769],{"class":359},[35,168891,147057],{"class":5550},[35,168893,544],{"class":495},[35,168895,147062],{"class":306},[35,168897,505],{"class":359},[35,168899,168900,168903,168905,168907],{"class":37,"line":45},[35,168901,168902],{"class":359},"lines ",[35,168904,544],{"class":495},[35,168906,148404],{"class":5550},[35,168908,168909],{"class":359},".readlines()\n",[35,168911,168912,168914],{"class":37,"line":55},[35,168913,30741],{"class":58},[35,168915,168916],{"class":359},"(lines)\n",[35,168918,168919,168921],{"class":37,"line":65},[35,168920,45680],{"class":5550},[35,168922,168766],{"class":359},[21,168924,168925,168926,168929],{},"每一行通常带有换行符，可以用 ",[32,168927,168928],{},"strip()"," 去掉：",[25,168931,168933],{"className":30704,"code":168932,"language":30706,"meta":30,"style":30},"for line in lines:\n    print(line.strip())\n",[32,168934,168935,168947],{"__ignoreMap":30},[35,168936,168937,168939,168942,168944],{"class":37,"line":38},[35,168938,3359],{"class":495},[35,168940,168941],{"class":359}," line ",[35,168943,26374],{"class":495},[35,168945,168946],{"class":359}," lines:\n",[35,168948,168949,168951],{"class":37,"line":45},[35,168950,31625],{"class":58},[35,168952,168953],{"class":359},"(line.strip())\n",[465,168955,168957],{"id":168956},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[21,168959,168960],{},"推荐读取大文件时使用：",[25,168962,168964],{"className":30704,"code":168963,"language":30706,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[32,168965,168966,168992,168996,169008,169014,169018],{"__ignoreMap":30},[35,168967,168968,168970,168972,168974,168976,168978,168980,168982,168984,168986,168988,168990],{"class":37,"line":38},[35,168969,45680],{"class":5550},[35,168971,13898],{"class":495},[35,168973,147042],{"class":58},[35,168975,499],{"class":359},[35,168977,147047],{"class":306},[35,168979,12769],{"class":359},[35,168981,147052],{"class":306},[35,168983,12769],{"class":359},[35,168985,147057],{"class":5550},[35,168987,544],{"class":495},[35,168989,147062],{"class":306},[35,168991,505],{"class":359},[35,168993,168994],{"class":37,"line":45},[35,168995,141],{"emptyLinePlaceholder":140},[35,168997,168998,169000,169002,169004,169006],{"class":37,"line":55},[35,168999,3359],{"class":495},[35,169001,168941],{"class":359},[35,169003,26374],{"class":495},[35,169005,148404],{"class":5550},[35,169007,4073],{"class":359},[35,169009,169010,169012],{"class":37,"line":65},[35,169011,31625],{"class":58},[35,169013,168953],{"class":359},[35,169015,169016],{"class":37,"line":74},[35,169017,141],{"emptyLinePlaceholder":140},[35,169019,169020,169022],{"class":37,"line":83},[35,169021,45680],{"class":5550},[35,169023,168766],{"class":359},[438,169025,169027],{"id":169026},"_85-with语句","8.5 with语句",[21,169029,169030,169032],{},[32,169031,108155],{}," 会自动关闭文件，推荐使用。",[25,169034,169036],{"className":30704,"code":169035,"language":30706,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[32,169037,169038,169068,169078],{"__ignoreMap":30},[35,169039,169040,169042,169044,169046,169048,169050,169052,169054,169056,169058,169060,169062,169064,169066],{"class":37,"line":38},[35,169041,108155],{"class":495},[35,169043,147042],{"class":58},[35,169045,499],{"class":359},[35,169047,147047],{"class":306},[35,169049,12769],{"class":359},[35,169051,147052],{"class":306},[35,169053,12769],{"class":359},[35,169055,147057],{"class":5550},[35,169057,544],{"class":495},[35,169059,147062],{"class":306},[35,169061,14048],{"class":359},[35,169063,31709],{"class":495},[35,169065,148404],{"class":5550},[35,169067,4073],{"class":359},[35,169069,169070,169072,169074,169076],{"class":37,"line":45},[35,169071,147074],{"class":359},[35,169073,544],{"class":495},[35,169075,148404],{"class":5550},[35,169077,168752],{"class":359},[35,169079,169080,169082],{"class":37,"line":55},[35,169081,31625],{"class":58},[35,169083,168759],{"class":359},[21,169085,169086],{},"等价于打开文件、读取、最后关闭，但更安全。",[438,169088,169090],{"id":169089},"_86-写入文件","8.6 写入文件",[21,169092,169093,169095],{},[32,169094,1289],{}," 模式会清空原文件。",[25,169097,169099],{"className":30704,"code":169098,"language":30706,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[32,169100,169101,169131,169148],{"__ignoreMap":30},[35,169102,169103,169105,169107,169109,169111,169113,169115,169117,169119,169121,169123,169125,169127,169129],{"class":37,"line":38},[35,169104,108155],{"class":495},[35,169106,147042],{"class":58},[35,169108,499],{"class":359},[35,169110,147047],{"class":306},[35,169112,12769],{"class":359},[35,169114,152227],{"class":306},[35,169116,12769],{"class":359},[35,169118,147057],{"class":5550},[35,169120,544],{"class":495},[35,169122,147062],{"class":306},[35,169124,14048],{"class":359},[35,169126,31709],{"class":495},[35,169128,148404],{"class":5550},[35,169130,4073],{"class":359},[35,169132,169133,169136,169139,169142,169144,169146],{"class":37,"line":45},[35,169134,169135],{"class":5550},"    file",[35,169137,169138],{"class":359},".write(",[35,169140,169141],{"class":306},"\"hello",[35,169143,156776],{"class":58},[35,169145,747],{"class":306},[35,169147,505],{"class":359},[35,169149,169150,169152,169154,169157,169159,169161],{"class":37,"line":55},[35,169151,169135],{"class":5550},[35,169153,169138],{"class":359},[35,169155,169156],{"class":306},"\"python",[35,169158,156776],{"class":58},[35,169160,747],{"class":306},[35,169162,505],{"class":359},[21,169164,169165],{},"写入多行：",[25,169167,169169],{"className":30704,"code":169168,"language":30706,"meta":30,"style":30},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[32,169170,169171,169206,169210,169241],{"__ignoreMap":30},[35,169172,169173,169175,169177,169179,169182,169184,169186,169188,169191,169193,169195,169197,169200,169202,169204],{"class":37,"line":38},[35,169174,168902],{"class":359},[35,169176,544],{"class":495},[35,169178,52552],{"class":359},[35,169180,169181],{"class":306},"\"小明,18",[35,169183,156776],{"class":58},[35,169185,747],{"class":306},[35,169187,12769],{"class":359},[35,169189,169190],{"class":306},"\"小红,17",[35,169192,156776],{"class":58},[35,169194,747],{"class":306},[35,169196,12769],{"class":359},[35,169198,169199],{"class":306},"\"小刚,19",[35,169201,156776],{"class":58},[35,169203,747],{"class":306},[35,169205,33572],{"class":359},[35,169207,169208],{"class":37,"line":45},[35,169209,141],{"emptyLinePlaceholder":140},[35,169211,169212,169214,169216,169218,169221,169223,169225,169227,169229,169231,169233,169235,169237,169239],{"class":37,"line":55},[35,169213,108155],{"class":495},[35,169215,147042],{"class":58},[35,169217,499],{"class":359},[35,169219,169220],{"class":306},"\"students.txt\"",[35,169222,12769],{"class":359},[35,169224,152227],{"class":306},[35,169226,12769],{"class":359},[35,169228,147057],{"class":5550},[35,169230,544],{"class":495},[35,169232,147062],{"class":306},[35,169234,14048],{"class":359},[35,169236,31709],{"class":495},[35,169238,148404],{"class":5550},[35,169240,4073],{"class":359},[35,169242,169243,169245],{"class":37,"line":65},[35,169244,169135],{"class":5550},[35,169246,169247],{"class":359},".writelines(lines)\n",[438,169249,169251],{"id":169250},"_87-追加文件","8.7 追加文件",[21,169253,169254,169256],{},[32,169255,734],{}," 模式不会清空原内容，而是在末尾追加。",[25,169258,169260],{"className":30704,"code":169259,"language":30706,"meta":30,"style":30},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[32,169261,169262,169293],{"__ignoreMap":30},[35,169263,169264,169266,169268,169270,169273,169275,169277,169279,169281,169283,169285,169287,169289,169291],{"class":37,"line":38},[35,169265,108155],{"class":495},[35,169267,147042],{"class":58},[35,169269,499],{"class":359},[35,169271,169272],{"class":306},"\"log.txt\"",[35,169274,12769],{"class":359},[35,169276,165576],{"class":306},[35,169278,12769],{"class":359},[35,169280,147057],{"class":5550},[35,169282,544],{"class":495},[35,169284,147062],{"class":306},[35,169286,14048],{"class":359},[35,169288,31709],{"class":495},[35,169290,148404],{"class":5550},[35,169292,4073],{"class":359},[35,169294,169295,169297,169299,169302,169304,169306],{"class":37,"line":45},[35,169296,169135],{"class":5550},[35,169298,169138],{"class":359},[35,169300,169301],{"class":306},"\"程序启动",[35,169303,156776],{"class":58},[35,169305,747],{"class":306},[35,169307,505],{"class":359},[21,169309,169310],{},"日志类文件常用追加模式。",[438,169312,169314],{"id":169313},"_88-文件编码","8.8 文件编码",[21,169316,169317],{},"编码决定文字如何保存为字节。",[21,169319,169320],{},"常见编码：",[14,169322,169323,169326],{},[17,169324,169325],{},"UTF-8：推荐。",[17,169327,169328],{},"GBK：部分 Windows 中文文件常见。",[21,169330,169331],{},"读取文件乱码时，可以尝试：",[25,169333,169335],{"className":30704,"code":169334,"language":30706,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[32,169336,169337,169368],{"__ignoreMap":30},[35,169338,169339,169341,169343,169345,169347,169349,169351,169353,169355,169357,169360,169362,169364,169366],{"class":37,"line":38},[35,169340,108155],{"class":495},[35,169342,147042],{"class":58},[35,169344,499],{"class":359},[35,169346,147047],{"class":306},[35,169348,12769],{"class":359},[35,169350,147052],{"class":306},[35,169352,12769],{"class":359},[35,169354,147057],{"class":5550},[35,169356,544],{"class":495},[35,169358,169359],{"class":306},"\"gbk\"",[35,169361,14048],{"class":359},[35,169363,31709],{"class":495},[35,169365,148404],{"class":5550},[35,169367,4073],{"class":359},[35,169369,169370,169372,169374,169376],{"class":37,"line":45},[35,169371,147074],{"class":359},[35,169373,544],{"class":495},[35,169375,148404],{"class":5550},[35,169377,168752],{"class":359},[21,169379,169380],{},"写文件时建议统一 UTF-8：",[25,169382,169384],{"className":30704,"code":169383,"language":30706,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[32,169385,169386,169416],{"__ignoreMap":30},[35,169387,169388,169390,169392,169394,169396,169398,169400,169402,169404,169406,169408,169410,169412,169414],{"class":37,"line":38},[35,169389,108155],{"class":495},[35,169391,147042],{"class":58},[35,169393,499],{"class":359},[35,169395,147047],{"class":306},[35,169397,12769],{"class":359},[35,169399,152227],{"class":306},[35,169401,12769],{"class":359},[35,169403,147057],{"class":5550},[35,169405,544],{"class":495},[35,169407,147062],{"class":306},[35,169409,14048],{"class":359},[35,169411,31709],{"class":495},[35,169413,148404],{"class":5550},[35,169415,4073],{"class":359},[35,169417,169418,169420,169422,169425],{"class":37,"line":45},[35,169419,169135],{"class":5550},[35,169421,169138],{"class":359},[35,169423,169424],{"class":306},"\"中文内容\"",[35,169426,505],{"class":359},[438,169428,169430],{"id":169429},"_89-pathlib","8.9 pathlib",[21,169432,169433,169436],{},[32,169434,169435],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[25,169438,169440],{"className":30704,"code":169439,"language":30706,"meta":30,"style":30},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[32,169441,169442,169452,169456,169474],{"__ignoreMap":30},[35,169443,169444,169446,169448,169450],{"class":37,"line":38},[35,169445,31063],{"class":495},[35,169447,108633],{"class":359},[35,169449,30718],{"class":495},[35,169451,108638],{"class":359},[35,169453,169454],{"class":37,"line":45},[35,169455,141],{"emptyLinePlaceholder":140},[35,169457,169458,169460,169462,169464,169467,169469,169471],{"class":37,"line":55},[35,169459,168562],{"class":359},[35,169461,544],{"class":495},[35,169463,108867],{"class":359},[35,169465,169466],{"class":306},"\"data\"",[35,169468,14048],{"class":359},[35,169470,1078],{"class":495},[35,169472,169473],{"class":306}," \"students.txt\"\n",[35,169475,169476,169478],{"class":37,"line":65},[35,169477,30741],{"class":58},[35,169479,169480],{"class":359},"(path)\n",[21,169482,169483],{},"创建目录：",[25,169485,169487],{"className":30704,"code":169486,"language":30706,"meta":30,"style":30},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[32,169488,169489,169499,169503,169516],{"__ignoreMap":30},[35,169490,169491,169493,169495,169497],{"class":37,"line":38},[35,169492,31063],{"class":495},[35,169494,108633],{"class":359},[35,169496,30718],{"class":495},[35,169498,108638],{"class":359},[35,169500,169501],{"class":37,"line":45},[35,169502,141],{"emptyLinePlaceholder":140},[35,169504,169505,169508,169510,169512,169514],{"class":37,"line":55},[35,169506,169507],{"class":359},"data_dir ",[35,169509,544],{"class":495},[35,169511,108867],{"class":359},[35,169513,169466],{"class":306},[35,169515,505],{"class":359},[35,169517,169518,169521,169524,169526,169528],{"class":37,"line":65},[35,169519,169520],{"class":359},"data_dir.mkdir(",[35,169522,169523],{"class":5550},"exist_ok",[35,169525,544],{"class":495},[35,169527,31802],{"class":58},[35,169529,505],{"class":359},[21,169531,169532],{},"判断文件是否存在：",[25,169534,169536],{"className":30704,"code":169535,"language":30706,"meta":30,"style":30},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[32,169537,169538,169551,169555,169562],{"__ignoreMap":30},[35,169539,169540,169542,169544,169546,169549],{"class":37,"line":38},[35,169541,168562],{"class":359},[35,169543,544],{"class":495},[35,169545,108867],{"class":359},[35,169547,169548],{"class":306},"\"data\u002Fstudents.txt\"",[35,169550,505],{"class":359},[35,169552,169553],{"class":37,"line":45},[35,169554,141],{"emptyLinePlaceholder":140},[35,169556,169557,169559],{"class":37,"line":55},[35,169558,1892],{"class":495},[35,169560,169561],{"class":359}," path.exists():\n",[35,169563,169564,169566,169568,169571],{"class":37,"line":65},[35,169565,31625],{"class":58},[35,169567,499],{"class":359},[35,169569,169570],{"class":306},"\"文件存在\"",[35,169572,505],{"class":359},[21,169574,169575],{},"读写文本：",[25,169577,169579],{"className":30704,"code":169578,"language":30706,"meta":30,"style":30},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[32,169580,169581,169593,169597,169614,169631],{"__ignoreMap":30},[35,169582,169583,169585,169587,169589,169591],{"class":37,"line":38},[35,169584,168562],{"class":359},[35,169586,544],{"class":495},[35,169588,108867],{"class":359},[35,169590,147047],{"class":306},[35,169592,505],{"class":359},[35,169594,169595],{"class":37,"line":45},[35,169596,141],{"emptyLinePlaceholder":140},[35,169598,169599,169602,169604,169606,169608,169610,169612],{"class":37,"line":55},[35,169600,169601],{"class":359},"path.write_text(",[35,169603,146127],{"class":306},[35,169605,12769],{"class":359},[35,169607,147057],{"class":5550},[35,169609,544],{"class":495},[35,169611,147062],{"class":306},[35,169613,505],{"class":359},[35,169615,169616,169618,169620,169623,169625,169627,169629],{"class":37,"line":65},[35,169617,168745],{"class":359},[35,169619,544],{"class":495},[35,169621,169622],{"class":359}," path.read_text(",[35,169624,147057],{"class":5550},[35,169626,544],{"class":495},[35,169628,147062],{"class":306},[35,169630,505],{"class":359},[35,169632,169633,169635],{"class":37,"line":74},[35,169634,30741],{"class":58},[35,169636,168759],{"class":359},[438,169638,169640],{"id":169639},"_810-json文件","8.10 JSON文件",[21,169642,169643],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[25,169645,169647],{"className":30704,"code":169646,"language":30706,"meta":30,"style":30},"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",[32,169648,169649,169655,169659,169667,169677,169687,169695,169699,169703,169728],{"__ignoreMap":30},[35,169650,169651,169653],{"class":37,"line":38},[35,169652,30718],{"class":495},[35,169654,147342],{"class":359},[35,169656,169657],{"class":37,"line":45},[35,169658,141],{"emptyLinePlaceholder":140},[35,169660,169661,169663,169665],{"class":37,"line":55},[35,169662,149732],{"class":359},[35,169664,544],{"class":495},[35,169666,15906],{"class":359},[35,169668,169669,169671,169673,169675],{"class":37,"line":65},[35,169670,147271],{"class":306},[35,169672,51763],{"class":359},[35,169674,150139],{"class":306},[35,169676,31792],{"class":359},[35,169678,169679,169681,169683,169685],{"class":37,"line":74},[35,169680,164788],{"class":306},[35,169682,51763],{"class":359},[35,169684,1144],{"class":58},[35,169686,31792],{"class":359},[35,169688,169689,169691,169693],{"class":37,"line":83},[35,169690,164799],{"class":306},[35,169692,51763],{"class":359},[35,169694,164804],{"class":58},[35,169696,169697],{"class":37,"line":92},[35,169698,1926],{"class":359},[35,169700,169701],{"class":37,"line":101},[35,169702,141],{"emptyLinePlaceholder":140},[35,169704,169705,169707,169709,169712,169714,169716,169718,169720,169722,169724,169726],{"class":37,"line":110},[35,169706,156695],{"class":359},[35,169708,544],{"class":495},[35,169710,169711],{"class":359}," json.dumps(student, ",[35,169713,147388],{"class":5550},[35,169715,544],{"class":495},[35,169717,34313],{"class":58},[35,169719,12769],{"class":359},[35,169721,152263],{"class":5550},[35,169723,544],{"class":495},[35,169725,574],{"class":58},[35,169727,505],{"class":359},[35,169729,169730,169732],{"class":37,"line":119},[35,169731,30741],{"class":58},[35,169733,164322],{"class":359},[21,169735,169736],{},"写入 JSON 文件：",[25,169738,169740],{"className":30704,"code":169739,"language":30706,"meta":30,"style":30},"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",[32,169741,169742,169748,169752,169760,169788,169816,169820,169824,169854],{"__ignoreMap":30},[35,169743,169744,169746],{"class":37,"line":38},[35,169745,30718],{"class":495},[35,169747,147342],{"class":359},[35,169749,169750],{"class":37,"line":45},[35,169751,141],{"emptyLinePlaceholder":140},[35,169753,169754,169756,169758],{"class":37,"line":55},[35,169755,159967],{"class":359},[35,169757,544],{"class":495},[35,169759,55773],{"class":359},[35,169761,169762,169764,169766,169768,169770,169772,169774,169776,169778,169780,169782,169784,169786],{"class":37,"line":65},[35,169763,148636],{"class":359},[35,169765,63005],{"class":306},[35,169767,51763],{"class":359},[35,169769,150139],{"class":306},[35,169771,12769],{"class":359},[35,169773,69450],{"class":306},[35,169775,51763],{"class":359},[35,169777,1144],{"class":58},[35,169779,12769],{"class":359},[35,169781,151723],{"class":306},[35,169783,51763],{"class":359},[35,169785,1483],{"class":58},[35,169787,5264],{"class":359},[35,169789,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812,169814],{"class":37,"line":74},[35,169791,148636],{"class":359},[35,169793,63005],{"class":306},[35,169795,51763],{"class":359},[35,169797,151187],{"class":306},[35,169799,12769],{"class":359},[35,169801,69450],{"class":306},[35,169803,51763],{"class":359},[35,169805,1119],{"class":58},[35,169807,12769],{"class":359},[35,169809,151723],{"class":306},[35,169811,51763],{"class":359},[35,169813,1305],{"class":58},[35,169815,5264],{"class":359},[35,169817,169818],{"class":37,"line":83},[35,169819,33572],{"class":359},[35,169821,169822],{"class":37,"line":92},[35,169823,141],{"emptyLinePlaceholder":140},[35,169825,169826,169828,169830,169832,169834,169836,169838,169840,169842,169844,169846,169848,169850,169852],{"class":37,"line":101},[35,169827,108155],{"class":495},[35,169829,147042],{"class":58},[35,169831,499],{"class":359},[35,169833,152082],{"class":306},[35,169835,12769],{"class":359},[35,169837,152227],{"class":306},[35,169839,12769],{"class":359},[35,169841,147057],{"class":5550},[35,169843,544],{"class":495},[35,169845,147062],{"class":306},[35,169847,14048],{"class":359},[35,169849,31709],{"class":495},[35,169851,148404],{"class":5550},[35,169853,4073],{"class":359},[35,169855,169856,169859,169861,169863,169865,169867,169869,169871,169873,169875,169877],{"class":37,"line":110},[35,169857,169858],{"class":359},"    json.dump(students, ",[35,169860,45680],{"class":5550},[35,169862,12769],{"class":359},[35,169864,147388],{"class":5550},[35,169866,544],{"class":495},[35,169868,34313],{"class":58},[35,169870,12769],{"class":359},[35,169872,152263],{"class":5550},[35,169874,544],{"class":495},[35,169876,574],{"class":58},[35,169878,505],{"class":359},[21,169880,169881],{},"读取 JSON 文件：",[25,169883,169885],{"className":30704,"code":169884,"language":30706,"meta":30,"style":30},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[32,169886,169887,169893,169897,169927,169939,169943],{"__ignoreMap":30},[35,169888,169889,169891],{"class":37,"line":38},[35,169890,30718],{"class":495},[35,169892,147342],{"class":359},[35,169894,169895],{"class":37,"line":45},[35,169896,141],{"emptyLinePlaceholder":140},[35,169898,169899,169901,169903,169905,169907,169909,169911,169913,169915,169917,169919,169921,169923,169925],{"class":37,"line":55},[35,169900,108155],{"class":495},[35,169902,147042],{"class":58},[35,169904,499],{"class":359},[35,169906,152082],{"class":306},[35,169908,12769],{"class":359},[35,169910,147052],{"class":306},[35,169912,12769],{"class":359},[35,169914,147057],{"class":5550},[35,169916,544],{"class":495},[35,169918,147062],{"class":306},[35,169920,14048],{"class":359},[35,169922,31709],{"class":495},[35,169924,148404],{"class":5550},[35,169926,4073],{"class":359},[35,169928,169929,169931,169933,169935,169937],{"class":37,"line":65},[35,169930,153288],{"class":359},[35,169932,544],{"class":495},[35,169934,148415],{"class":359},[35,169936,45680],{"class":5550},[35,169938,505],{"class":359},[35,169940,169941],{"class":37,"line":74},[35,169942,141],{"emptyLinePlaceholder":140},[35,169944,169945,169947],{"class":37,"line":83},[35,169946,30741],{"class":58},[35,169948,165246],{"class":359},[438,169950,169952],{"id":169951},"_811-csv文件","8.11 CSV文件",[21,169954,169955],{},"CSV 是逗号分隔值，常用于表格数据。",[21,169957,169958],{},"写入 CSV：",[25,169960,169962],{"className":30704,"code":169961,"language":30706,"meta":30,"style":30},"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",[32,169963,169964,169971,169975,169983,170001,170017,170033,170037,170041,170081,170095],{"__ignoreMap":30},[35,169965,169966,169968],{"class":37,"line":38},[35,169967,30718],{"class":495},[35,169969,169970],{"class":359}," csv\n",[35,169972,169973],{"class":37,"line":45},[35,169974,141],{"emptyLinePlaceholder":140},[35,169976,169977,169979,169981],{"class":37,"line":55},[35,169978,159967],{"class":359},[35,169980,544],{"class":495},[35,169982,55773],{"class":359},[35,169984,169985,169988,169990,169992,169994,169996,169999],{"class":37,"line":65},[35,169986,169987],{"class":359},"    [",[35,169989,73424],{"class":306},[35,169991,12769],{"class":359},[35,169993,73457],{"class":306},[35,169995,12769],{"class":359},[35,169997,169998],{"class":306},"\"成绩\"",[35,170000,88161],{"class":359},[35,170002,170003,170005,170007,170009,170011,170013,170015],{"class":37,"line":74},[35,170004,169987],{"class":359},[35,170006,150139],{"class":306},[35,170008,12769],{"class":359},[35,170010,1144],{"class":58},[35,170012,12769],{"class":359},[35,170014,1483],{"class":58},[35,170016,88161],{"class":359},[35,170018,170019,170021,170023,170025,170027,170029,170031],{"class":37,"line":83},[35,170020,169987],{"class":359},[35,170022,151187],{"class":306},[35,170024,12769],{"class":359},[35,170026,1119],{"class":58},[35,170028,12769],{"class":359},[35,170030,1305],{"class":58},[35,170032,88161],{"class":359},[35,170034,170035],{"class":37,"line":92},[35,170036,33572],{"class":359},[35,170038,170039],{"class":37,"line":101},[35,170040,141],{"emptyLinePlaceholder":140},[35,170042,170043,170045,170047,170049,170052,170054,170056,170058,170060,170062,170064,170066,170069,170071,170073,170075,170077,170079],{"class":37,"line":110},[35,170044,108155],{"class":495},[35,170046,147042],{"class":58},[35,170048,499],{"class":359},[35,170050,170051],{"class":306},"\"students.csv\"",[35,170053,12769],{"class":359},[35,170055,152227],{"class":306},[35,170057,12769],{"class":359},[35,170059,147057],{"class":5550},[35,170061,544],{"class":495},[35,170063,147062],{"class":306},[35,170065,12769],{"class":359},[35,170067,170068],{"class":5550},"newline",[35,170070,544],{"class":495},[35,170072,7986],{"class":306},[35,170074,14048],{"class":359},[35,170076,31709],{"class":495},[35,170078,148404],{"class":5550},[35,170080,4073],{"class":359},[35,170082,170083,170086,170088,170091,170093],{"class":37,"line":119},[35,170084,170085],{"class":359},"    writer ",[35,170087,544],{"class":495},[35,170089,170090],{"class":359}," csv.writer(",[35,170092,45680],{"class":5550},[35,170094,505],{"class":359},[35,170096,170097],{"class":37,"line":128},[35,170098,170099],{"class":359},"    writer.writerows(students)\n",[21,170101,170102],{},"读取 CSV：",[25,170104,170106],{"className":30704,"code":170105,"language":30706,"meta":30,"style":30},"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",[32,170107,170108,170114,170118,170148,170162,170174],{"__ignoreMap":30},[35,170109,170110,170112],{"class":37,"line":38},[35,170111,30718],{"class":495},[35,170113,169970],{"class":359},[35,170115,170116],{"class":37,"line":45},[35,170117,141],{"emptyLinePlaceholder":140},[35,170119,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146],{"class":37,"line":55},[35,170121,108155],{"class":495},[35,170123,147042],{"class":58},[35,170125,499],{"class":359},[35,170127,170051],{"class":306},[35,170129,12769],{"class":359},[35,170131,147052],{"class":306},[35,170133,12769],{"class":359},[35,170135,147057],{"class":5550},[35,170137,544],{"class":495},[35,170139,147062],{"class":306},[35,170141,14048],{"class":359},[35,170143,31709],{"class":495},[35,170145,148404],{"class":5550},[35,170147,4073],{"class":359},[35,170149,170150,170153,170155,170158,170160],{"class":37,"line":65},[35,170151,170152],{"class":359},"    reader ",[35,170154,544],{"class":495},[35,170156,170157],{"class":359}," csv.reader(",[35,170159,45680],{"class":5550},[35,170161,505],{"class":359},[35,170163,170164,170166,170169,170171],{"class":37,"line":74},[35,170165,3535],{"class":495},[35,170167,170168],{"class":359}," row ",[35,170170,26374],{"class":495},[35,170172,170173],{"class":359}," reader:\n",[35,170175,170176,170178],{"class":37,"line":83},[35,170177,32777],{"class":58},[35,170179,170180],{"class":359},"(row)\n",[21,170182,170183],{},"使用字典写入：",[25,170185,170187],{"className":30704,"code":170186,"language":30706,"meta":30,"style":30},"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",[32,170188,170189,170195,170199,170207,170235,170263,170267,170271,170309,170330,170351,170356],{"__ignoreMap":30},[35,170190,170191,170193],{"class":37,"line":38},[35,170192,30718],{"class":495},[35,170194,169970],{"class":359},[35,170196,170197],{"class":37,"line":45},[35,170198,141],{"emptyLinePlaceholder":140},[35,170200,170201,170203,170205],{"class":37,"line":55},[35,170202,159967],{"class":359},[35,170204,544],{"class":495},[35,170206,55773],{"class":359},[35,170208,170209,170211,170213,170215,170217,170219,170221,170223,170225,170227,170229,170231,170233],{"class":37,"line":65},[35,170210,148636],{"class":359},[35,170212,63005],{"class":306},[35,170214,51763],{"class":359},[35,170216,150139],{"class":306},[35,170218,12769],{"class":359},[35,170220,69450],{"class":306},[35,170222,51763],{"class":359},[35,170224,1144],{"class":58},[35,170226,12769],{"class":359},[35,170228,151723],{"class":306},[35,170230,51763],{"class":359},[35,170232,1483],{"class":58},[35,170234,5264],{"class":359},[35,170236,170237,170239,170241,170243,170245,170247,170249,170251,170253,170255,170257,170259,170261],{"class":37,"line":74},[35,170238,148636],{"class":359},[35,170240,63005],{"class":306},[35,170242,51763],{"class":359},[35,170244,151187],{"class":306},[35,170246,12769],{"class":359},[35,170248,69450],{"class":306},[35,170250,51763],{"class":359},[35,170252,1119],{"class":58},[35,170254,12769],{"class":359},[35,170256,151723],{"class":306},[35,170258,51763],{"class":359},[35,170260,1305],{"class":58},[35,170262,5264],{"class":359},[35,170264,170265],{"class":37,"line":83},[35,170266,33572],{"class":359},[35,170268,170269],{"class":37,"line":92},[35,170270,141],{"emptyLinePlaceholder":140},[35,170272,170273,170275,170277,170279,170281,170283,170285,170287,170289,170291,170293,170295,170297,170299,170301,170303,170305,170307],{"class":37,"line":101},[35,170274,108155],{"class":495},[35,170276,147042],{"class":58},[35,170278,499],{"class":359},[35,170280,170051],{"class":306},[35,170282,12769],{"class":359},[35,170284,152227],{"class":306},[35,170286,12769],{"class":359},[35,170288,147057],{"class":5550},[35,170290,544],{"class":495},[35,170292,147062],{"class":306},[35,170294,12769],{"class":359},[35,170296,170068],{"class":5550},[35,170298,544],{"class":495},[35,170300,7986],{"class":306},[35,170302,14048],{"class":359},[35,170304,31709],{"class":495},[35,170306,148404],{"class":5550},[35,170308,4073],{"class":359},[35,170310,170311,170314,170316,170318,170320,170322,170324,170326,170328],{"class":37,"line":110},[35,170312,170313],{"class":359},"    fieldnames ",[35,170315,544],{"class":495},[35,170317,52552],{"class":359},[35,170319,63005],{"class":306},[35,170321,12769],{"class":359},[35,170323,69450],{"class":306},[35,170325,12769],{"class":359},[35,170327,151723],{"class":306},[35,170329,33572],{"class":359},[35,170331,170332,170334,170336,170339,170341,170343,170346,170348],{"class":37,"line":119},[35,170333,170085],{"class":359},[35,170335,544],{"class":495},[35,170337,170338],{"class":359}," csv.DictWriter(",[35,170340,45680],{"class":5550},[35,170342,12769],{"class":359},[35,170344,170345],{"class":5550},"fieldnames",[35,170347,544],{"class":495},[35,170349,170350],{"class":359},"fieldnames)\n",[35,170352,170353],{"class":37,"line":128},[35,170354,170355],{"class":359},"    writer.writeheader()\n",[35,170357,170358],{"class":37,"line":137},[35,170359,170099],{"class":359},[438,170361,170363],{"id":170362},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[21,170365,123543],{},[14,170367,170368,170371,170374],{},[17,170369,170370],{},"读取文本文件。",[17,170372,170373],{},"统计每个单词出现次数。",[17,170375,170376],{},"输出出现次数最多的前 10 个单词。",[21,170378,10369],{},[25,170380,170382],{"className":30704,"code":170381,"language":30706,"meta":30,"style":30},"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",[32,170383,170384,170394,170398,170411,170427,170431,170441,170450,170454,170466,170486,170495,170499,170517,170521,170551,170555,170571],{"__ignoreMap":30},[35,170385,170386,170388,170390,170392],{"class":37,"line":38},[35,170387,31063],{"class":495},[35,170389,108633],{"class":359},[35,170391,30718],{"class":495},[35,170393,108638],{"class":359},[35,170395,170396],{"class":37,"line":45},[35,170397,141],{"emptyLinePlaceholder":140},[35,170399,170400,170402,170404,170406,170409],{"class":37,"line":55},[35,170401,168562],{"class":359},[35,170403,544],{"class":495},[35,170405,108867],{"class":359},[35,170407,170408],{"class":306},"\"article.txt\"",[35,170410,505],{"class":359},[35,170412,170413,170415,170417,170419,170421,170423,170425],{"class":37,"line":65},[35,170414,168745],{"class":359},[35,170416,544],{"class":495},[35,170418,169622],{"class":359},[35,170420,147057],{"class":5550},[35,170422,544],{"class":495},[35,170424,147062],{"class":306},[35,170426,505],{"class":359},[35,170428,170429],{"class":37,"line":74},[35,170430,141],{"emptyLinePlaceholder":140},[35,170432,170433,170436,170438],{"class":37,"line":83},[35,170434,170435],{"class":359},"words ",[35,170437,544],{"class":495},[35,170439,170440],{"class":359}," content.lower().split()\n",[35,170442,170443,170446,170448],{"class":37,"line":92},[35,170444,170445],{"class":359},"counter ",[35,170447,544],{"class":495},[35,170449,88193],{"class":359},[35,170451,170452],{"class":37,"line":101},[35,170453,141],{"emptyLinePlaceholder":140},[35,170455,170456,170458,170461,170463],{"class":37,"line":110},[35,170457,3359],{"class":495},[35,170459,170460],{"class":359}," word ",[35,170462,26374],{"class":495},[35,170464,170465],{"class":359}," words:\n",[35,170467,170468,170471,170473,170476,170479,170481,170484],{"class":37,"line":119},[35,170469,170470],{"class":359},"    word ",[35,170472,544],{"class":495},[35,170474,170475],{"class":359}," word.strip(",[35,170477,170478],{"class":306},"\".,!?;:",[35,170480,156746],{"class":58},[35,170482,170483],{"class":306},"'()[]\"",[35,170485,505],{"class":359},[35,170487,170488,170490,170492],{"class":37,"line":128},[35,170489,3435],{"class":495},[35,170491,39256],{"class":495},[35,170493,170494],{"class":359}," word:\n",[35,170496,170497],{"class":37,"line":137},[35,170498,148763],{"class":495},[35,170500,170501,170504,170506,170509,170511,170513,170515],{"class":37,"line":144},[35,170502,170503],{"class":359},"    counter[word] ",[35,170505,544],{"class":495},[35,170507,170508],{"class":359}," counter.get(word, ",[35,170510,687],{"class":58},[35,170512,14048],{"class":359},[35,170514,975],{"class":495},[35,170516,56025],{"class":58},[35,170518,170519],{"class":37,"line":150},[35,170520,141],{"emptyLinePlaceholder":140},[35,170522,170523,170526,170528,170530,170533,170535,170537,170539,170541,170543,170545,170547,170549],{"class":37,"line":159},[35,170524,170525],{"class":359},"items ",[35,170527,544],{"class":495},[35,170529,163855],{"class":58},[35,170531,170532],{"class":359},"(counter.items(), ",[35,170534,154197],{"class":5550},[35,170536,154200],{"class":495},[35,170538,154203],{"class":359},[35,170540,713],{"class":58},[35,170542,112524],{"class":359},[35,170544,163779],{"class":5550},[35,170546,544],{"class":495},[35,170548,31802],{"class":58},[35,170550,505],{"class":359},[35,170552,170553],{"class":37,"line":168},[35,170554,141],{"emptyLinePlaceholder":140},[35,170556,170557,170559,170562,170564,170567,170569],{"class":37,"line":177},[35,170558,3359],{"class":495},[35,170560,170561],{"class":359}," word, count ",[35,170563,26374],{"class":495},[35,170565,170566],{"class":359}," items[:",[35,170568,940],{"class":58},[35,170570,166006],{"class":359},[35,170572,170573,170575],{"class":37,"line":182},[35,170574,31625],{"class":58},[35,170576,170577],{"class":359},"(word, count)\n",[438,170579,170581],{"id":170580},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[25,170583,170585],{"className":30704,"code":170584,"language":30706,"meta":30,"style":30},"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",[32,170586,170587,170593,170603,170607,170619,170623,170627,170635,170645,170651,170655,170685,170695,170699,170703,170711,170741,170765,170769,170773,170781,170810,170815],{"__ignoreMap":30},[35,170588,170589,170591],{"class":37,"line":38},[35,170590,30718],{"class":495},[35,170592,147342],{"class":359},[35,170594,170595,170597,170599,170601],{"class":37,"line":45},[35,170596,31063],{"class":495},[35,170598,108633],{"class":359},[35,170600,30718],{"class":495},[35,170602,108638],{"class":359},[35,170604,170605],{"class":37,"line":55},[35,170606,141],{"emptyLinePlaceholder":140},[35,170608,170609,170611,170613,170615,170617],{"class":37,"line":65},[35,170610,152075],{"class":58},[35,170612,13898],{"class":495},[35,170614,108867],{"class":359},[35,170616,152082],{"class":306},[35,170618,505],{"class":359},[35,170620,170621],{"class":37,"line":74},[35,170622,141],{"emptyLinePlaceholder":140},[35,170624,170625],{"class":37,"line":83},[35,170626,141],{"emptyLinePlaceholder":140},[35,170628,170629,170631,170633],{"class":37,"line":92},[35,170630,32273],{"class":495},[35,170632,152099],{"class":48},[35,170634,32279],{"class":359},[35,170636,170637,170639,170641,170643],{"class":37,"line":101},[35,170638,3435],{"class":495},[35,170640,39256],{"class":495},[35,170642,152110],{"class":58},[35,170644,152113],{"class":359},[35,170646,170647,170649],{"class":37,"line":110},[35,170648,15086],{"class":495},[35,170650,52164],{"class":359},[35,170652,170653],{"class":37,"line":119},[35,170654,141],{"emptyLinePlaceholder":140},[35,170656,170657,170659,170661,170663,170665,170667,170669,170671,170673,170675,170677,170679,170681,170683],{"class":37,"line":128},[35,170658,34504],{"class":495},[35,170660,147042],{"class":58},[35,170662,499],{"class":359},[35,170664,152075],{"class":58},[35,170666,12769],{"class":359},[35,170668,147052],{"class":306},[35,170670,12769],{"class":359},[35,170672,147057],{"class":5550},[35,170674,544],{"class":495},[35,170676,147062],{"class":306},[35,170678,14048],{"class":359},[35,170680,31709],{"class":495},[35,170682,148404],{"class":5550},[35,170684,4073],{"class":359},[35,170686,170687,170689,170691,170693],{"class":37,"line":137},[35,170688,15086],{"class":495},[35,170690,148415],{"class":359},[35,170692,45680],{"class":5550},[35,170694,505],{"class":359},[35,170696,170697],{"class":37,"line":144},[35,170698,141],{"emptyLinePlaceholder":140},[35,170700,170701],{"class":37,"line":150},[35,170702,141],{"emptyLinePlaceholder":140},[35,170704,170705,170707,170709],{"class":37,"line":159},[35,170706,32273],{"class":495},[35,170708,152209],{"class":48},[35,170710,152212],{"class":359},[35,170712,170713,170715,170717,170719,170721,170723,170725,170727,170729,170731,170733,170735,170737,170739],{"class":37,"line":168},[35,170714,34504],{"class":495},[35,170716,147042],{"class":58},[35,170718,499],{"class":359},[35,170720,152075],{"class":58},[35,170722,12769],{"class":359},[35,170724,152227],{"class":306},[35,170726,12769],{"class":359},[35,170728,147057],{"class":5550},[35,170730,544],{"class":495},[35,170732,147062],{"class":306},[35,170734,14048],{"class":359},[35,170736,31709],{"class":495},[35,170738,148404],{"class":5550},[35,170740,4073],{"class":359},[35,170742,170743,170745,170747,170749,170751,170753,170755,170757,170759,170761,170763],{"class":37,"line":177},[35,170744,152248],{"class":359},[35,170746,45680],{"class":5550},[35,170748,12769],{"class":359},[35,170750,147388],{"class":5550},[35,170752,544],{"class":495},[35,170754,34313],{"class":58},[35,170756,12769],{"class":359},[35,170758,152263],{"class":5550},[35,170760,544],{"class":495},[35,170762,574],{"class":58},[35,170764,505],{"class":359},[35,170766,170767],{"class":37,"line":182},[35,170768,141],{"emptyLinePlaceholder":140},[35,170770,170771],{"class":37,"line":188},[35,170772,141],{"emptyLinePlaceholder":140},[35,170774,170775,170777,170779],{"class":37,"line":197},[35,170776,159967],{"class":359},[35,170778,544],{"class":495},[35,170780,153293],{"class":359},[35,170782,170783,170786,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808],{"class":37,"line":206},[35,170784,170785],{"class":359},"students.append({",[35,170787,63005],{"class":306},[35,170789,51763],{"class":359},[35,170791,150139],{"class":306},[35,170793,12769],{"class":359},[35,170795,69450],{"class":306},[35,170797,51763],{"class":359},[35,170799,1144],{"class":58},[35,170801,12769],{"class":359},[35,170803,151723],{"class":306},[35,170805,51763],{"class":359},[35,170807,1483],{"class":58},[35,170809,165403],{"class":359},[35,170811,170812],{"class":37,"line":215},[35,170813,170814],{"class":359},"save_students(students)\n",[35,170816,170817,170819,170821,170824],{"class":37,"line":224},[35,170818,30741],{"class":58},[35,170820,499],{"class":359},[35,170822,170823],{"class":306},"\"保存成功\"",[35,170825,505],{"class":359},[438,170827,170829],{"id":170828},"_814-易错点","8.14 易错点",[14,170831,170832,170836,170842,170847,170854,170861],{},[17,170833,170834,169095],{},[32,170835,1289],{},[17,170837,170838,170839,28711],{},"读写中文要指定 ",[32,170840,170841],{},"encoding=\"utf-8\"",[17,170843,170844,170845,28711],{},"打开文件后要关闭，推荐使用 ",[32,170846,108155],{},[17,170848,170849,170850,170853],{},"读取大文件不要直接 ",[32,170851,170852],{},"read()"," 全部内容。",[17,170855,170856,170857,170860],{},"Windows 写 CSV 时建议加 ",[32,170858,170859],{},"newline=\"\"","，避免空行。",[17,170862,170863],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[438,170865,170867],{"id":170866},"_815-本章练习","8.15 本章练习",[14,170869,170870,170877,170882,170885,170888],{},[17,170871,170872,170873,170876],{},"写入一个 ",[32,170874,170875],{},"students.txt","，每行保存一个学生姓名。",[17,170878,104677,170879,170881],{},[32,170880,170875],{}," 并输出所有学生。",[17,170883,170884],{},"把学生列表保存为 JSON 文件。",[17,170886,170887],{},"从 JSON 文件读取学生数据，计算平均分。",[17,170889,170890,170891,170894,170895,170898],{},"写一个日志函数 ",[32,170892,170893],{},"write_log(message)","，每次调用向 ",[32,170896,170897],{},"app.log"," 追加一行。",[416,170900,170901],{},"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":30,"searchDepth":45,"depth":45,"links":170903},[170904,170905,170909,170910,170916,170917,170918,170919,170920,170921,170922,170923,170924,170925,170926],{"id":168415,"depth":45,"text":168416},{"id":168456,"depth":45,"text":168457,"children":170906},[170907,170908],{"id":168460,"depth":55,"text":168461},{"id":168494,"depth":55,"text":168495},{"id":168608,"depth":45,"text":168609},{"id":168701,"depth":45,"text":168702,"children":170911},[170912,170913,170914,170915],{"id":168705,"depth":55,"text":168706},{"id":168792,"depth":55,"text":168793},{"id":168862,"depth":55,"text":168863},{"id":168956,"depth":55,"text":168957},{"id":169026,"depth":45,"text":169027},{"id":169089,"depth":45,"text":169090},{"id":169250,"depth":45,"text":169251},{"id":169313,"depth":45,"text":169314},{"id":169429,"depth":45,"text":169430},{"id":169639,"depth":45,"text":169640},{"id":169951,"depth":45,"text":169952},{"id":170362,"depth":45,"text":170363},{"id":170580,"depth":45,"text":170581},{"id":170828,"depth":45,"text":170829},{"id":170866,"depth":45,"text":170867},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168407,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170933,"title":170934,"body":170935,"description":421,"extension":422,"meta":173121,"navigation":140,"path":173122,"seo":173123,"stem":173124,"__hash__":173125},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170936,"toc":173088},[170937,170940,170944,170947,170950,171042,171044,171063,171068,171072,171075,171078,171107,171114,171117,171121,171124,171153,171155,171207,171213,171266,171270,171368,171371,171438,171442,171499,171501,171507,171511,171516,171522,171613,171618,171622,171625,171703,171706,171744,171748,171866,171869,171873,171876,171921,171924,171928,171933,171939,171989,171992,172023,172027,172031,172061,172065,172100,172104,172139,172179,172183,172199,172202,172206,172210,172289,172293,172334,172338,172393,172397,172431,172435,172465,172474,172481,172487,172544,172547,172555,172558,172562,172569,172572,172578,172581,172598,172603,172607,172613,172626,172629,172666,172669,172680,172683,172697,172700,172714,172718,172725,172758,172761,172763,172769,172772,172776,172778,172784,172789,172962,172966,173029,173033,173057,173061,173085],[10,170938,170934],{"id":170939},"_9-异常模块与包",[438,170941,170943],{"id":170942},"_91-什么是异常","9.1 什么是异常",[21,170945,170946],{},"异常是程序运行过程中出现的错误。",[21,170948,170949],{},"常见异常：",[633,170951,170952,170961],{},[636,170953,170954],{},[639,170955,170956,170959],{},[642,170957,170958],{},"异常",[642,170960,26200],{},[680,170962,170963,170973,170983,170992,171002,171012,171022,171032],{},[639,170964,170965,170970],{},[685,170966,170967],{},[32,170968,170969],{},"NameError",[685,170971,170972],{},"使用了未定义变量",[639,170974,170975,170980],{},[685,170976,170977],{},[32,170978,170979],{},"TypeError",[685,170981,170982],{},"类型不匹配",[639,170984,170985,170989],{},[685,170986,170987],{},[32,170988,155085],{},[685,170990,170991],{},"值不合法",[639,170993,170994,170999],{},[685,170995,170996],{},[32,170997,170998],{},"IndexError",[685,171000,171001],{},"列表索引越界",[639,171003,171004,171009],{},[685,171005,171006],{},[32,171007,171008],{},"KeyError",[685,171010,171011],{},"字典 key 不存在",[639,171013,171014,171019],{},[685,171015,171016],{},[32,171017,171018],{},"FileNotFoundError",[685,171020,171021],{},"文件不存在",[639,171023,171024,171029],{},[685,171025,171026],{},[32,171027,171028],{},"ZeroDivisionError",[685,171030,171031],{},"除数为 0",[639,171033,171034,171039],{},[685,171035,171036],{},[32,171037,171038],{},"ImportError",[685,171040,171041],{},"导入失败",[21,171043,15469],{},[25,171045,171047],{"className":30704,"code":171046,"language":30706,"meta":30,"style":30},"num = int(\"abc\")\n",[32,171048,171049],{"__ignoreMap":30},[35,171050,171051,171053,171055,171057,171059,171061],{"class":37,"line":38},[35,171052,156038],{"class":359},[35,171054,544],{"class":495},[35,171056,2723],{"class":58},[35,171058,499],{"class":359},[35,171060,156131],{"class":306},[35,171062,505],{"class":359},[21,171064,171065,171066,28711],{},"会触发 ",[32,171067,155085],{},[438,171069,171071],{"id":171070},"_92-为什么要处理异常","9.2 为什么要处理异常",[21,171073,171074],{},"如果不处理异常，程序会直接终止。",[21,171076,171077],{},"例如用户输入年龄：",[25,171079,171081],{"className":30704,"code":171080,"language":30706,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[32,171082,171083,171101],{"__ignoreMap":30},[35,171084,171085,171087,171089,171091,171093,171095,171097,171099],{"class":37,"line":38},[35,171086,146797],{"class":359},[35,171088,544],{"class":495},[35,171090,2723],{"class":58},[35,171092,499],{"class":359},[35,171094,54147],{"class":58},[35,171096,499],{"class":359},[35,171098,152645],{"class":306},[35,171100,30823],{"class":359},[35,171102,171103,171105],{"class":37,"line":45},[35,171104,30741],{"class":58},[35,171106,156012],{"class":359},[21,171108,171109,171110,171113],{},"用户输入 ",[32,171111,171112],{},"abc","，程序就会报错退出。",[21,171115,171116],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[438,171118,171120],{"id":171119},"_93-try-except","9.3 try except",[21,171122,171123],{},"基础语法：",[25,171125,171127],{"className":30704,"code":171126,"language":30706,"meta":30,"style":30},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[32,171128,171129,171136,171141,171148],{"__ignoreMap":30},[35,171130,171131,171134],{"class":37,"line":38},[35,171132,171133],{"class":495},"try",[35,171135,4073],{"class":359},[35,171137,171138],{"class":37,"line":45},[35,171139,171140],{"class":359},"    可能出错的代码\n",[35,171142,171143,171146],{"class":37,"line":55},[35,171144,171145],{"class":495},"except",[35,171147,4073],{"class":359},[35,171149,171150],{"class":37,"line":65},[35,171151,171152],{"class":359},"    出错后的处理代码\n",[21,171154,15469],{},[25,171156,171158],{"className":30704,"code":171157,"language":30706,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[32,171159,171160,171166,171184,171190,171196],{"__ignoreMap":30},[35,171161,171162,171164],{"class":37,"line":38},[35,171163,171133],{"class":495},[35,171165,4073],{"class":359},[35,171167,171168,171170,171172,171174,171176,171178,171180,171182],{"class":37,"line":45},[35,171169,152637],{"class":359},[35,171171,544],{"class":495},[35,171173,2723],{"class":58},[35,171175,499],{"class":359},[35,171177,54147],{"class":58},[35,171179,499],{"class":359},[35,171181,152645],{"class":306},[35,171183,30823],{"class":359},[35,171185,171186,171188],{"class":37,"line":55},[35,171187,31625],{"class":58},[35,171189,156012],{"class":359},[35,171191,171192,171194],{"class":37,"line":65},[35,171193,171145],{"class":495},[35,171195,4073],{"class":359},[35,171197,171198,171200,171202,171205],{"class":37,"line":74},[35,171199,31625],{"class":58},[35,171201,499],{"class":359},[35,171203,171204],{"class":306},"\"年龄必须是数字\"",[35,171206,505],{"class":359},[21,171208,171209,171210,171212],{},"不建议裸写 ",[32,171211,171145],{},"，最好指定异常类型。",[25,171214,171216],{"className":30704,"code":171215,"language":30706,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[32,171217,171218,171224,171242,171248,171256],{"__ignoreMap":30},[35,171219,171220,171222],{"class":37,"line":38},[35,171221,171133],{"class":495},[35,171223,4073],{"class":359},[35,171225,171226,171228,171230,171232,171234,171236,171238,171240],{"class":37,"line":45},[35,171227,152637],{"class":359},[35,171229,544],{"class":495},[35,171231,2723],{"class":58},[35,171233,499],{"class":359},[35,171235,54147],{"class":58},[35,171237,499],{"class":359},[35,171239,152645],{"class":306},[35,171241,30823],{"class":359},[35,171243,171244,171246],{"class":37,"line":55},[35,171245,31625],{"class":58},[35,171247,156012],{"class":359},[35,171249,171250,171252,171254],{"class":37,"line":65},[35,171251,171145],{"class":495},[35,171253,152477],{"class":58},[35,171255,4073],{"class":359},[35,171257,171258,171260,171262,171264],{"class":37,"line":74},[35,171259,31625],{"class":58},[35,171261,499],{"class":359},[35,171263,171204],{"class":306},[35,171265,505],{"class":359},[438,171267,171269],{"id":171268},"_94-捕获多个异常","9.4 捕获多个异常",[25,171271,171273],{"className":30704,"code":171272,"language":30706,"meta":30,"style":30},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[32,171274,171275,171281,171302,171322,171329,171337,171348,171357],{"__ignoreMap":30},[35,171276,171277,171279],{"class":37,"line":38},[35,171278,171133],{"class":495},[35,171280,4073],{"class":359},[35,171282,171283,171286,171288,171290,171292,171294,171296,171298,171300],{"class":37,"line":45},[35,171284,171285],{"class":359},"    nums ",[35,171287,544],{"class":495},[35,171289,52552],{"class":359},[35,171291,713],{"class":58},[35,171293,12769],{"class":359},[35,171295,574],{"class":58},[35,171297,12769],{"class":359},[35,171299,568],{"class":58},[35,171301,33572],{"class":359},[35,171303,171304,171307,171309,171311,171313,171315,171317,171320],{"class":37,"line":55},[35,171305,171306],{"class":359},"    index ",[35,171308,544],{"class":495},[35,171310,2723],{"class":58},[35,171312,499],{"class":359},[35,171314,54147],{"class":58},[35,171316,499],{"class":359},[35,171318,171319],{"class":306},"\"请输入索引:\"",[35,171321,30823],{"class":359},[35,171323,171324,171326],{"class":37,"line":65},[35,171325,31625],{"class":58},[35,171327,171328],{"class":359},"(nums[index])\n",[35,171330,171331,171333,171335],{"class":37,"line":74},[35,171332,171145],{"class":495},[35,171334,152477],{"class":58},[35,171336,4073],{"class":359},[35,171338,171339,171341,171343,171346],{"class":37,"line":83},[35,171340,31625],{"class":58},[35,171342,499],{"class":359},[35,171344,171345],{"class":306},"\"索引必须是整数\"",[35,171347,505],{"class":359},[35,171349,171350,171352,171355],{"class":37,"line":92},[35,171351,171145],{"class":495},[35,171353,171354],{"class":58}," IndexError",[35,171356,4073],{"class":359},[35,171358,171359,171361,171363,171366],{"class":37,"line":101},[35,171360,31625],{"class":58},[35,171362,499],{"class":359},[35,171364,171365],{"class":306},"\"索引越界\"",[35,171367,505],{"class":359},[21,171369,171370],{},"多个异常使用相同处理逻辑：",[25,171372,171374],{"className":30704,"code":171373,"language":30706,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[32,171375,171376,171382,171400,171413,171427],{"__ignoreMap":30},[35,171377,171378,171380],{"class":37,"line":38},[35,171379,171133],{"class":495},[35,171381,4073],{"class":359},[35,171383,171384,171386,171388,171390,171392,171394,171396,171398],{"class":37,"line":45},[35,171385,45919],{"class":359},[35,171387,544],{"class":495},[35,171389,2723],{"class":58},[35,171391,499],{"class":359},[35,171393,54147],{"class":58},[35,171395,499],{"class":359},[35,171397,156047],{"class":306},[35,171399,30823],{"class":359},[35,171401,171402,171404,171406,171408,171410],{"class":37,"line":55},[35,171403,31625],{"class":58},[35,171405,499],{"class":359},[35,171407,940],{"class":58},[35,171409,156297],{"class":495},[35,171411,171412],{"class":359}," num)\n",[35,171414,171415,171417,171419,171421,171423,171425],{"class":37,"line":65},[35,171416,171145],{"class":495},[35,171418,2012],{"class":359},[35,171420,155085],{"class":58},[35,171422,12769],{"class":359},[35,171424,171028],{"class":58},[35,171426,31112],{"class":359},[35,171428,171429,171431,171433,171436],{"class":37,"line":74},[35,171430,31625],{"class":58},[35,171432,499],{"class":359},[35,171434,171435],{"class":306},"\"输入不合法\"",[35,171437,505],{"class":359},[438,171439,171441],{"id":171440},"_95-获取异常信息","9.5 获取异常信息",[25,171443,171445],{"className":30704,"code":171444,"language":30706,"meta":30,"style":30},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[32,171446,171447,171453,171467,171478],{"__ignoreMap":30},[35,171448,171449,171451],{"class":37,"line":38},[35,171450,171133],{"class":495},[35,171452,4073],{"class":359},[35,171454,171455,171457,171459,171461,171463,171465],{"class":37,"line":45},[35,171456,45919],{"class":359},[35,171458,544],{"class":495},[35,171460,2723],{"class":58},[35,171462,499],{"class":359},[35,171464,156131],{"class":306},[35,171466,505],{"class":359},[35,171468,171469,171471,171473,171475],{"class":37,"line":55},[35,171470,171145],{"class":495},[35,171472,152477],{"class":58},[35,171474,64930],{"class":495},[35,171476,171477],{"class":359}," e:\n",[35,171479,171480,171482,171484,171486,171489,171491,171493,171495,171497],{"class":37,"line":65},[35,171481,31625],{"class":58},[35,171483,499],{"class":359},[35,171485,550],{"class":495},[35,171487,171488],{"class":306},"\"出错了:",[35,171490,1390],{"class":58},[35,171492,571],{"class":359},[35,171494,1440],{"class":58},[35,171496,747],{"class":306},[35,171498,505],{"class":359},[21,171500,146708],{},[25,171502,171505],{"className":171503,"code":171504,"language":5521,"meta":30},[5519],"出错了:invalid literal for int() with base 10: 'abc'\n",[32,171506,171504],{"__ignoreMap":30},[438,171508,171510],{"id":171509},"_96-else和finally","9.6 else和finally",[21,171512,171513,171515],{},[32,171514,2051],{},"：没有异常时执行。",[21,171517,171518,171521],{},[32,171519,171520],{},"finally","：无论是否异常都会执行。",[25,171523,171525],{"className":30704,"code":171524,"language":30706,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[32,171526,171527,171533,171551,171559,171569,171575,171596,171602],{"__ignoreMap":30},[35,171528,171529,171531],{"class":37,"line":38},[35,171530,171133],{"class":495},[35,171532,4073],{"class":359},[35,171534,171535,171537,171539,171541,171543,171545,171547,171549],{"class":37,"line":45},[35,171536,45919],{"class":359},[35,171538,544],{"class":495},[35,171540,2723],{"class":58},[35,171542,499],{"class":359},[35,171544,54147],{"class":58},[35,171546,499],{"class":359},[35,171548,156047],{"class":306},[35,171550,30823],{"class":359},[35,171552,171553,171555,171557],{"class":37,"line":55},[35,171554,171145],{"class":495},[35,171556,152477],{"class":58},[35,171558,4073],{"class":359},[35,171560,171561,171563,171565,171567],{"class":37,"line":65},[35,171562,31625],{"class":58},[35,171564,499],{"class":359},[35,171566,153465],{"class":306},[35,171568,505],{"class":359},[35,171570,171571,171573],{"class":37,"line":74},[35,171572,2051],{"class":495},[35,171574,4073],{"class":359},[35,171576,171577,171579,171581,171583,171586,171588,171590,171592,171594],{"class":37,"line":83},[35,171578,31625],{"class":58},[35,171580,499],{"class":359},[35,171582,550],{"class":495},[35,171584,171585],{"class":306},"\"输入正确:",[35,171587,1390],{"class":58},[35,171589,2019],{"class":359},[35,171591,1440],{"class":58},[35,171593,747],{"class":306},[35,171595,505],{"class":359},[35,171597,171598,171600],{"class":37,"line":92},[35,171599,171520],{"class":495},[35,171601,4073],{"class":359},[35,171603,171604,171606,171608,171611],{"class":37,"line":101},[35,171605,31625],{"class":58},[35,171607,499],{"class":359},[35,171609,171610],{"class":306},"\"程序结束\"",[35,171612,505],{"class":359},[21,171614,171615,171617],{},[32,171616,171520],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[438,171619,171621],{"id":171620},"_97-抛出异常","9.7 抛出异常",[21,171623,171624],{},"程序可以主动抛出异常。",[25,171626,171628],{"className":30704,"code":171627,"language":30706,"meta":30,"style":30},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[32,171629,171630,171639,171651,171664,171684,171688,171692],{"__ignoreMap":30},[35,171631,171632,171634,171637],{"class":37,"line":38},[35,171633,32273],{"class":495},[35,171635,171636],{"class":48}," set_age",[35,171638,161666],{"class":359},[35,171640,171641,171643,171645,171647,171649],{"class":37,"line":45},[35,171642,3435],{"class":495},[35,171644,16041],{"class":359},[35,171646,1404],{"class":495},[35,171648,4427],{"class":58},[35,171650,4073],{"class":359},[35,171652,171653,171655,171657,171659,171662],{"class":37,"line":55},[35,171654,103754],{"class":495},[35,171656,152477],{"class":58},[35,171658,499],{"class":359},[35,171660,171661],{"class":306},"\"年龄不能为负数\"",[35,171663,505],{"class":359},[35,171665,171666,171668,171670,171672,171674,171676,171678,171680,171682],{"class":37,"line":65},[35,171667,31625],{"class":58},[35,171669,499],{"class":359},[35,171671,550],{"class":495},[35,171673,162234],{"class":306},[35,171675,1390],{"class":58},[35,171677,70546],{"class":359},[35,171679,1440],{"class":58},[35,171681,747],{"class":306},[35,171683,505],{"class":359},[35,171685,171686],{"class":37,"line":74},[35,171687,141],{"emptyLinePlaceholder":140},[35,171689,171690],{"class":37,"line":83},[35,171691,141],{"emptyLinePlaceholder":140},[35,171693,171694,171697,171699,171701],{"class":37,"line":92},[35,171695,171696],{"class":359},"set_age(",[35,171698,1026],{"class":495},[35,171700,713],{"class":58},[35,171702,505],{"class":359},[21,171704,171705],{},"调用者可以捕获：",[25,171707,171709],{"className":30704,"code":171708,"language":30706,"meta":30,"style":30},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[32,171710,171711,171717,171728,171738],{"__ignoreMap":30},[35,171712,171713,171715],{"class":37,"line":38},[35,171714,171133],{"class":495},[35,171716,4073],{"class":359},[35,171718,171719,171722,171724,171726],{"class":37,"line":45},[35,171720,171721],{"class":359},"    set_age(",[35,171723,1026],{"class":495},[35,171725,713],{"class":58},[35,171727,505],{"class":359},[35,171729,171730,171732,171734,171736],{"class":37,"line":55},[35,171731,171145],{"class":495},[35,171733,152477],{"class":58},[35,171735,64930],{"class":495},[35,171737,171477],{"class":359},[35,171739,171740,171742],{"class":37,"line":65},[35,171741,31625],{"class":58},[35,171743,67325],{"class":359},[438,171745,171747],{"id":171746},"_98-自定义异常","9.8 自定义异常",[25,171749,171751],{"className":30704,"code":171750,"language":30706,"meta":30,"style":30},"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",[32,171752,171753,171767,171771,171775,171779,171787,171797,171808,171818,171822,171826,171832,171849,171860],{"__ignoreMap":30},[35,171754,171755,171757,171760,171762,171765],{"class":37,"line":38},[35,171756,15028],{"class":495},[35,171758,171759],{"class":48}," BalanceNotEnoughError",[35,171761,499],{"class":359},[35,171763,171764],{"class":58},"Exception",[35,171766,31112],{"class":359},[35,171768,171769],{"class":37,"line":45},[35,171770,149788],{"class":495},[35,171772,171773],{"class":37,"line":55},[35,171774,141],{"emptyLinePlaceholder":140},[35,171776,171777],{"class":37,"line":65},[35,171778,141],{"emptyLinePlaceholder":140},[35,171780,171781,171783,171785],{"class":37,"line":74},[35,171782,32273],{"class":495},[35,171784,150437],{"class":48},[35,171786,163063],{"class":359},[35,171788,171789,171791,171793,171795],{"class":37,"line":83},[35,171790,3435],{"class":495},[35,171792,150393],{"class":359},[35,171794,1454],{"class":495},[35,171796,162840],{"class":359},[35,171798,171799,171801,171804,171806],{"class":37,"line":92},[35,171800,103754],{"class":495},[35,171802,171803],{"class":359}," BalanceNotEnoughError(",[35,171805,150488],{"class":306},[35,171807,505],{"class":359},[35,171809,171810,171812,171814,171816],{"class":37,"line":101},[35,171811,4424],{"class":495},[35,171813,163070],{"class":359},[35,171815,1026],{"class":495},[35,171817,150426],{"class":359},[35,171819,171820],{"class":37,"line":110},[35,171821,141],{"emptyLinePlaceholder":140},[35,171823,171824],{"class":37,"line":119},[35,171825,141],{"emptyLinePlaceholder":140},[35,171827,171828,171830],{"class":37,"line":128},[35,171829,171133],{"class":495},[35,171831,4073],{"class":359},[35,171833,171834,171836,171838,171841,171843,171845,171847],{"class":37,"line":137},[35,171835,162741],{"class":359},[35,171837,544],{"class":495},[35,171839,171840],{"class":359}," withdraw(",[35,171842,807],{"class":58},[35,171844,12769],{"class":359},[35,171846,2072],{"class":58},[35,171848,505],{"class":359},[35,171850,171851,171853,171856,171858],{"class":37,"line":144},[35,171852,171145],{"class":495},[35,171854,171855],{"class":359}," BalanceNotEnoughError ",[35,171857,31709],{"class":495},[35,171859,171477],{"class":359},[35,171861,171862,171864],{"class":37,"line":150},[35,171863,31625],{"class":58},[35,171865,67325],{"class":359},[21,171867,171868],{},"入门阶段大多数情况使用内置异常即可。",[438,171870,171872],{"id":171871},"_99-traceback","9.9 traceback",[21,171874,171875],{},"调试时可以输出完整异常堆栈。",[25,171877,171879],{"className":30704,"code":171878,"language":30706,"meta":30,"style":30},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[32,171880,171881,171888,171892,171898,171908,171916],{"__ignoreMap":30},[35,171882,171883,171885],{"class":37,"line":38},[35,171884,30718],{"class":495},[35,171886,171887],{"class":359}," traceback\n",[35,171889,171890],{"class":37,"line":45},[35,171891,141],{"emptyLinePlaceholder":140},[35,171893,171894,171896],{"class":37,"line":55},[35,171895,171133],{"class":495},[35,171897,4073],{"class":359},[35,171899,171900,171902,171904,171906],{"class":37,"line":65},[35,171901,2326],{"class":58},[35,171903,499],{"class":359},[35,171905,156131],{"class":306},[35,171907,505],{"class":359},[35,171909,171910,171912,171914],{"class":37,"line":74},[35,171911,171145],{"class":495},[35,171913,152477],{"class":58},[35,171915,4073],{"class":359},[35,171917,171918],{"class":37,"line":83},[35,171919,171920],{"class":359},"    traceback.print_exc()\n",[21,171922,171923],{},"日志系统中常把异常堆栈记录到文件。",[438,171925,171927],{"id":171926},"_910-什么是模块","9.10 什么是模块",[21,171929,171930,171931,126234],{},"模块就是一个 ",[32,171932,146603],{},[21,171934,171935,171936,24950],{},"例如创建 ",[32,171937,171938],{},"my_math.py",[25,171940,171942],{"className":30704,"code":171941,"language":30706,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[32,171943,171944,171952,171962,171966,171970,171979],{"__ignoreMap":30},[35,171945,171946,171948,171950],{"class":37,"line":38},[35,171947,32273],{"class":495},[35,171949,5543],{"class":48},[35,171951,151344],{"class":359},[35,171953,171954,171956,171958,171960],{"class":37,"line":45},[35,171955,4424],{"class":495},[35,171957,11203],{"class":359},[35,171959,975],{"class":495},[35,171961,151355],{"class":359},[35,171963,171964],{"class":37,"line":55},[35,171965,141],{"emptyLinePlaceholder":140},[35,171967,171968],{"class":37,"line":65},[35,171969,141],{"emptyLinePlaceholder":140},[35,171971,171972,171974,171977],{"class":37,"line":74},[35,171973,32273],{"class":495},[35,171975,171976],{"class":48}," sub",[35,171978,151344],{"class":359},[35,171980,171981,171983,171985,171987],{"class":37,"line":83},[35,171982,4424],{"class":495},[35,171984,11203],{"class":359},[35,171986,1026],{"class":495},[35,171988,151355],{"class":359},[21,171990,171991],{},"在另一个文件中导入：",[25,171993,171995],{"className":30704,"code":171994,"language":30706,"meta":30,"style":30},"import my_math\n\nprint(my_math.add(1, 2))\n",[32,171996,171997,172004,172008],{"__ignoreMap":30},[35,171998,171999,172001],{"class":37,"line":38},[35,172000,30718],{"class":495},[35,172002,172003],{"class":359}," my_math\n",[35,172005,172006],{"class":37,"line":45},[35,172007,141],{"emptyLinePlaceholder":140},[35,172009,172010,172012,172015,172017,172019,172021],{"class":37,"line":55},[35,172011,30741],{"class":58},[35,172013,172014],{"class":359},"(my_math.add(",[35,172016,713],{"class":58},[35,172018,12769],{"class":359},[35,172020,574],{"class":58},[35,172022,30823],{"class":359},[438,172024,172026],{"id":172025},"_911-import导入","9.11 import导入",[465,172028,172030],{"id":172029},"_9111-导入模块","9.11.1 导入模块",[25,172032,172034],{"className":30704,"code":172033,"language":30706,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\n",[32,172035,172036,172042,172046],{"__ignoreMap":30},[35,172037,172038,172040],{"class":37,"line":38},[35,172039,30718],{"class":495},[35,172041,45654],{"class":359},[35,172043,172044],{"class":37,"line":45},[35,172045,141],{"emptyLinePlaceholder":140},[35,172047,172048,172050,172053,172055,172057,172059],{"class":37,"line":55},[35,172049,30741],{"class":58},[35,172051,172052],{"class":359},"(random.randint(",[35,172054,713],{"class":58},[35,172056,12769],{"class":359},[35,172058,940],{"class":58},[35,172060,30823],{"class":359},[465,172062,172064],{"id":172063},"_9112-导入指定内容","9.11.2 导入指定内容",[25,172066,172068],{"className":30704,"code":172067,"language":30706,"meta":30,"style":30},"from random import randint\n\nprint(randint(1, 10))\n",[32,172069,172070,172081,172085],{"__ignoreMap":30},[35,172071,172072,172074,172076,172078],{"class":37,"line":38},[35,172073,31063],{"class":495},[35,172075,58122],{"class":359},[35,172077,30718],{"class":495},[35,172079,172080],{"class":359}," randint\n",[35,172082,172083],{"class":37,"line":45},[35,172084,141],{"emptyLinePlaceholder":140},[35,172086,172087,172089,172092,172094,172096,172098],{"class":37,"line":55},[35,172088,30741],{"class":58},[35,172090,172091],{"class":359},"(randint(",[35,172093,713],{"class":58},[35,172095,12769],{"class":359},[35,172097,940],{"class":58},[35,172099,30823],{"class":359},[465,172101,172103],{"id":172102},"_9113-起别名","9.11.3 起别名",[25,172105,172107],{"className":30704,"code":172106,"language":30706,"meta":30,"style":30},"import random as rd\n\nprint(rd.randint(1, 10))\n",[32,172108,172109,172120,172124],{"__ignoreMap":30},[35,172110,172111,172113,172115,172117],{"class":37,"line":38},[35,172112,30718],{"class":495},[35,172114,58122],{"class":359},[35,172116,31709],{"class":495},[35,172118,172119],{"class":359}," rd\n",[35,172121,172122],{"class":37,"line":45},[35,172123,141],{"emptyLinePlaceholder":140},[35,172125,172126,172128,172131,172133,172135,172137],{"class":37,"line":55},[35,172127,30741],{"class":58},[35,172129,172130],{"class":359},"(rd.randint(",[35,172132,713],{"class":58},[35,172134,12769],{"class":359},[35,172136,940],{"class":58},[35,172138,30823],{"class":359},[25,172140,172142],{"className":30704,"code":172141,"language":30706,"meta":30,"style":30},"from random import randint as rint\n\nprint(rint(1, 10))\n",[32,172143,172144,172160,172164],{"__ignoreMap":30},[35,172145,172146,172148,172150,172152,172155,172157],{"class":37,"line":38},[35,172147,31063],{"class":495},[35,172149,58122],{"class":359},[35,172151,30718],{"class":495},[35,172153,172154],{"class":359}," randint ",[35,172156,31709],{"class":495},[35,172158,172159],{"class":359}," rint\n",[35,172161,172162],{"class":37,"line":45},[35,172163,141],{"emptyLinePlaceholder":140},[35,172165,172166,172168,172171,172173,172175,172177],{"class":37,"line":55},[35,172167,30741],{"class":58},[35,172169,172170],{"class":359},"(rint(",[35,172172,713],{"class":58},[35,172174,12769],{"class":359},[35,172176,940],{"class":58},[35,172178,30823],{"class":359},[465,172180,172182],{"id":172181},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[25,172184,172186],{"className":30704,"code":172185,"language":30706,"meta":30,"style":30},"from random import *\n",[32,172187,172188],{"__ignoreMap":30},[35,172189,172190,172192,172194,172196],{"class":37,"line":38},[35,172191,31063],{"class":495},[35,172193,58122],{"class":359},[35,172195,30718],{"class":495},[35,172197,172198],{"class":495}," *\n",[21,172200,172201],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[438,172203,172205],{"id":172204},"_912-常用内置模块","9.12 常用内置模块",[465,172207,172209],{"id":172208},"_9121-random","9.12.1 random",[25,172211,172213],{"className":30704,"code":172212,"language":30706,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[32,172214,172215,172221,172225,172239,172258],{"__ignoreMap":30},[35,172216,172217,172219],{"class":37,"line":38},[35,172218,30718],{"class":495},[35,172220,45654],{"class":359},[35,172222,172223],{"class":37,"line":45},[35,172224,141],{"emptyLinePlaceholder":140},[35,172226,172227,172229,172231,172233,172235,172237],{"class":37,"line":55},[35,172228,30741],{"class":58},[35,172230,172052],{"class":359},[35,172232,713],{"class":58},[35,172234,12769],{"class":359},[35,172236,940],{"class":58},[35,172238,30823],{"class":359},[35,172240,172241,172243,172246,172248,172250,172252,172254,172256],{"class":37,"line":65},[35,172242,30741],{"class":58},[35,172244,172245],{"class":359},"(random.choice([",[35,172247,150139],{"class":306},[35,172249,12769],{"class":359},[35,172251,151187],{"class":306},[35,172253,12769],{"class":359},[35,172255,159982],{"class":306},[35,172257,33469],{"class":359},[35,172259,172260,172262,172265,172267,172269,172271,172273,172275,172277,172279,172281,172283,172285,172287],{"class":37,"line":74},[35,172261,30741],{"class":58},[35,172263,172264],{"class":359},"(random.sample([",[35,172266,713],{"class":58},[35,172268,12769],{"class":359},[35,172270,574],{"class":58},[35,172272,12769],{"class":359},[35,172274,568],{"class":58},[35,172276,12769],{"class":359},[35,172278,789],{"class":58},[35,172280,12769],{"class":359},[35,172282,372],{"class":58},[35,172284,112524],{"class":359},[35,172286,574],{"class":58},[35,172288,30823],{"class":359},[465,172290,172292],{"id":172291},"_9122-time","9.12.2 time",[25,172294,172296],{"className":30704,"code":172295,"language":30706,"meta":30,"style":30},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[32,172297,172298,172304,172308,172315,172323],{"__ignoreMap":30},[35,172299,172300,172302],{"class":37,"line":38},[35,172301,30718],{"class":495},[35,172303,32155],{"class":359},[35,172305,172306],{"class":37,"line":45},[35,172307,141],{"emptyLinePlaceholder":140},[35,172309,172310,172312],{"class":37,"line":55},[35,172311,30741],{"class":58},[35,172313,172314],{"class":359},"(time.time())\n",[35,172316,172317,172319,172321],{"class":37,"line":65},[35,172318,95396],{"class":359},[35,172320,713],{"class":58},[35,172322,505],{"class":359},[35,172324,172325,172327,172329,172332],{"class":37,"line":74},[35,172326,30741],{"class":58},[35,172328,499],{"class":359},[35,172330,172331],{"class":306},"\"1秒后执行\"",[35,172333,505],{"class":359},[465,172335,172337],{"id":172336},"_9123-datetime","9.12.3 datetime",[25,172339,172341],{"className":30704,"code":172340,"language":30706,"meta":30,"style":30},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[32,172342,172343,172355,172359,172369,172376],{"__ignoreMap":30},[35,172344,172345,172347,172350,172352],{"class":37,"line":38},[35,172346,31063],{"class":495},[35,172348,172349],{"class":359}," datetime ",[35,172351,30718],{"class":495},[35,172353,172354],{"class":359}," datetime\n",[35,172356,172357],{"class":37,"line":45},[35,172358,141],{"emptyLinePlaceholder":140},[35,172360,172361,172364,172366],{"class":37,"line":55},[35,172362,172363],{"class":359},"now ",[35,172365,544],{"class":495},[35,172367,172368],{"class":359}," datetime.now()\n",[35,172370,172371,172373],{"class":37,"line":65},[35,172372,30741],{"class":58},[35,172374,172375],{"class":359},"(now)\n",[35,172377,172378,172380,172383,172386,172388,172391],{"class":37,"line":74},[35,172379,30741],{"class":58},[35,172381,172382],{"class":359},"(now.strftime(",[35,172384,172385],{"class":306},"\"%Y-%m-",[35,172387,156942],{"class":58},[35,172389,172390],{"class":306}," %H:%M:%S\"",[35,172392,30823],{"class":359},[465,172394,172396],{"id":172395},"_9124-os","9.12.4 os",[25,172398,172400],{"className":30704,"code":172399,"language":30706,"meta":30,"style":30},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[32,172401,172402,172408,172412,172419],{"__ignoreMap":30},[35,172403,172404,172406],{"class":37,"line":38},[35,172405,30718],{"class":495},[35,172407,45631],{"class":359},[35,172409,172410],{"class":37,"line":45},[35,172411,141],{"emptyLinePlaceholder":140},[35,172413,172414,172416],{"class":37,"line":55},[35,172415,30741],{"class":58},[35,172417,172418],{"class":359},"(os.getcwd())\n",[35,172420,172421,172423,172426,172429],{"class":37,"line":65},[35,172422,30741],{"class":58},[35,172424,172425],{"class":359},"(os.listdir(",[35,172427,172428],{"class":306},"\".\"",[35,172430,30823],{"class":359},[465,172432,172434],{"id":172433},"_9125-sys","9.12.5 sys",[25,172436,172438],{"className":30704,"code":172437,"language":30706,"meta":30,"style":30},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[32,172439,172440,172447,172451,172458],{"__ignoreMap":30},[35,172441,172442,172444],{"class":37,"line":38},[35,172443,30718],{"class":495},[35,172445,172446],{"class":359}," sys\n",[35,172448,172449],{"class":37,"line":45},[35,172450,141],{"emptyLinePlaceholder":140},[35,172452,172453,172455],{"class":37,"line":55},[35,172454,30741],{"class":58},[35,172456,172457],{"class":359},"(sys.version)\n",[35,172459,172460,172462],{"class":37,"line":65},[35,172461,30741],{"class":58},[35,172463,172464],{"class":359},"(sys.path)\n",[438,172466,172468,172469,172471,172472,747],{"id":172467},"_913-if-name-main","9.13 if ",[645,172470,80135],{}," == \"",[645,172473,102380],{},[21,172475,172476,172477,172480],{},"模块被直接运行和被导入时，",[32,172478,172479],{},"__name__"," 的值不同。",[21,172482,172483,172484,24950],{},"创建 ",[32,172485,172486],{},"my_module.py",[25,172488,172490],{"className":30704,"code":172489,"language":30706,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[32,172491,172492,172500,172510,172514,172518,172530],{"__ignoreMap":30},[35,172493,172494,172496,172498],{"class":37,"line":38},[35,172495,32273],{"class":495},[35,172497,5543],{"class":48},[35,172499,151344],{"class":359},[35,172501,172502,172504,172506,172508],{"class":37,"line":45},[35,172503,4424],{"class":495},[35,172505,11203],{"class":359},[35,172507,975],{"class":495},[35,172509,151355],{"class":359},[35,172511,172512],{"class":37,"line":55},[35,172513,141],{"emptyLinePlaceholder":140},[35,172515,172516],{"class":37,"line":65},[35,172517,141],{"emptyLinePlaceholder":140},[35,172519,172520,172522,172524,172526,172528],{"class":37,"line":74},[35,172521,1892],{"class":495},[35,172523,31546],{"class":58},[35,172525,101881],{"class":495},[35,172527,101884],{"class":306},[35,172529,4073],{"class":359},[35,172531,172532,172534,172536,172538,172540,172542],{"class":37,"line":83},[35,172533,31625],{"class":58},[35,172535,166851],{"class":359},[35,172537,713],{"class":58},[35,172539,12769],{"class":359},[35,172541,574],{"class":58},[35,172543,30823],{"class":359},[21,172545,172546],{},"作用：",[14,172548,172549,172552],{},[17,172550,172551],{},"直接运行该文件时，执行测试代码。",[17,172553,172554],{},"被其他文件导入时，不执行测试代码。",[21,172556,172557],{},"这是写模块时很常用的习惯。",[438,172559,172561],{"id":172560},"_914-包","9.14 包",[21,172563,172564,172565,172568],{},"包是包含 ",[32,172566,172567],{},"__init__.py"," 的目录，用于组织多个模块。",[21,172570,172571],{},"目录结构：",[25,172573,172576],{"className":172574,"code":172575,"language":5521,"meta":30},[5519],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[32,172577,172575],{"__ignoreMap":30},[21,172579,172580],{},"导入：",[25,172582,172584],{"className":30704,"code":172583,"language":30706,"meta":30,"style":30},"from utils.file_utils import read_file\n",[32,172585,172586],{"__ignoreMap":30},[35,172587,172588,172590,172593,172595],{"class":37,"line":38},[35,172589,31063],{"class":495},[35,172591,172592],{"class":359}," utils.file_utils ",[35,172594,30718],{"class":495},[35,172596,172597],{"class":359}," read_file\n",[21,172599,172600,172602],{},[32,172601,172567],{}," 可以为空，也可以写包初始化逻辑。",[438,172604,172606],{"id":172605},"_915-第三方包","9.15 第三方包",[21,172608,172609,172610,172612],{},"第三方包通过 ",[32,172611,24165],{}," 安装。",[25,172614,172616],{"className":24156,"code":172615,"language":24158,"meta":30,"style":30},"pip install requests\n",[32,172617,172618],{"__ignoreMap":30},[35,172619,172620,172622,172624],{"class":37,"line":38},[35,172621,24165],{"class":48},[35,172623,318],{"class":306},[35,172625,146349],{"class":306},[21,172627,172628],{},"使用：",[25,172630,172632],{"className":30704,"code":172631,"language":30706,"meta":30,"style":30},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[32,172633,172634,172640,172644,172659],{"__ignoreMap":30},[35,172635,172636,172638],{"class":37,"line":38},[35,172637,30718],{"class":495},[35,172639,146349],{"class":359},[35,172641,172642],{"class":37,"line":45},[35,172643,141],{"emptyLinePlaceholder":140},[35,172645,172646,172649,172651,172654,172657],{"class":37,"line":55},[35,172647,172648],{"class":359},"response ",[35,172650,544],{"class":495},[35,172652,172653],{"class":359}," requests.get(",[35,172655,172656],{"class":306},"\"https:\u002F\u002Fwww.example.com\"",[35,172658,505],{"class":359},[35,172660,172661,172663],{"class":37,"line":65},[35,172662,30741],{"class":58},[35,172664,172665],{"class":359},"(response.status_code)\n",[21,172667,172668],{},"查看已安装包：",[25,172670,172672],{"className":24156,"code":172671,"language":24158,"meta":30,"style":30},"pip list\n",[32,172673,172674],{"__ignoreMap":30},[35,172675,172676,172678],{"class":37,"line":38},[35,172677,24165],{"class":48},[35,172679,119273],{"class":306},[21,172681,172682],{},"导出项目依赖：",[25,172684,172685],{"className":24156,"code":146544,"language":24158,"meta":30,"style":30},[32,172686,172687],{"__ignoreMap":30},[35,172688,172689,172691,172693,172695],{"class":37,"line":38},[35,172690,24165],{"class":48},[35,172692,146553],{"class":306},[35,172694,26552],{"class":495},[35,172696,146558],{"class":306},[21,172698,172699],{},"安装项目依赖：",[25,172701,172702],{"className":24156,"code":146564,"language":24158,"meta":30,"style":30},[32,172703,172704],{"__ignoreMap":30},[35,172705,172706,172708,172710,172712],{"class":37,"line":38},[35,172707,24165],{"class":48},[35,172709,318],{"class":306},[35,172711,119957],{"class":58},[35,172713,146558],{"class":306},[438,172715,172717],{"id":172716},"_916-模块搜索路径","9.16 模块搜索路径",[21,172719,172720,172721,172724],{},"Python 导入模块时会在 ",[32,172722,172723],{},"sys.path"," 中查找。",[25,172726,172728],{"className":30704,"code":172727,"language":30706,"meta":30,"style":30},"import sys\n\nfor path in sys.path:\n    print(path)\n",[32,172729,172730,172736,172740,172752],{"__ignoreMap":30},[35,172731,172732,172734],{"class":37,"line":38},[35,172733,30718],{"class":495},[35,172735,172446],{"class":359},[35,172737,172738],{"class":37,"line":45},[35,172739,141],{"emptyLinePlaceholder":140},[35,172741,172742,172744,172747,172749],{"class":37,"line":55},[35,172743,3359],{"class":495},[35,172745,172746],{"class":359}," path ",[35,172748,26374],{"class":495},[35,172750,172751],{"class":359}," sys.path:\n",[35,172753,172754,172756],{"class":37,"line":65},[35,172755,31625],{"class":58},[35,172757,169480],{"class":359},[21,172759,172760],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[21,172762,157874],{},[25,172764,172767],{"className":172765,"code":172766,"language":5521,"meta":30},[5519],"random.py\njson.py\ntime.py\n",[32,172768,172766],{"__ignoreMap":30},[21,172770,172771],{},"这些文件名可能导致导入异常。",[438,172773,172775],{"id":172774},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[21,172777,172571],{},[25,172779,172782],{"className":172780,"code":172781,"language":5521,"meta":30},[5519],"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",[32,172783,172781],{"__ignoreMap":30},[21,172785,172786,24950],{},[32,172787,172788],{},"utils\u002Ffile_utils.py",[25,172790,172792],{"className":30704,"code":172791,"language":30706,"meta":30,"style":30},"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",[32,172793,172794,172800,172810,172814,172818,172828,172838,172846,172852,172856,172883,172893,172897,172901,172911,172937],{"__ignoreMap":30},[35,172795,172796,172798],{"class":37,"line":38},[35,172797,30718],{"class":495},[35,172799,147342],{"class":359},[35,172801,172802,172804,172806,172808],{"class":37,"line":45},[35,172803,31063],{"class":495},[35,172805,108633],{"class":359},[35,172807,30718],{"class":495},[35,172809,108638],{"class":359},[35,172811,172812],{"class":37,"line":55},[35,172813,141],{"emptyLinePlaceholder":140},[35,172815,172816],{"class":37,"line":65},[35,172817,141],{"emptyLinePlaceholder":140},[35,172819,172820,172822,172825],{"class":37,"line":74},[35,172821,32273],{"class":495},[35,172823,172824],{"class":48}," read_json",[35,172826,172827],{"class":359},"(path):\n",[35,172829,172830,172833,172835],{"class":37,"line":83},[35,172831,172832],{"class":359},"    path ",[35,172834,544],{"class":495},[35,172836,172837],{"class":359}," Path(path)\n",[35,172839,172840,172842,172844],{"class":37,"line":92},[35,172841,3435],{"class":495},[35,172843,39256],{"class":495},[35,172845,169561],{"class":359},[35,172847,172848,172850],{"class":37,"line":101},[35,172849,15086],{"class":495},[35,172851,52164],{"class":359},[35,172853,172854],{"class":37,"line":110},[35,172855,141],{"emptyLinePlaceholder":140},[35,172857,172858,172860,172862,172865,172867,172869,172871,172873,172875,172877,172879,172881],{"class":37,"line":119},[35,172859,34504],{"class":495},[35,172861,147042],{"class":58},[35,172863,172864],{"class":359},"(path, ",[35,172866,147052],{"class":306},[35,172868,12769],{"class":359},[35,172870,147057],{"class":5550},[35,172872,544],{"class":495},[35,172874,147062],{"class":306},[35,172876,14048],{"class":359},[35,172878,31709],{"class":495},[35,172880,148404],{"class":5550},[35,172882,4073],{"class":359},[35,172884,172885,172887,172889,172891],{"class":37,"line":128},[35,172886,15086],{"class":495},[35,172888,148415],{"class":359},[35,172890,45680],{"class":5550},[35,172892,505],{"class":359},[35,172894,172895],{"class":37,"line":137},[35,172896,141],{"emptyLinePlaceholder":140},[35,172898,172899],{"class":37,"line":144},[35,172900,141],{"emptyLinePlaceholder":140},[35,172902,172903,172905,172908],{"class":37,"line":150},[35,172904,32273],{"class":495},[35,172906,172907],{"class":48}," write_json",[35,172909,172910],{"class":359},"(path, data):\n",[35,172912,172913,172915,172917,172919,172921,172923,172925,172927,172929,172931,172933,172935],{"class":37,"line":159},[35,172914,34504],{"class":495},[35,172916,147042],{"class":58},[35,172918,172864],{"class":359},[35,172920,152227],{"class":306},[35,172922,12769],{"class":359},[35,172924,147057],{"class":5550},[35,172926,544],{"class":495},[35,172928,147062],{"class":306},[35,172930,14048],{"class":359},[35,172932,31709],{"class":495},[35,172934,148404],{"class":5550},[35,172936,4073],{"class":359},[35,172938,172939,172942,172944,172946,172948,172950,172952,172954,172956,172958,172960],{"class":37,"line":168},[35,172940,172941],{"class":359},"        json.dump(data, ",[35,172943,45680],{"class":5550},[35,172945,12769],{"class":359},[35,172947,147388],{"class":5550},[35,172949,544],{"class":495},[35,172951,34313],{"class":58},[35,172953,12769],{"class":359},[35,172955,152263],{"class":5550},[35,172957,544],{"class":495},[35,172959,574],{"class":58},[35,172961,505],{"class":359},[21,172963,172964,24950],{},[32,172965,154858],{},[25,172967,172969],{"className":30704,"code":172968,"language":30706,"meta":30,"style":30},"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",[32,172970,172971,172982,172986,172999,173019],{"__ignoreMap":30},[35,172972,172973,172975,172977,172979],{"class":37,"line":38},[35,172974,31063],{"class":495},[35,172976,172592],{"class":359},[35,172978,30718],{"class":495},[35,172980,172981],{"class":359}," read_json, write_json\n",[35,172983,172984],{"class":37,"line":45},[35,172985,141],{"emptyLinePlaceholder":140},[35,172987,172988,172990,172992,172995,172997],{"class":37,"line":55},[35,172989,159967],{"class":359},[35,172991,544],{"class":495},[35,172993,172994],{"class":359}," read_json(",[35,172996,152082],{"class":306},[35,172998,505],{"class":359},[35,173000,173001,173003,173005,173007,173009,173011,173013,173015,173017],{"class":37,"line":65},[35,173002,170785],{"class":359},[35,173004,63005],{"class":306},[35,173006,51763],{"class":359},[35,173008,150139],{"class":306},[35,173010,12769],{"class":359},[35,173012,151723],{"class":306},[35,173014,51763],{"class":359},[35,173016,1483],{"class":58},[35,173018,165403],{"class":359},[35,173020,173021,173024,173026],{"class":37,"line":74},[35,173022,173023],{"class":359},"write_json(",[35,173025,152082],{"class":306},[35,173027,173028],{"class":359},", students)\n",[438,173030,173032],{"id":173031},"_918-易错点","9.18 易错点",[14,173034,173035,173038,173043,173048,173051,173054],{},[17,173036,173037],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[17,173039,173040,173041,28711],{},"能指定异常类型就不要裸写 ",[32,173042,171145],{},[17,173044,173045,173047],{},[32,173046,171520],{}," 无论是否出错都会执行。",[17,173049,173050],{},"模块文件名不要和标准库重名。",[17,173052,173053],{},"导入自己写的模块时，要注意运行目录。",[17,173055,173056],{},"第三方包要安装到当前解释器或虚拟环境中。",[438,173058,173060],{"id":173059},"_919-本章练习","9.19 本章练习",[14,173062,173063,173066,173069,173075,173082],{},[17,173064,173065],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[17,173067,173068],{},"写函数读取文件，如果文件不存在则返回空字符串。",[17,173070,172483,173071,173074],{},[32,173072,173073],{},"math_utils.py","，实现加减乘除函数并导入使用。",[17,173076,173077,173078,173081],{},"创建一个 ",[32,173079,173080],{},"utils"," 包，把 JSON 读写函数放进去。",[17,173083,173084],{},"写一个程序，捕获除零异常和输入格式异常。",[416,173086,173087],{},"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":30,"searchDepth":45,"depth":45,"links":173089},[173090,173091,173092,173093,173094,173095,173096,173097,173098,173099,173100,173106,173113,173115,173116,173117,173118,173119,173120],{"id":170942,"depth":45,"text":170943},{"id":171070,"depth":45,"text":171071},{"id":171119,"depth":45,"text":171120},{"id":171268,"depth":45,"text":171269},{"id":171440,"depth":45,"text":171441},{"id":171509,"depth":45,"text":171510},{"id":171620,"depth":45,"text":171621},{"id":171746,"depth":45,"text":171747},{"id":171871,"depth":45,"text":171872},{"id":171926,"depth":45,"text":171927},{"id":172025,"depth":45,"text":172026,"children":173101},[173102,173103,173104,173105],{"id":172029,"depth":55,"text":172030},{"id":172063,"depth":55,"text":172064},{"id":172102,"depth":55,"text":172103},{"id":172181,"depth":55,"text":172182},{"id":172204,"depth":45,"text":172205,"children":173107},[173108,173109,173110,173111,173112],{"id":172208,"depth":55,"text":172209},{"id":172291,"depth":55,"text":172292},{"id":172336,"depth":55,"text":172337},{"id":172395,"depth":55,"text":172396},{"id":172433,"depth":55,"text":172434},{"id":172467,"depth":45,"text":173114},"9.13 if name == \"main\"",{"id":172560,"depth":45,"text":172561},{"id":172605,"depth":45,"text":172606},{"id":172716,"depth":45,"text":172717},{"id":172774,"depth":45,"text":172775},{"id":173031,"depth":45,"text":173032},{"id":173059,"depth":45,"text":173060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170934,"description":421},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173127,"title":173128,"body":173129,"description":173292,"extension":422,"meta":173293,"navigation":140,"path":173294,"seo":173295,"stem":173296,"__hash__":173297},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173130,"toc":173287},[173131,173134,173137,173140,173151,173153,173227,173230,173233,173236,173239,173242,173245,173248,173251,173254,173257],[10,173132,173128],{"id":173133},"python教程",[21,173135,173136],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[21,173138,173139],{},"建议学习环境：",[14,173141,173142,173145,173148],{},[17,173143,173144],{},"Python 版本：Python 3.10 及以上。",[17,173146,173147],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[17,173149,173150],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[438,173152,117400],{"id":117400},[14,173154,173155,173161,173167,173173,173179,173185,173191,173197,173203,173209,173215,173221],{},[17,173156,173157],{},[734,173158,173160],{"href":173159},".\u002Fch1-Python","Python环境与第一个程序",[17,173162,173163],{},[734,173164,173166],{"href":173165},".\u002Fch2","基础语法、变量与字符串",[17,173168,173169],{},[734,173170,173172],{"href":173171},".\u002Fch3","判断语句",[17,173174,173175],{},[734,173176,173178],{"href":173177},".\u002Fch4","循环语句",[17,173180,173181],{},[734,173182,173184],{"href":173183},".\u002Fch5","函数基础",[17,173186,173187],{},[734,173188,173190],{"href":173189},".\u002Fch6","数据容器",[17,173192,173193],{},[734,173194,173196],{"href":173195},".\u002Fch7","函数进阶",[17,173198,173199],{},[734,173200,173202],{"href":173201},".\u002Fch8","文件操作",[17,173204,173205],{},[734,173206,173208],{"href":173207},".\u002Fch9","异常、模块与包",[17,173210,173211],{},[734,173212,173214],{"href":173213},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[17,173216,173217],{},[734,173218,173220],{"href":173219},".\u002Fch11","面向对象基础",[17,173222,173223],{},[734,173224,173226],{"href":173225},".\u002Fch12","综合案例与复习路线",[438,173228,173229],{"id":173229},"学习路线",[21,173231,173232],{},"第一阶段：能运行程序。",[21,173234,173235],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[21,173237,173238],{},"第二阶段：能组织数据。",[21,173240,173241],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[21,173243,173244],{},"第三阶段：能封装逻辑。",[21,173246,173247],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[21,173249,173250],{},"第四阶段：能做小项目。",[21,173252,173253],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[438,173255,173256],{"id":173256},"参考资料",[14,173258,173259,173266,173273,173280],{},[17,173260,173261,173262],{},"黑马程序员 Python 入门教程推荐：",[734,173263,173264],{"href":173264,"rel":173265},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24198],[17,173267,173268,173269],{},"Python 官方中文教程：",[734,173270,173271],{"href":173271,"rel":173272},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24198],[17,173274,173275,173276],{},"Python 标准库文档：",[734,173277,173278],{"href":173278,"rel":173279},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24198],[17,173281,173282,173283],{},"pyecharts 文档：",[734,173284,173285],{"href":173285,"rel":173286},"https:\u002F\u002Fpyecharts.org\u002F",[24198],{"title":30,"searchDepth":45,"depth":45,"links":173288},[173289,173290,173291],{"id":117400,"depth":45,"text":117400},{"id":173229,"depth":45,"text":173229},{"id":173256,"depth":45,"text":173256},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23712},"\u002Fwiki\u002F2024-10-10-python",{"title":173128,"description":173292},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331462331]